我有一个通用基础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>
最初,我使用依赖注入向每个dao注入sessionFactory
,但后来我实现了一个基础dao并且还有其他所有dao来扩展这个基础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();
...
}
...
}
答案 0 :(得分: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标记为abstract
,我认为这也是一个好主意。