springboot使用ImportBeanDefinitionRegistrar 动态注册bean
Posted PacosonSWJTU
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot使用ImportBeanDefinitionRegistrar 动态注册bean相关的知识,希望对你有一定的参考价值。
【README】
1.采用 ImportBeanDefinitionRegistrar 动态注册bean,应用场景有:
如 一个后端服务需要用到多个 rabbitmq集群客户端,kafka客户端;这时就需要手动注册多个同类型的bean,但不同beanName,并用 @Resource(name="beanName") (或@Autowire+@Qualifier)来引入bean;
2.在封装后台框架时,经常会注册同类型的多个bean,因此 ImportBeanDefinitionRegistrar 特别有用;
3.本文代码转自
https://www.logicbig.com/tutorials/spring-framework/spring-core/import-bean-registrar.htmlhttps://www.logicbig.com/tutorials/spring-framework/spring-core/import-bean-registrar.html
【例】使用 ImportBeanDefinitionRegistrar 动态注册bean
public class MyBeanRegistrar implements ImportBeanDefinitionRegistrar
@Override
public void registerBeanDefinitions (AnnotationMetadata importingClassMetadata,
BeanDefinitionRegistry registry)
GenericBeanDefinition gbd = new GenericBeanDefinition();
gbd.setBeanClass(AppBean.class);
// 显然,这里是基于反射调用bean的setter方法
gbd.getPropertyValues().addPropertyValue("str", "value set from registrar");
registry.registerBeanDefinition("appBean", gbd);
自动装配类
@Configuration
@Import(MyBeanRegistrar.class)
public class MyConfig
@Bean
ClientBean clientBean ()
return new ClientBean();
使用动态注册的bean, AppBean
public class ClientBean
@Autowired
private AppBean appBean;
public void doSomething ()
appBean.process();
AppBean 定义:
public class AppBean
private String str;
public void setStr (String str)
this.str = str;
public void process ()
System.out.println(str);
测试方法入口:
public class ImportBeanDefinitionRegistrarExample
public static void main (String[] args)
ApplicationContext context =
new AnnotationConfigApplicationContext(
MyConfig.class);
ClientBean bean = context.getBean(ClientBean.class);
bean.doSomething();
打印日志:
value set from registrar
以上是关于springboot使用ImportBeanDefinitionRegistrar 动态注册bean的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot.14.SpringBoot使用jsp模板打包成jar
SpringBoot.14.SpringBoot使用jsp模板打包成jar
SpringBoot.14.SpringBoot使用jsp模板打包成jar
SpringBoot.14.SpringBoot使用jsp模板打包成jar