1.spring 解析@RefreshScope @ConfigurationProperties @configuration 注解的类
1.1 ClassPathBeanDefinitionScanner.doScan(String… basePackages)
@RefreshScope 默认 name=“refresh” proxy-mode=target-class
1.2AnnotationConfigUtils.applyScopeProxyMode()
1.3 ScopedProxyUtils.createScopedProxy()
该方法很重要,生成了一个代理类proxyDefinition和OriginalBeanName关联,同时把 targetBeanName【在 原name上加上ScopeTarget.】关联被代理的对象。
// The target bean should be ignored in favor of the scoped proxy.
targetDefinition.setAutowireCandidate(false);
targetDefinition.setPrimary(false);
此处设置被代理的类不能自动注入,让代理对象依赖注入。
2.代理对象初始化时
ScopedProxyFactoryBean extends ProxyConfig implements FactoryBean, BeanFactoryAware
设置代理对象的方法拦截器
3.热更新
删除对象
实际上删除的是被代理的对象
加载新的被代理对象