Spring Cloud @RefreshScope 原理分析:扫描 Bean 定义

背景

最近读了一下 spring cloud 的 @RefreshScope 生效的源码,总结一下该注解的 refresh 类型的类实例化的过程。

关键技术点:

  1. 扫描过程中对 @RefreshScope 注解做了特殊处理,会额外注册两个BeanDefinition
  2. GenericScope 实现了 BeanDefinitionRegistryPostProcessor 接口,并对 refresh 的 BeanDefinition 添加了构造函数参数为自己,同时设置 beanClass 属性为 GenericScope.LockedScopedProxyFactoryBean.class,合成属性为 true
  3. GenericScope.LockedScopedProxyFactoryBean 类实现了 FactoryBeanBeanFactoryAwareMethodInterceptor 接口。

拆解三个部分:扫描 Bean 定义、代理类实例化、代理类方法调用,从这三个过程的源码,来理解为什么 @RefreshScope 标注的类的实能够动态应对环境变量的变化。

原始扫描 Bean 定义过程

ClassPathBeanDefinitionScanner 扫描时会对 @RefreshScope 注解的类的 BeanDefinition 定义信息作两个操作:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值