'sessionFactory' or 'hibernateTemplate' is required

来源:互联网 发布:刚性兑付 知乎 编辑:程序博客网 时间:2024/04/30 14:16

 

 今天又一次在整合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> {@Resourceprivate 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>


0 0
原创粉丝点击