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

SpringBoot.14.SpringBoot使用jsp模板打包成jar

SpringBoot专栏 -- 搭建第一个SpringBoot项目