'sessionFactory' or 'hibernateTemplate' is required

解决SSH整合中SessionFactory注入问题
本文介绍在Spring+Struts+Hibernate(SSH)框架整合过程中遇到的'sessionFactory'或'hibernateTemplate'注入失败的问题。通过分析HibernateDaoSupport类的内部机制,给出了正确的SessionFactory注入方式。

 

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


评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值