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获取配置实现刷新
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容