私は最近、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
クラス内に取り込まれています。誰かがなぜこれを稼働させるために豆にする必要があるのか説明できますか?
「リポジトリ」はどのように取得されますか?それは春の豆ですか? – axtavt
いいえ、リポジトリはSpring Beanではありません。私のテストでは実際にクラスをインスタンス化し、クラスをインスタンス化します。このインスタンス化はすべてプログラムによって実行されます。 – Samo
リポジトリをSpring Beanに変更しました。これは現在動作しています。これが動作するためにはなぜBeanである必要があるのか不明です。 *スクラッチヘッド* – Samo