当前位置: 代码迷 >> Java相关 >> 有继承时Spring注入不进去,什么原因呢?该如何解决
  详细解决方案

有继承时Spring注入不进去,什么原因呢?该如何解决

热度:8155   发布时间:2013-02-25 21:50:43.0
有继承时Spring注入不进去,什么原因呢?
我有一个BaseService接口,本意是提供一些通用的方法,具体业务Service继承这个BaseService。在BaseService内有一个BaseDao,也是提供的通用方法。

但是现在出现一个问题,在业务Service中调用继承的BaseService方法时发现,BaseDao==null,没有注入进去,这是什么原因?


具体举个例子:
BaseService如下:
Java code
public interface BaseService {    /**     * 根据HQL查询数据库     * @param hql     * @return     */    public List findByHql(String hql);}

BaseService实现类:
Java code
public class BaseServiceImpy implements BaseService {    private BaseDao baseDao;    public List findBySql(String sql) {        return this.baseDao.findBySql(sql);   //这里baseDao == null    }//setter, getter    public BaseDao getBaseDao() {        return baseDao;    }    public void setBaseDao(BaseDao baseDao) {        this.baseDao = baseDao;    }}


我有一个业务Service:
Java code
public interface SysActionService extends BaseService{    //未定义任何方法,调用BaseService中的方法}


实现类:
Java code
public class SysActionServiceImpy extends BaseServiceImpy implements SysActionService{    private static Log log = LogFactory.getLog(SysActionService.class);    private SysActionDao sysActionDao;    public SysActionDao getSysActionDao() {        return sysActionDao;    }    public void setSysActionDao(SysActionDao sysActionDao) {        this.sysActionDao = sysActionDao;    }}


spring配置如下:
XML code
    <bean id="baseDao" class="com.dao.impy.BaseDaoImpy">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <bean id="baseService" class="com.impy.BaseServiceImpy">        <property name="baseDao" ref="baseDao"></property>    </bean>    <bean id="sysActionDao" class="com.dao.impy.SysActionDaoImpy">        <property name="sessionFactory" ref="sessionFactory" />    </bean>    <bean id="sysActionService" class="com.service.impy.SysActionServiceImpy">        <property name="sysActionDao" ref="sysActionDao" />    </bean>

我在Struts2的Action中注入了sysActionService,调用:
Java code
sysActionService.findByHql("from SysAction");


断点发现,执行到BaseServcie的时候,baseDao== null.
为什么这个baseDao没注入进去呢?baseService中set/get方法都有啊

------解决方案--------------------------------------------------------
作为com.dao.impy.SysActionDaoImpy类中的findBySql方法并没有被实例化,
虽然有<bean id="baseService" class="com.impy.BaseServiceImpy">但是这个和SysActionDaoImpy无任何关系

可以这样:
XML code
    <bean id="sysActionDao" class="com.dao.impy.SysActionDaoImpy">        <property name="sessionFactory" ref="sessionFactory" />        <property name="baseDao" ref="baseDao"></property>    </bean>
  相关解决方案