Spring依赖注入在继承中无法工作

4

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

<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。

然而,在更改之后,每当我从其中一个 dao 调用 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();
        ...
    }

    ...
}

3
请发布一些代码。BaseDAO和一个“子”DAO会很不错。 - Cristian Meneses
这将告诉您扫描是否正在捕获您认为应该捕获的内容。要打开Spring的组件扫描调试信息,请参考链接:https://dev59.com/FGEh5IYBdhLWcg3wRRuh - efekctive
1个回答

5
我认为您忘记在子元素中添加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标记为抽象的也是一个不错的主意。


人们总是忽视简单的事情。非常感谢。 - user6332430
欢迎。很高兴我能帮助到您。 - Maciej Kowalski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接