18

次のことが可能かどうか疑問に思います。テストの目的で、さまざまなテストのアプリケーションコンテキストでさまざまなモッククラスを宣言することを望みます。これらは、JerseyRESTクライアントを使用した受け入れテストです。実行時にBeanを動的に宣言する方法はありますか?Springには、コンテキストがロードされた後にアプリケーションコンテキストを変更できるようにするAPIがありますか?

4

1 に答える 1

24

アプリケーションコンテキストで異なる Bean を持つ一般的な方法は、プロファイルを使用することです。プロファイルについては、次のスプリング ソースの投稿で読むことができます。

最初の質問については、メソッドを介して実行時に 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 を変更する明確な方法を提供していませんが、最も一般的な方法は次のとおりです。

于 2013-03-11T01:14:01.653 に答える