2017-01-30 8 views
3

私はすべてのdaosに対していくつかの一般的なメソッドを実装した汎用base 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> 

最初に、私はすべて単一DAOにsessionFactoryを注入する依存性注入を使用していたが、後に、私は、ベースDAOを実装し、このベースDAOを拡張する他のすべてのDAOSを持っていました。

ただし、変更後、私がをdaosの1人から電話するたびに、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

ようこそ。お役に立てて嬉しいです –

関連する問題