Spring Bean 如何重新注入?

故事背景

以Spring Cache Redis为例,Nacos配置中心配置了cacheManager的ttl参数,以@NacosValue的形式注入并配置为cacheManager的参数。
了解Spring Cache的朋友们应该明白,这里的cacheManager是spring初始化时初始化的一个Bean,这个Bean在初始化时从Nacos获取了一个ttl参数并配置在这个Bean上。

需求

修改Nacos的配置,cacheManager自动更新,使得ttl这bean能够刷新。

实现思路

(1)通过事件监听机制,监听到Nacos配置变更的动作:实现ApplicationListener接口,实现其方法onApplicationEvent(NacosConfigReceivedEvent event)
(2)在监听接口中解析nacos配置内容
(3)从配置内容取出ttl参数
(4)通过Spring的ApplicationContext取出DefaultListableBeanFactory,使用DefaultListableBeanFactory移除cacheManager这个bean
(5)加入新参数ttl,重新生成cacheManager Bean,并放入spring容器中

DefaultListableBeanFactory autowireCapableBeanFactory = (DefaultListableBeanFactory)ApplicationContextUtil.getContext().getAutowireCapableBeanFactory();
autowireCapableBeanFactory.removeBeanDefinition(beanName);
AbstractBeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(implBeanClz).getBeanDefinition();
autowireCapableBeanFactory.registerBeanDefinition(beanName, beanDefinition);
上一篇 SpringBoot设置Filter过滤请求参数
下一篇 MySQL传参字段与DB字段数据类型不一致导致精度问题采坑记录
目录
文章列表
1 JSON Web Token(JWT)使用步骤说明
JSON Web Token(JWT)使用步骤说明
2
微信小程序中this指向作用域问题this.setData is not a function报错
微信小程序中this指向作用域问题this.setData is not a function报错
3
Swift UI - 带结果列表的搜索条(UISearchDisplayController)的用法
Swift UI - 带结果列表的搜索条(UISearchDisplayController)的用法
4
Android接入Facebook登录踩坑记录
Android接入Facebook登录踩坑记录
5
Spring Security Bigcommerce OAuth2 调试记录
Spring Security Bigcommerce OAuth2 调试记录
最新评论
一位WordPress评论者
一位WordPress评论者
2月12日
您好,这是一条评论。若需要审核、编辑或删除评论,请访问仪表盘的评论界面。评论者头像来自 Gravatar。