2017-01-30 1 views
3

Ich habe eine generische Basis Dao-Klasse, in der ich einige generische Methoden für alle Daos implementiert.Spring Abhängigkeitsinjektion funktioniert nicht mit Vererbung

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

Zunächst ich wurde mit der Dependency Injection sessionFactory zu jedem einzelnen dao zu injizieren, aber später habe ich eine Basis dao umgesetzt und hatte alle andere daos diese Basis dao zu verlängern.

Allerdings, nach der Änderung, wenn ich getSessionFactory() von einem der daos aufrufen, bekomme ich null als Rückkehr. Die Änderung macht für mich Sinn, aber ich kann nicht herausfinden, warum es null zurückgeben würde, da ich die factorySession in der Basis injiziert hatte.

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

Bitte poste etwas Code. BaseDAO und ein "Kind" DAO wäre nett –

+0

http://stackoverflow.com/questions/22599238/how-to-turn-on-springs-component-scan-debugging-info Dies wird Ihnen sagen, wenn der Scan abholt was Sie denken, dass es abholen sollte – efekctive

Antwort

5

So wie ich es sehe, ist, dass Sie parent Attribut auf die Kinder hinzuzufügen vergessen:

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

Ich denke, es ist auch eine gute Idee, wenn Sie das BaseDAO als abstract markieren.

+0

Leute übersehen immer einfache Dinge. Vielen Dank. – Will

+0

Willkommen. Froh, dass ich helfen konnte –

Verwandte Themen