【问题标题】:Spring dependency injection and generic classSpring依赖注入和泛型类
【发布时间】:2013-08-17 11:17:32
【问题描述】:

对不起我的英语。我不能在春天对泛型类进行依赖注入。泛型类:

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为beanTaskBO设置依赖TaskDAO

<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类设置依赖注入?

【问题讨论】:

    标签: spring generics dependency-injection


    【解决方案1】:

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

    在所有属性访问器使用一致大小写之前:

    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;
        }
    
    }
    

    【讨论】:

    • 对不起。我没有正确理解,另一个错误。在BaseBO 中有一个方法setDAO(DAOClass dao)。如果我添加 TaskMB @ManagedProperty(value="#{TaskBO}") BO&lt;Long, Task, TaskDAO&gt; taskBO;,它正在工作。但是如果我添加@ManagedProperty(value="#{TaskBO}") TaskBO taskBO;,它会返回错误Unable to set property taskBO for managed bean taskMB
    • 如果添加接口@ManagedProperty(value="#{TaskBO}") ITaskBO taskBO;,就可以了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    相关资源
    最近更新 更多