替换Bean工具类

@Component
public class ApplicationContextUtil implements ApplicationContextAware {private static ApplicationContext applicationContext = null;@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {if(this.applicationContext == null) {this.applicationContext = applicationContext;}}public static ApplicationContext getApplicationContext() {return applicationContext;}public static <T> T getBean(Class<T> clazz) {return getApplicationContext().getBean(clazz);}public static void replaceBean(String beanName, Object targetObj) throws NoSuchFieldException, IllegalAccessException {ConfigurableApplicationContext context = (ConfigurableApplicationContext)getApplicationContext();DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();//反射获取Factory中的singletonObjects 将该名称下的bean进行替换Field singletonObjects = DefaultSingletonBeanRegistry.class.getDeclaredField("singletonObjects");singletonObjects.setAccessible(true);Map<String, Object> map = (Map<String, Object>) singletonObjects.get(beanFactory);map.put(beanName, targetObj);}
}

使用

    @Autowiredprivate TestBean testBean;@Testpublic void updateBean() throws NoSuchFieldException, IllegalAccessException {System.out.println("before: " + testBean);ApplicationContextUtil.replaceBean("testBean", new TestBean("qq", 100));testBean = ApplicationContextUtil.getBean(TestBean.class);System.out.println("after: " + testBean);}

测试类

public class TestBean {String name;int age;public TestBean(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "TestBean{" +"name='" + name + '\'' +", age=" + age +'}';}
}

初始化Bean

    @Beanpublic TestBean testBean(){return new TestBean("dreamzuora", 25);}

spring boot 如何动态替换bean?相关推荐

  1. java动态创建bean的意义_java相关:Spring Boot如何动态创建Bean示例代码

    java相关:Spring Boot如何动态创建Bean示例代码 发布于 2020-3-20| 复制链接 摘记: 前言本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来 ...

  2. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  3. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  4. java手工注入bean_java相关:Spring中如何动态注入Bean实例教程

    java相关:Spring中如何动态注入Bean实例教程 发布于 2020-3-8| 复制链接 摘记: 前言在Spring中提供了非常多的方式注入实例,但是由于在初始化顺序的不同,基于标注的注入方式, ...

  5. 【解决思路】Spring Boot:Error creating bean with name ‘xxxDao‘

    [解决思路]Spring Boot:Error creating bean with name 'xxxDao' 问题重现 运行Spring Boot 项目是报错:Failed to load App ...

  6. Spring Boot 如何动态切换多数据源?

    大约在19年的这个时候,老同事公司在做医疗系统,需要和HIS系统对接一些信息,比如患者.医护.医嘱.科室等信息.但是起初并不知道如何与HIS无缝对接,于是向我取经. 最终经过讨论采用了视图对接的方式, ...

  7. 17、Spring Boot普通类调用bean【从零开始学Spring Boot】

    转载:http://blog.csdn.net/linxingliang/article/details/52013017 我们知道如果我们要在一个类使用spring提供的bean对象,我们需要把这个 ...

  8. java动态创建bean的意义_Spring Boot如何动态创建Bean示例代码

    前言 本文主要给大家介绍了关于Spring Boot动态创建Bean的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. SpringBoot测试版本:1.3.4.RELEAS ...

  9. Spring boot + Mybatis动态多数据源实现

    在项目开发中,有一些场景需要同时使用多个数据库,并且需要能够根据需求能够动态切换,下面介绍一种基于注解+aop的方式. 动态多数据源实现 Spring boot启动类(Application) 数据库 ...

最新文章

  1. 机器学习算法工程师的自我修养
  2. Android面试题目之(9) 幽灵引用
  3. android-oculus
  4. 漫画:如何用Zookeeper实现分布式锁?
  5. 恕我直言,你的模型可能并没看懂 prompt 在说啥
  6. Docker系列文章索引
  7. 彩色手绘情节人插画装饰素材,psd分层利于应用!
  8. Flickr 网站架构分析
  9. 车机开发之均衡器app开发
  10. java中将zip文件解压到指定目录下
  11. Java用Freemarker 生成word文档
  12. 引用还是传值——被打脸后才发现多年的理解是错的
  13. [小说]魔王冢(63)正牌蚩尤
  14. 关于CLASS , SEL, IMP的说明
  15. python 傅立叶函数_python-如何从图像中去除高频内容以进行傅立叶逆变换
  16. linux下的权限粘滞位
  17. java Eclipes配置黑色框架
  18. usaco 2.4 bessie come home
  19. PPT文件找回打开密码
  20. 针对此次iTunes12.1升级导致第三方用不了的解决方案

热门文章

  1. IOC操作Bean管理XML方式(创建对象和set注入属性)
  2. python如何实现选项功能_python几种常用功能如何实现 python几种常用功能实现代码实例...
  3. opencv 边缘平滑_基于OpenCV的车道检测实现(一)
  4. 公交查询系统 c语言,城市公交查询系统的设计任务书
  5. fastjson反序列化过滤字段属性_原创干货 | 从RMI入门到fastjson反序列化RCE
  6. php属性未定义,PHP-警告-未定义的属性:stdClass-修复?
  7. Java高级架构师需要掌握什么?
  8. Java开发人员需要掌握数据库的知识点有哪些?
  9. layui option 动态添加_layui select动态添加option的实例
  10. php软删除代码,PHP laeavel软删除以及软删除还原 易错点