我把Spring和Hibernate整合起来时,遇到个错误搞了好久,按照网上的方法也没法解决
抛出错误如下:
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
at org.springframework.orm.hibernate3.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:115)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1203)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1172)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:427)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:249)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:155)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:246)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:160)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:291)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:352)
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:246)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:189)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:49)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4336)
at org.apache.catalina.startup.HostConfig.checkResources(HostConfig.java:1105)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1203)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:293)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1307)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1571)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1580)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1560)
at java.lang.Thread.run(Thread.java:619)
2009-11-29 15:48:00 org.apache.catalina.core.StandardContext start
严重: Error listenerStart
2009-11-29 15:48:00 org.apache.catalina.core.StandardContext start
严重: Context [/bookstore1.0.1] startup failed due to previous errors
2009-11-29 15:48:00 org.apache.catalina.core.ApplicationContext log
<bean id="userDAO" class="org.bookstore.dao.impl.UserDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userService" class="org.bookstore.service.impl.UserService">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
</bean>
public class UserDAO extends HibernateDaoSupport implements IUserDAO {
public void saveUser(User user) {
......
}
}
修改后如下:
<bean id="userDAO" class="org.bookstore.dao.impl.UserDAO">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="userService" class="org.bookstore.service.impl.UserService">
<property name="userDAO">
<ref bean="userDAO"/>
</property>
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
原因:
我的org.bookstore.dao.impl.UserDAO继承了org.springframework.orm.hibernate3.support.HibernateDaoSupport, spring在初始化容器的时候会对这个对象作一个check, 看下HibernateDaoSupport源码中的checkDaoConfig()方法就清楚啦:
- protected final void checkDaoConfig() {
-
if (this.hibernateTemplate == null) {
-
throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");
- }
- }
protected final void checkDaoConfig() {
if (this.hibernateTemplate == null) {
throw new IllegalArgumentException("'sessionFactory' or 'hibernateTemplate' is required");
}
}
所以,在com.lfw.sh.manager.impl.UserManageImpl对象一定要注入一个sessionFactory or hibernateTemplate对象。
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/bookstore/model/User.hbm.xml</value>
....
</list>
</property>
</bean>
分享到:
相关推荐
NULL 博文链接:https://tedtian.iteye.com/blog/1988917
HibernateSessionFactory.java
hibernate中的SessionFactoryhibernate中的SessionFactoryhibernate中的SessionFactory
Spring文件中的 SessionFactory中 加入为了能得到同一个Session
用于获得Session会话及关闭Session会话
一个实例小工程,讲解的是将hibernate的sessionFactory交给spring管理的配置方法
NULL 博文链接:https://chaoyi.iteye.com/blog/2148991
博文链接:https://shaqiang32.iteye.com/blog/201918
Hibernate中的sessionFactory
(S+S+H)(private_SessionFactory_属性_dao类)_方式_SSH_整合--总结
Session s= HibernateSessionFactory.getSession(); 就是Hibernate的工具java类
针对sessionFactory没有出现的可能原因;
Hibernate中涉及到的增加,删除,查询,修改,操作.
NULL 博文链接:https://jie2workjava.iteye.com/blog/901847
NULL 博文链接:https://zgdkik.iteye.com/blog/1835667
如:SessionFactory的注入、HibernateTemplate的简化操作、DAO的支持等。 为了更好地与持久层框架整合,Spring还提供了统一的异常处理体系和事务管理方法。 24.1 概述 24.1.1 概述 如果Spring与Hibernate进行了整合...
spring管理sessionFactory,将sessionFactory注入基础类,将基础类设置为单例模式,下载后直接部署使用,根据实体类自行建表