0

我有一个与 Spring 框架相关的查询。

你能帮我解决这个问题吗?我的要求是将已经创建的单例实例替换为在运行时以编程方式创建的单例实例。

我在bean中定义了一个spring上下文,如下所示:

<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 实例。

您能否请您发布一个解决方案,因为我是这种弹簧要求的新手。如果我尝试 registerSingleton,我会收到一个错误,因为它说这个 bean 不能注册为它已经存在。错误实际上是正确的,但我需要应用程序的这种功能。

非常感谢你的帮助。

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 回答