Spring 如何实现动态的增加一个 Bean 到容器中呢?注意:不是在 spring 启动的时候,所以利用 spring 的事件机制貌似不可以啊。
many thanks for your answers! 大致的步骤为:
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
//将applicationContext转换为ConfigurableApplicationContext
ConfigurableApplicationContext configurableApplicationContext =
(ConfigurableApplicationContext) applicationContext;
// 获取bean工厂并转换为DefaultListableBeanFactory
DefaultListableBeanFactory defaultListableBeanFactory =
(DefaultListableBeanFactory) configurableApplicationContext.getBeanFactory();
// 通过BeanDefinitionBuilder创建bean定义
BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder
.genericBeanDefinition(YOUR_CLASS.class);
// 设置属性userAcctDAO,此属性引用已经定义的bean:userAcctDAO
beanDefinitionBuilder
.addPropertyReference("name", "weixiao");
beanDefinitionBuilder
.addPropertyReference("passwd", "897932384");
// 注册bean
defaultListableBeanFactory.registerBeanDefinition("bean-id",
beanDefinitionBuilder.getRawBeanDefinition());
1
darkfireworld 2016-09-19 20:21:29 +08:00 via Android
可以考虑工厂类
|
2
q397064399 2016-09-19 21:13:43 +08:00
如何动态使用 bean 呢?怎么注解?
|
3
fqs 2016-09-20 08:29:44 +08:00 via Android
直接获取上下文做 bean 注入,应该是可以的。
|
4
ppwangs 2016-09-20 11:30:32 +08:00
这店就是 guice 优于 spring 的地方了
|
5
Infernalzero 2016-09-20 12:22:39 +08:00
实现 BeanDefinitionRegistryPostProcessor 即可或者从 applicationContext 获取 beanFactory 直接注册
|
6
Ouyangan 2016-09-20 21:25:34 +08:00
@Infernalzero 同意这种方式 ,粗暴点直接获取 context
|