【发布时间】:2015-10-01 17:40:17
【问题描述】:
每次更改xml 文件时都会出现此错误。这是我得到的:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'managerExpedBitacora' defined in class path resource [config/spring/manager.xml]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
全栈:
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1566)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:755)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4728)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5166)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1409)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1399)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
at org.springframework.orm.hibernate4.support.HibernateDaoSupport.checkDaoConfig(HibernateDaoSupport.java:117)
at org.springframework.dao.support.DaoSupport.afterPropertiesSet(DaoSupport.java:44)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1625)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1562)
... 21 more
这是我的manager.xml,仅供参考:
<bean id="managerExpedBitacora" class="es.myCompany.lq.manager.impl.ManagerExpedBitacoraImpl">
<property name="daoExpedBitacora" ref="daoExpedBitacora"/>
</bean>
...
<bean id="managerExpedienteLS" class="es.myCompany.lq.manager.impl.ManagerExpedienteLSImpl">
....
<property name="managerExpedBitacora" ref="managerExpedBitacora" />
....
</bean>
这是我的daos.xml,只有几行:
<bean id="daoExpedBitacora" class="es.myCompany.lq.dao.impl.DaoExpedBitacoraHbmImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
如您所见,我已经注入了 sessionFactory。
还有,applicationContext.xml,邮件部分:
<import resource="classpath:config/spring/properties.xml"/>
<import resource="classpath:config/spring/utils.xml"/>
<import resource="classpath:config/spring/bbdd.xml"/>
<import resource="classpath:config/spring/daos.xml"/>
<import resource="classpath:config/spring/manager.xml"/>
<import resource="classpath:config/spring/actions.xml"/>
还有,我的一部分DaoExpedBitacoraHbmImpl.java:
public class DaoExpedBitacoraHbmImpl extends HibernateDaoSupport implements
DaoExpedBitacora {
...(methods)
}
而且,HibernateDaoSupport.java,只是其中的一部分。
public class HibernateDaoSupport extends org.springframework.orm.hibernate4.support.HibernateDaoSupport{
....
}
那么,这里有什么问题?
【问题讨论】:
-
您是否有
setSessionFactory如果有,请确保它正在调用超级设置器。另外从堆栈跟踪 sn-p 判断(请添加完整的堆栈跟踪)您的服务也在扩展HibernateDaoSupport类 -
你能解释一下你用 DaoExpedBitacoraHbmImpl 方法写的东西吗?
-
我可以看到您需要 daoExpedBitacora 中的 sessionFactory,但您实际在哪里提供呢?
-
@M. Deinum 它是完整的堆栈跟踪,请参阅我的问题,并感谢您的评论。反正项目上级解决了,下面回答。
-
感谢大家的评论。 @M。 Deinum 它是完整的堆栈跟踪,请参阅我的问题,我没有
sessionFactory设置器,它工作正常。没错,我的实现类也在扩展它,这就是它失败的原因。 @Darshan 我在我的DaoExpedBitacoraHbmImpl中编写了三个方法:insert、get具有相同 bean 的 ID,select具有另一个关联类的 id,均具有getHibernateTemplate和Criteria。 @Jens Schauder 我在spring\orm\hibernate4\support\AutoOpenSessionInviewFilter.java中提供 sessionFactory,它不在这里。