动态注册 Bean 到 Spring 中
如果需要要启动后向 Spring 容器个注册一个动态创建的对象,可以通过以下几个方式实现:
- 直接注册 Singleton 对象
- 注册 BeanDefinition
动态注册 Bean 的几种方式
1. Singleton Bean 注册
单例对象可以直接通过以下代码注册,这种方式不适用于其它 Scope 的情况,但优点是可以自己 new 好对象。
1 | beanFactory.registerSingleton(name, bean); |
2. BeanDefinition 注册
Spring 应用中可以使用 BeanDefinitionRegistry
类的下面方法注册一个 BeanDefinition
。
1 | void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) |
这种注册方法更通用,Spring 本身也是通过构造 BeanDefinition
来注册 Bean 的。BeanDefinition
对象我们可以手动创建,也可以使用 BeanDefinitionBuilder
来构建,builder 的方式编码体验好很多。
1 | BeanDefinitionBuilder b = |
registry 可以使用以下方式获取
1 | BeanDefinitionRegistry registry = (BeanDefinitionRegistry) context.getAutowireCapableBeanFactory(); |
动态注册 Bean 到 Spring 中
https://blog.imoe.tech/2019/12/20/24-register-bean-to-spring-dynamically/