购物车 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的网上购物系统

如何从淘汰赛 mvc 购物车样本中计算购物车总价值

MVC 47.SportsSore:完成购物车

asp.netcore3.0mvc如何添加订餐系统购物车模块

使用MVC / EF总结购物车中的重复订单项

仍然可以在 ASP.NET mvc 中使用 Session 变量,或者对于某些事情(比如购物车)有更好的选择