当前位置: 首页>后端>正文

Apollo(0) @RefreshScope

  • 点进@RefreshScope可以看到,其实就是@Scope的value等于refresh,proxyMode等于TARGET_CLASS,所以主要看@Scope的"proxyMode = TARGET_CLASS"
一. @Scope:
  1. value属性:
  • singleton(默认):单例,获取bean只会有一个实例
  • prototype:多例,每次获取都是新建的实例
  • request:每次请求都是一个实例
  • session:每个session都是一个实例
  1. proxyMode属性:
  • DEFAULT、NO:直接返回对象
  • INTERFACES:返回代理对象,代理对象控制bean的声明周期,基于JDK代理
  • TARGET_CLASS:返回代理对象,基于CGLib代理
二. 流程:
  1. spring容器初始化时ConfigurationClassPostProcessor扫描代码所有spring bean,并在BeanDefinition里标记scope类型
  2. 获取bean时,会根据scope返回对象,例如单例会有单例池,多例直接生成等
  3. apollo里配置变更时environment里的配置会被修改,TARGET_CLASS类型的bean,在调用contextRefresher.refresh("beanName")时会清空代理对象的bean缓存!再次访问就会新生成一个bean,重新从environment获取配置实现刷新

https://www.xamrdz.com/backend/32k1926029.html

相关文章: