0

Spring フレームワーク関連のクエリがあります。

この問題を解決するのを手伝ってくれませんか。私の要件は、既に作成されたシングルトン インスタンスを、実行時にプログラムで作成されたものに置き換えることです。

次のように Bean で定義された春のコンテキストがあります。

<bean name="configuration"   
   class="com.myapp.tests.ServiceConfiguration" />  

<bean name="anotherBean class="com.myapp.tests.AnotherBeanClass">
     <property ref="configuration"/>
</bean>

そして、私は使用してコンテキストをロードしています

ApplicationContext ctx = ClassPathXMLApplicationContext("appConfig.xml");

com.myapp.tests.ServiceConfiguration の新しいインスタンスを作成し、実行時に「構成」を置き換えて、これに依存する他の Bean をロードする必要があります (一種の更新)。私たちの場合、シングルトンを再登録した後、anotherBean は新しく作成された ServiceConfiguration インスタンスを確認する必要があります。

私はこの種の春の要件に慣れていないので、親切に解決策を投稿していただけませんか。この Bean は既に存在するため登録できないと表示されているため、Singleton を登録しようとするとエラーが発生します。エラーの事実は正しいですが、アプリケーションにはこの種の機能が必要です。

ご協力ありがとうございます。

4

1 に答える 1

1
 AutowireCapableBeanFactory factory = ctx.getAutowireCapableBeanFactory();
 BeanDefinitionRegistry registry = (BeanDefinitionRegistry) factory;
 GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
 MutablePropertyValues values = new MutablePropertyValues();
 values.addPropertyValue("property1", "abc");
 values.addPropertyValue("property2", new RuntimeBeanReference("beanFromContext"));
 beanDefinition.setPropertyValues(values);
 beanDefinition.setBeanClass(ServiceConfiguration.class);
 beanDefinition.setAutowireCandidate(true);
 registry.registerBeanDefinition("configuration", beanDefinition);
于 2013-08-23T16:53:02.303 に答える