繼承類如何在spring裏注入呢?

我有一個BaseService接口,本意是提供一些通用的方法,具體業務Service繼承這個BaseService。在BaseService內有一個BaseDao,也是提供的通用方法。

但是現在出現一個問題,在業務Service中調用繼承的BaseService方法時發現,BaseDao==null,沒有注入進去,這是什麼原因?


具體舉個例子:
BaseService如下:

Java代碼 複製代碼
  1. public interface BaseService {   
  2.     /**  
  3.      * 根據HQL查詢數據庫  
  4.      * @param hql  
  5.      * @return  
  6.      */  
  7.     public List findByHql(String hql);   
  8. }  
public interface BaseService {
    /**
     * 根據HQL查詢數據庫
     * @param hql
     * @return
     */
    public List findByHql(String hql);
}



BaseService實現類:

Java代碼 複製代碼
  1. public class BaseServiceImpy implements BaseService {   
  2.     private BaseDao baseDao;   
  3.     public List findBySql(String sql) {   
  4.         return this.baseDao.findBySql(sql);   //這裏baseDao == null   
  5.     }   
  6.   
  7. //setter, getter   
  8.     public BaseDao getBaseDao() {   
  9.         return baseDao;   
  10.     }   
  11.   
  12.     public void setBaseDao(BaseDao baseDao) {   
  13.         this.baseDao = baseDao;   
  14.     }   
  15. }  
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代碼 複製代碼
  1. public interface SysActionService extends BaseService{   
  2.     //未定義任何方法,調用BaseService中的方法   
  3. }  
public interface SysActionService extends BaseService{
    //未定義任何方法,調用BaseService中的方法
}



實現類:

Java代碼 複製代碼
  1. public class SysActionServiceImpy extends BaseServiceImpy implements SysActionService{   
  2.   
  3.     private static Log log = LogFactory.getLog(SysActionService.class);   
  4.     private SysActionDao sysActionDao;   
  5.     public SysActionDao getSysActionDao() {   
  6.         return sysActionDao;   
  7.     }   
  8.     public void setSysActionDao(SysActionDao sysActionDao) {   
  9.         this.sysActionDao = sysActionDao;   
  10.     }   
  11. }  
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代碼 複製代碼
  1. <bean id="baseDao" class="com.dao.impy.BaseDaoImpy">  
  2.       <property name="sessionFactory" ref="sessionFactory" />  
  3.   </bean>  
  4.   <bean id="baseService" class="com.impy.BaseServiceImpy">  
  5.       <property name="baseDao" ref="baseDao"></property>  
  6.   </bean>  
  7.   <bean id="sysActionDao" class="com.dao.impy.SysActionDaoImpy">  
  8.       <property name="sessionFactory" ref="sessionFactory" />  
  9.   </bean>  
  10.   <bean id="sysActionService" class="com.service.impy.SysActionServiceImpy">  
  11.       <property name="sysActionDao" ref="sysActionDao" />  
  12.   </bean>  
  <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代碼 複製代碼
  1. sysActionService.findByHql("from SysAction");  
sysActionService.findByHql("from SysAction");



斷點發現,執行到BaseServcie的時候,baseDao== null.
爲什麼這個baseDao沒注入進去呢?baseService中set/get方法都有啊

 

 

回答

<bean id="sysActionService" class="com.service.impy.SysActionServiceImpy" parent="baseService"
      <property name="sysActionDao" ref="sysActionDao" /> 
  </bean>

要用parent屬性來指定。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章