
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 |