2013-08-17 161 views
1

对不起,我的英语。春天我不能为泛型类进行依赖注入。泛型类:弹簧依赖注入和泛型类

abstract class BaseBO<Id, Entity, DAOClass extends DAO<Id, Entity>> implements BO<Id, Entity, DAOClass> { 
    DAOClass dao; 

    public DAOClass getDAO() { 
     return dao; 
    } 
    //... 
} 

使用泛型类:

public class TaskBO extends BaseBO<Long, Task, TaskDAO> implements BO<Long, Task, TaskDAO> { 

} 

我想要做的依赖注入的类TaskBO财产TaskDAO。 但我只能通过一个接口DAO设置依赖TaskDAO为豆TaskBO

<bean id="TaskBO" class="com.otv.model.bo.TaskBO"> 
     <property name="DAO" ref="TaskDAO" /> 
</bean> 

<bean id="TaskDAO" class="com.otv.model.dao.TaskDAO"> 
     <property name="sessionFactory" ref="SessionFactory" /> 
</bean> 

如何通过TaskDAO类设置依赖注入?

回答

0

如果您有堆栈跟踪,请附上错误。

所有之前使用一致的情况下,属性访问:

abstract class BaseBO<Id, Entity, DAOClass extends DAO<Id, Entity>> implements BO<Id, Entity, DAOClass> { 
    DAOClass dao; 

    public DAOClass getDao() { 
     return dao; 
    } 
    //... 
} 

最大的可能是你需要一个二传手的BaseBO.dao财产

public void setDao(DAOClass dao) { 
    this.dao = dao; 
} 

public class TaskBO extends BaseBO<Long, Task, TaskDAO> implements BO<Long, Task, TaskDAO> { 

    public void setDao(TaskDAO dao) { 
     super.dao = dao; 
    } 

} 
+0

对不起。我没有正确理解,在另一个错误。在'BaseBO'中有一个'setDAO(DAOClass dao)'方法。如果我添加了TaskMB'@ManagedProperty(value =“#{TaskBO}”)BO taskBO;',它正在工作。但是,如果我添加@ManagedProperty(值=“#{TaskBO}”)TaskBO taskBO;',它会返回错误'无法为托管bean taskMB设置属性taskBO'。 – z3r9

+0

如果添加接口'@ManagedProperty(value =“#{TaskBO}”)ITaskBO taskBO;',它正在工作! – z3r9