2010-11-29 9 views
3

私は最近、applicationContextからBeanを引き出すことに関してthis questionを頼んだ。答えは本当に役に立ちましたが、今はテスト外のクラスからこのBeanにアクセスすることに問題があるようです。言い換えれば、私のテストでは、アプリケーションコンテキストからBeanを使用するクラスがインスタンス化されますが、このBeanはnullのままになります。今、なぜ私のBeanはnullですか?

私のテストでは、このようなアプリケーション・コンテキストを設定しています

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "/applicationContext-test.xml") 
public class SearcherTests { 

私のテストは、プログラムリポジトリクラスをインスタンス化します。

Repository searcher = new Repository(); 

私のリポジトリクラスは、次のメンバ変数を持っています

@Resource 
private MyFactory myFactory; 

私がSpringを正しく理解している場合、これは現在のアプリケーションBeanのコンテキストにはmyFactoryという名前が付けられています。テストによると、現在のアプリケーションコンテキストはmyFactoryの定義が含まれている、applicationContext-test.xml次のようになります。

<bean id="myFactory" 
    name="myFactory" 
    class="com.foo.Mocks" 
    factory-method="createMockFactory" /> 

将来的には、このファクトリメソッドはモックを返します。私は私のブラウザからアプリを実行すると

public class Mocks { 

public static MyFactory createMockFactory() { 
    return new MyFactory(); 
} 
} 

myFactory変数が正しくapplicationContext.xmlにBean定義からインスタンス化されました。しかし、現時点では、それだけで通常のFactoryオブジェクトを返します。私のテストでは、applicationContext-test.xmlが動作していることを確認するために、Repositoryクラスと同じように、この同じBeanをメンバー変数としてリストしています。テストを実行している間、テストを含むファイルの変数myFactoryは、私が期待していたのとまったく同じように見えます。しかし、Repositoryクラスに到達すると、そのクラスの変数myFactoryはnullになります。このクラスは、のBean定義に基づいて変数myFactoryをインスタンス化していないかのようです。誰かが私に理由を教えてくれますか?

更新

それは春豆になるように私はむしろ手動Repositoryクラスをインスタンス化するよりも、searcher変数を変更し、そして今myFactory変数はRepositoryクラス内に取り込まれています。誰かがなぜこれを稼働させるために豆にする必要があるのか​​説明できますか?

+1

「リポジトリ」はどのように取得されますか?それは春の豆ですか? – axtavt

+0

いいえ、リポジトリはSpring Beanではありません。私のテストでは実際にクラスをインスタンス化し、クラスをインスタンス化します。このインスタンス化はすべてプログラムによって実行されます。 – Samo

+0

リポジトリをSpring Beanに変更しました。これは現在動作しています。これが動作するためにはなぜBeanである必要があるのか​​不明です。 *スクラッチヘッド* – Samo

答えて

3

Repositoryをインスタンス化すると、Springは関与せず、依存関係は注入されません。それは魔法のように起こるわけではありません。Springは何らかの形でループに入っていなければなりません。インスタンスはSpringの処理レイヤーを通過しなければなりません。

+0

このクラスはアプリケーションコード内で直接インスタンス化されていますが、依存関係は正しく挿入されます。この2つのシナリオの間で私が認識している唯一の違いは、アプリケーションが実行されているときに、web.xmlによってapplicationContextがロードされることです。しかし、私は春には新しいので、私が気づいていない他の違いがあるかもしれません。これを明確にすることができれば、私は春をよく理解したいと思うので、それを感謝します。 – Samo

関連する問題