购物车 Spring mvc
Posted
技术标签:
【中文标题】购物车 Spring mvc【英文标题】:shopping cart Spring mvc 【发布时间】:2017-10-05 14:44:06 【问题描述】:我正在尝试通过此链接http://o7planning.org/en/10605/create-a-java-shopping-cart-web-application-using-spring-mvc-and-hibernate 实现这个购物车示例
我使用了与它相同的代码。但是我收到以下错误。
警告:上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“myDBAuthenticationService”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.o7planning.springmvcshoppingcart.dao.AccountDAO org.o7planning.springmvcshoppingcart.authentication.MyDBAuthenticationService.accountDAO;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“accountDAO”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.hibernate.SessionFactory org.o7planning.springmvcshoppingcart.dao.impl.AccountDAOImpl.sessionFactory;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建 org.o7planning.springmvcshoppingcart.config.ApplicationContextConfig 中定义的名称为“sessionFactory”的 bean 时出错:通过工厂方法实例化 bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.hibernate.SessionFactory]:工厂方法“getSessionFactory”抛出异常;嵌套异常是 java.lang.NoSuchMethodError: org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.applyClassLoader(Ljava/lang/ClassLoader;)Lorg/hibernate/boot/registry/BootstrapServiceRegistryBuilder; 2017 年 5 月 7 日 12:31:59 PM org.springframework.web.context.ContextLoader initWebApplicationContext 严重:上下文初始化失败 org.springframework.beans.factory.BeanCreationException:创建名为“myDBAuthenticationService”的bean时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.o7planning.springmvcshoppingcart.dao.AccountDAO org.o7planning.springmvcshoppingcart.authentication.MyDBAuthenticationService.accountDAO;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“accountDAO”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:私有 org.hibernate.SessionFactory org.o7planning.springmvcshoppingcart.dao.impl.AccountDAOImpl.sessionFactory;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建 org.o7planning.springmvcshoppingcart.config.ApplicationContextConfig 中定义的名称为“sessionFactory”的 bean 时出错:通过工厂方法实例化 bean 失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:无法实例化 [org.hibernate.SessionFactory]:工厂方法“getSessionFactory”抛出异常;嵌套异常是 java.lang.NoSuchMethodError: org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.applyClassLoader(Ljava/lang/ClassLoader;)Lorg/hibernate/boot/registry/BootstrapServiceRegistryBuilder; 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 在 org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444) 在 org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326) 在 org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107) 在 org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4851) 在 org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) 在 org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 java.lang.Thread.run(Thread.java:745)
谁能帮我解决这个问题?
【问题讨论】:
在堆栈跟踪中,您会发现“NoSuchMethodError: org.hibernate.boot.registry.BootstrapServiceRegistryBuilder.applyClassLoader(Ljava/lang/ClassLoader;)Lorg/hibernate/boot/registry/BootstrapServiceRegistryBuilder;”这对我来说似乎是一个类加载器问题 我在 pom.xml 中使用与示例中相同版本的 hibernate jars,您能解释一下如何解决类加载器问题吗? 【参考方案1】:更改 Hibernate 版本,使用最新的 hibernate (pom.xml):
<!-- Hibernate -->
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.2.10.Final</version>
</dependency>
<!-- http://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.2.10.Final</version>
</dependency>
【讨论】:
使用最新的hibernate后出现同样的错误,即使该示例中的作者也严格要求不要使用hibernate 5 我将它与最新的 Hibernate 5 一起使用,效果很好!!请试试看!!【参考方案2】:喂
问题出在 ApplicationContextConfig.java 类中。该类包含以下导入
import org.springframework.orm.hibernate5.HibernateTransactionManager;
import org.springframework.orm.hibernate5.LocalSessionFactoryBean;
如果您想保持项目结构不变,请将这些导入更改为
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
注意我把hibernate5改成了hibernate4来匹配pom.xml中的依赖版本
这应该是另一种解决方案。
如果有帮助,我想听听。
感谢问候
【讨论】:
以上是关于购物车 Spring mvc的主要内容,如果未能解决你的问题,请参考以下文章
基于Spring MVC + Spring + MyBatis的网上购物系统