'sessionFactory' or 'hibernateTemplate' is required

 

 今天又一次在整合SSH的时候,突然报错了'sessionFactory' or 'hibernateTemplate' is required,先前也写过博客来整合SSH框架,但是先前的框架都是用XML文件进行配置的,而这次小编为了省事想通过注解形式来进行注入,但是报出了上面的错误。


 底层BaseDaoImpl继承了HibernateDaoSupport类,咱们都知道HibernateDaoSupport中报错了SessionFactory的相关信息,还报错了HibernateTemplate模板方法的信息,刚开始小编是这么来写的。


<span style="font-family:Comic Sans MS;font-size:18px;">public abstract  class BaseDaoImpl<T> extends  HibernateDaoSupport implements BaseDao<T> {

	@Resource
	private SessionFactory sessionFactory;
}</span>


 直接在BaseDaoImpl实现类中,想注入sessionFactory,傻傻的很天真,还是对底层机制了解的不是很深刻,其实在HibernateDaoSupport中已经有SessionFactory的引用了,在此就不需要在添加对SessionFactory的引用,但是需要为sessionFactory中进行注入,引用在HibernateDaoSupport中用到了sessionFactory,注入的sessionFactory的目的是为了实例化HibernateTemplate,我们看一下底层源码


<span style="font-family:Comic Sans MS;font-size:18px;">public final void setSessionFactory(SessionFactory sessionFactory) {
		if (this.hibernateTemplate == null || sessionFactory != this.hibernateTemplate.getSessionFactory()) {
			this.hibernateTemplate = createHibernateTemplate(sessionFactory);
		}
	}</span>

 上述源码中,直接用sessionFactory来创建HibernateTemplate,难怪会报'sessionFactory' or 'hibernateTemplate' is required,要不让给我sessionFactory来创建HibernateTemplate,要不然直接给我一个HibernateTemplate,怎么来解决呢,我们重写一下这个方法即可,在set方法中为父类方法赋值即可

<span style="font-family:Comic Sans MS;font-size:18px;">public abstract  class BaseDaoImpl<T> extends  HibernateDaoSupport implements BaseDao<T> {


	
	@Resource  
    public void setSessionFacotry(SessionFactory sessionFacotry) {  
        super.setSessionFactory(sessionFacotry);  
    }  
	
}</span>


你可能感兴趣的:('sessionFactory' or 'hibernateTemplate' is required)