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 {@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相关推荐
- springboot mapper无法注入_Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean
在阅读Spring Boot源码时,看到Spring Boot中大量使用ImportBeanDefinitionRegistrar来实现Bean的动态注入.它是Spring中一个强大的扩展接口.本篇文 ...
- (转)Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean
转自: Spring Boot通过ImportBeanDefinitionRegistrar动态注入Bean - 掘金在阅读SpringBoot源码时,看到SpringBoot中大量使用ImportB ...
- SpringBoot根据配置文件动态创建Bean
需求场景: 如果现在需要实现一个这样的需求: 根据配置信息动态控制是否创建任意Bean 通常我们会定义这样的配置: application.yml: 实现业务需求:根据enbaled控制下面bean- ...
- Spring之动态注册bean
Spring之动态注册bean 什么场景下,需要主动向Spring容器注册bean呢? 如我之前做个的一个支持扫表的基础平台,使用者只需要添加基础配置 + Groovy任务,就可以丢到这个平台上面来运 ...
- java远程插件动态注册机制_Spring运行时动态注册bean的方法
在spring运行时,动态的添加bean,dapeng框架在解析xml的字段时,使用到了动态注册,注册了一个实现了FactoryBean类! 定义一个没有被Spring管理的Controller pu ...
- Spring - BeanDefinitionRegistryPostProcessor 扩展接口 动态注册bean
文章目录 Pre org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor 接口的继承关系 BeanD ...
- ImportBeanDefinitionRegistrar向容器中注册bean
一.ImportBeanDefinitionRegistrar 我们先来看看ImportBeanDefinitionRegistrar是个什么鬼,点击进入ImportBeanDefinitionReg ...
- Spring注解驱动开发第10讲——在@Import注解中使用ImportBeanDefinitionRegistrar向容器中注册bean
写在前面 在前面的文章中,我们学习了如何使用@Import注解向Spring容器中导入bean,不仅可以使用@Import注解快速向容器中导入bean,也可以在@Import注解中使用ImportSe ...
- 【Spring杂烩】探讨Spring向容器注册Bean的三种方式
探讨Spring向容器注册Bean的三种方式 重点了解@Import实现的三种子方式 前提概要 Spring向容器注册Bean的三种方式 通过@ComponentScan.@Componet 通过@B ...
最新文章
- 《数据结构》知识点Day_03
- 【laravel54】查看版本号3种方式
- typora图床教程-阿里云版
- 【Git】撤销已经git add的文件
- 计算机的网络体系以及参考模型
- php 汉王云名片_汉王云-名片识别【最新版】_OCR_人工智能_API-云市场-阿里云
- 改善深层神经网络:超参数调整、正则化以及优化——2.3指数加权平均
- 渲染器跑分_碾压图灵43!NVIDIA安培第一个跑分震撼出炉
- (84)FPGA面试题-多bit跨时钟域
- 模块化程序设计(多文件编程)介绍
- 来自Airbnb、Netflix等公司的代码评审最佳实践
- 对象池 IObjectPool -- ESBasic 可复用的.NET类库(15)
- 读《About Face 4 交互设计精髓》2
- 天涯明月刀手游服务器维护中,《天涯明月刀手游》12月17日服务器维护更新公告...
- 华为MA5606T升级固件
- 初中数学定理公式汇编
- 关于java中的setOut()方法
- 51单片机流水灯现象1
- 使用jQuery的click事件没反应
- 活动报道 | 四家香港科大EMBA校友所在企业荣登“中国卓越管理公司”第三届榜单...
热门文章
- Codeforces Round #632 (Div. 2)巧用小技巧
- HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)
- Acwing 1072. 树的最长路径
- CodeForces - 76E Points
- P5782-[POI2001]和平委员会【2-SAT】
- P4338-[ZJOI2018]历史【LCT】
- bzoj2226-[Spoj5971]LCMSum【欧拉函数,GCD】
- ssl2124-涂色【离散化】
- ssl2863-石子合并【dp练习】
- 各种模板(数学数论字符串)