2017-01-30 22 views
3

У меня есть базовый базовый класс dao, в котором я реализовал некоторые общие методы для всех даос.Впрыск зависимостей Spring не работает с наследованием

<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 к каждому дао, но позже я реализовал базовый дао и имел все другое 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(); 
     ... 
    } 

    ... 
} 
+3

Пожалуйста, разместите код. BaseDAO и «ребенок» DAO были бы хороши –

+0

http://stackoverflow.com/questions/22599238/how-to-turn-on-springs-component-scan-debugging-info Это скажет вам, сканирует ли сканирование что вы думаете, что он должен собирать – efekctive

ответ

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.

+0

люди всегда упускают из виду простые вещи. Огромное спасибо. – Will

+0

Добро пожаловать. Рад, что смог помочь –