在对spring零配置的时候:
impl类里面 出现以上的错误:
出现此错误的原因是因为sessionfactory没有注入
注入方法:
@Resource(name="sessionFactory")
public void setSessionFacotry(SessionFactory sessionFacotry) {
super.setSessionFactory(sessionFacotry);
}
那么为什么会这样的?
此Impl方法里面继承了HibernateDaoSupport方法:
关于HibernateDaoSupport方法,一下是百度的说法:
如果你选择这种设计,就需要动态注入SessionFactory而HibernateDaoSupport包含这个属性.这个类提供了一个方便的方法getHibernateTemplate(); 就能得到HibernateTemplate的一个实例.它也有getSession()和releaseSession,以便于你应为某些原因而不使用HibernateTempate的情况下执行Hibernate操作。
HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交。在JDBC中一个Connection对象使用一个事务,那么在Hibernate中一个事务肯定要关联一个SessionFactory了,然而这个SessionFactory却没有在DAO中体现。其实主要的原因是HibernateDaoSupport类已经默默地做了封装的工作,它用一个setSessionFactory方法将SessionFactory进行注入,所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库。 在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。
解决这个错误有三种方法:
1:就是如上:
@Resource(name="sessionFactory")
public void setSessionFacotry(SessionFactory sessionFacotry) {
super.setSessionFactory(sessionFacotry);
}
或者
private SessionFactory sessionFactory;
public void setSessionFacotry(SessionFactory sessionFacotry) {
super.setSessionFactory(sessionFacotry);
}
2在配置文件里面配置:
类似这样:
<bean id="managerDao" class="com.thinkbank.j2eeblog.dao.ManagerDaoImpl">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>3.自己写一个方法,继承HibernateDaoSupport,把SessionFactory注入进去就够了。你的持久层调用此方法就够了。
本文详细解析了在Spring零配置环境下,当impl类出现SessionFactory注入错误时的解决方案。通过使用@Resource注解、在配置文件中配置或自定义方法注入SessionFactory,实现了SessionFactory的正确注入,进而解决了错误。此外,文章还介绍了HibernateDaoSupport类如何自动处理事务,并解释了在继承此类的DAO实现中,SessionFactory的管理由Spring负责,显著提高了数据库访问性能。
787

被折叠的 条评论
为什么被折叠?



