Spring 依赖注入不适用于继承
Spring dependency injection not working with inheritance
我有一个通用的基础 dao class,我在其中为所有 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 并让所有其他 daos 扩展这个 base dao。
但是,更改后,每当我从其中一个 daos 调用 getSessionFactory()
时,我都会得到 null
作为 return。这个变化对我来说很有意义,但我似乎无法弄清楚为什么它会 return 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();
...
}
...
}
我的看法是您忘记在 children 上添加 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
也是一个好主意。
我有一个通用的基础 dao class,我在其中为所有 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 并让所有其他 daos 扩展这个 base dao。
但是,更改后,每当我从其中一个 daos 调用 getSessionFactory()
时,我都会得到 null
作为 return。这个变化对我来说很有意义,但我似乎无法弄清楚为什么它会 return 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();
...
}
...
}
我的看法是您忘记在 children 上添加 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
也是一个好主意。