Spring依赖注入无法继承

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring依赖注入无法继承相关的知识,希望对你有一定的参考价值。

我有一个泛型基础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中,但后来我实现了一个基础dao并且还有其他所有dao来扩展这个基础dao。

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

base DAO

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();
        ...
    }

    ...
}
答案

我看到它的方式是你忘了在孩子们身上添加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练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段

《Spring揭秘》——IOC梳理1

Spring依赖注入不适用于继承

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

Spring基础

有继承时spring注入空指针问题