1

を使用してテスト クラスの Bean を自動配線しようとしました@Autowireが、Bean が配線されておらず、次の例外が発生します。

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: 
    No matching bean of type [com.abc.MyDaoHibernateImpl] found for dependency: 
    expected at least 1 bean which qualifies as autowire candidate for this 
    dependency.
    Dependency annotations: 
        {@org.springframework.beans.factory.annotation.Autowired(required=true)}

私のテストクラスは次のようになります。

package com.abc;

@ContextConfiguration(locations = { "classpath:applicationContext.xml" })
@TransactionConfiguration(transactionManager = "hibernateTransactionManager")
public class MyDaoHibernateImplTest
    extends AbstractTransactionalJUnit4SpringContextTests
{

    @Autowired
    private MyDaoHibernateImpl myDao;

    ....
}

applicationContext.xml ファイルには、次の Bean 定義があります。

<bean id="myDao" class="com.abc.MyDaoHibernateImpl">
    <property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>

誰かが私が間違っているところを見ることができますか?

ご提案いただきありがとうございます。

--ジェームズ

4

2 に答える 2

1

axtavt が示唆するように、Spring はインターフェイスの使用を非常に重視するフレームワークです。Spring のベスト プラクティスは、インターフェースへの依存関係を定義し、Spring に実装を注入させることです。これが依存性注入の要点です。必要なインターフェイスを指定しますが、コンテナーは選択した実装クラスを注入します。これは、作成したクラスまたはこのクラスに基づく動的プロキシのいずれかです。しかし、クラスはその依存関係の実装の詳細を知っているべきではありません。

これは、 Spring Proxying Mechanismのリファレンスです。

インターフェースを使用する一般的な概念については、Joshua Blochによる『Effective Java』の第 8 章、項目 52: インターフェースでオブジェクトを参照するを参照してください。また、 Sun Java チュートリアルのInterfaces and Inheritanceを読む必要があります。

于 2010-09-21T07:38:19.820 に答える
0

あなたのビーンの実際のタイプは、アスペクトを適用するために使用される動的プロキシによって隠されていると思います。この場合、自動配線されたフィールドにクラスではなくインターフェイスを使用する必要があります (または、ターゲット クラスのプロキシ戦略を強制しますproxy-target-class="true")。

于 2010-09-20T19:04:35.817 に答える