【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 {@Overridepublic 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 {@BeanClientBean clientBean () {return new ClientBean();}
}

使用动态注册的bean, AppBean

public class ClientBean {@Autowiredprivate 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相关推荐

  1. springboot mapper无法注入_Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

    在阅读Spring Boot源码时,看到Spring Boot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入.它是Spring中一个强大的扩展接口.本篇文 ...

  2. (转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean

    转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportB ...

  3. SpringBoot根据配置文件动态创建Bean

    需求场景: 如果现在需要实现一个这样的需求: 根据配置信息动态控制是否创建任意Bean 通常我们会定义这样的配置: application.yml: 实现业务需求:根据enbaled控制下面bean- ...

  4. Spring之动态注册bean

    Spring之动态注册bean 什么场景下,需要主动向Spring容器注册bean呢? 如我之前做个的一个支持扫表的基础平台,使用者只需要添加基础配置 + Groovy任务,就可以丢到这个平台上面来运 ...

  5. java远程插件动态注册机制_Spring运行时动态注册bean的方法

    在spring运行时,动态的添加bean,dapeng框架在解析xml的字段时,使用到了动态注册,注册了一个实现了FactoryBean类! 定义一个没有被Spring管理的Controller pu ...

  6. Spring - BeanDefinitionRegistryPostProcessor 扩展接口 动态注册bean

    文章目录 Pre org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor 接口的继承关系 BeanD ...

  7. ImportBeanDefinitionRegistrar向容器中注册bean

    一.ImportBeanDefinitionRegistrar 我们先来看看ImportBeanDefinitionRegistrar是个什么鬼,点击进入ImportBeanDefinitionReg ...

  8. Spring注解驱动开发第10讲——在@Import注解中使用ImportBeanDefinitionRegistrar向容器中注册bean

    写在前面 在前面的文章中,我们学习了如何使用@Import注解向Spring容器中导入bean,不仅可以使用@Import注解快速向容器中导入bean,也可以在@Import注解中使用ImportSe ...

  9. 【Spring杂烩】探讨Spring向容器注册Bean的三种方式

    探讨Spring向容器注册Bean的三种方式 重点了解@Import实现的三种子方式 前提概要 Spring向容器注册Bean的三种方式 通过@ComponentScan.@Componet 通过@B ...

最新文章

  1. 《数据结构》知识点Day_03
  2. 【laravel54】查看版本号3种方式
  3. typora图床教程-阿里云版
  4. 【Git】撤销已经git add的文件
  5. 计算机的网络体系以及参考模型
  6. php 汉王云名片_汉王云-名片识别【最新版】_OCR_人工智能_API-云市场-阿里云
  7. 改善深层神经网络:超参数调整、正则化以及优化——2.3指数加权平均
  8. 渲染器跑分_碾压图灵43!NVIDIA安培第一个跑分震撼出炉
  9. (84)FPGA面试题-多bit跨时钟域
  10. 模块化程序设计(多文件编程)介绍
  11. 来自Airbnb、Netflix等公司的代码评审最佳实践
  12. 对象池 IObjectPool -- ESBasic 可复用的.NET类库(15)
  13. 读《About Face 4 交互设计精髓》2
  14. 天涯明月刀手游服务器维护中,《天涯明月刀手游》12月17日服务器维护更新公告...
  15. 华为MA5606T升级固件
  16. 初中数学定理公式汇编
  17. 关于java中的setOut()方法
  18. 51单片机流水灯现象1
  19. 使用jQuery的click事件没反应
  20. 活动报道 | 四家香港科大EMBA校友所在企业荣登“中国卓越管理公司”第三届榜单...

热门文章

  1. Codeforces Round #632 (Div. 2)巧用小技巧
  2. HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)
  3. Acwing 1072. 树的最长路径
  4. CodeForces - 76E Points
  5. P5782-[POI2001]和平委员会【2-SAT】
  6. P4338-[ZJOI2018]历史【LCT】
  7. bzoj2226-[Spoj5971]LCMSum【欧拉函数,GCD】
  8. ssl2124-涂色【离散化】
  9. ssl2863-石子合并【dp练习】
  10. 各种模板(数学数论字符串)