次のことが可能かどうか疑問に思います。テストの目的で、さまざまなテストのアプリケーションコンテキストでさまざまなモッククラスを宣言することを望みます。これらは、JerseyRESTクライアントを使用した受け入れテストです。実行時にBeanを動的に宣言する方法はありますか?Springには、コンテキストがロードされた後にアプリケーションコンテキストを変更できるようにするAPIがありますか?
質問する
35847 次
1 に答える
24
アプリケーションコンテキストで異なる Bean を持つ一般的な方法は、プロファイルを使用することです。プロファイルについては、次のスプリング ソースの投稿で読むことができます。
- http://blog.springsource.org/2011/02/14/spring-3-1-m1-introducing-profile
- http://blog.springsource.org/2011/06/21/spring-3-1-m2-testing-with-configuration-classes-and-profiles/
最初の質問については、メソッドを介して実行時に Bean を宣言できますBeanDefinitionRegistry.registerBeanDefinition()
。次に例を示します。
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(SomeClass.class);
builder.addPropertyReference("propertyName", "someBean"); // add dependency to other bean
builder.addPropertyValue("propertyName", someValue); // set property value
DefaultListableBeanFactory factory = (DefaultListableBeanFactory) context.getBeanFactory();
factory.registerBeanDefinition("beanName", builder.getBeanDefinition());
シングルトン Bean インスタンス (構成済み) を登録することもできます
context.getBeanFactory().registerSingleton(beanName, singletonObject)
最後に、Spring はコンテキストを更新した後に Bean を変更する明確な方法を提供していませんが、最も一般的な方法は次のとおりです。
- 閉じて再度更新します (明らかに)
- プロキシを使用し、実行時に targetSource を交換します: あるコンテキストの Spring Bean を別のコンテキストのモック バージョンに置き換える (例について) を参照してください。
于 2013-03-11T01:14:01.653 に答える