Spring依赖注入不适用于继承

Posted

技术标签:

【中文标题】Spring依赖注入不适用于继承【英文标题】:Spring dependency injection not working with inheritance 【发布时间】:2017-06-16 04:15:45 【问题描述】:

我有一个通用的基础 dao 类,我在其中为所有 daos 实现了一些通用方法。

<bean id="baseDAO" class="com.db.dao.BaseDao">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="userDAO" class="com.db.dao.UserDao"></bean>

<bean id="notesDAO" class="com.db.dao.NotesDao"></bean>

最初,我使用依赖注入将sessionFactory 注入到每一个dao,但后来我实现了一个base dao,并让所有其他dao 来扩展这个base dao。

但是,在更改之后,每当我从其中一个 daos 调用 getSessionFactory() 时,我都会得到 null 作为返回。这个更改对我来说很有意义,但我似乎无法弄清楚为什么它会返回 null,因为我已经在基础中注入了 factorySession

BaseDao

public class BaseDao<T> 

    private SessionFactory sessionFactory;

    public SessionFactory getSessionFactory() 
        return sessionFactory;
    

    public void setSessionFactory(SessionFactory sessionFactory) 
       this.sessionFactory = sessionFactory;
    

    ...

UserDao

public class UserDao extends BaseDao<User> 

    public User read(String userName) 
        Session session = getSessionFactory().getCurrentSession();
        session.beginTransaction();
        ...
    

    ...

【问题讨论】:

请贴一些代码。 BaseDAO 和一个“子”DAO 会很好 ***.com/questions/22599238/… 这将告诉您扫描是否正在拾取您认为应该拾取的内容 【参考方案1】:

我看到的方式是您忘记在孩子身上添加parent 属性:

<bean id="baseDAO" class="com.db.dao.BaseDao" abstract="true">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

<bean id="userDAO" class="com.db.dao.UserDao" parent="baseDAO"></bean>

<bean id="notesDAO" class="com.db.dao.NotesDao" parent="baseDAO"></bean>

我认为将 BaseDAO 标记为 abstract 也是一个好主意。

【讨论】:

人们总是忽略简单的事情。非常感谢。 欢迎。很高兴我能帮忙

以上是关于Spring依赖注入不适用于继承的主要内容,如果未能解决你的问题,请参考以下文章

Spring依赖注入无法继承

Spring之Bean定义继承和依赖注入

Spring框架依赖注入

Spring Boot 工程中Bean的依赖注入分析

spring3: 依赖和依赖注入-xml配置-DI的配置

Spring依赖注入 set方法注入