spring与hibernate调整之:继承HibernateDAOSupport方式

spring与hibernate整合之:继承HibernateDAOSupport方式

将spring与hibernate进行整合之后,我们都希望用spring来管理DAO层,这样有利于快速实现功能,少出错。

今天在研究在DAO层编码,采用继承HibernateDAOSupport方式时,发现网上许多人说的都是错的,既然已经继承DAOSupport了,就不应该在DAO层中再有对SessionFactory的注入了。如果注入了,不跟没有用DAOSupport一样了么?或者接近于hibernateTemplate方法了。


我想,既然用了DAOSupport,它里面有了setHibernateTemplate和setSessionFactory方法,且是final的,那么我们就应该直接将SessionFacotry注入到里面。

后来,几经查阅,原来问题在这里。

在spring的配置文件中:写了sessionFactory的bean之后,继承HibernateDAOSupport,发现会报错,说"sessionFactory " or "hibernateTemplate " is required。。。


原因在于,spring没有能将我们在配置文件中写的bean注入到HibernateDAOSupport中,因为spring默认是按类型进行注入的。

而在spring中<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

但看spring的源码,它的HibernateDAOSupport类中的setSessionFactory方法中,SessionFactory的类型是org.hibernate.SessionFactory。

这就会导致我们注入时失败了,解决方法应该还是有多种的,比如说,最简单的就是在spring的配置文件的头部,写上:default-autowire="byName">