spring-cloud @RefereshScope 热更新源码分析

1.spring 解析@RefreshScope @ConfigurationProperties @configuration 注解的类
1.1 ClassPathBeanDefinitionScanner.doScan(String… basePackages)

spring-cloud @RefereshScope 热更新源码分析_第1张图片@RefreshScope 默认 name=“refresh” proxy-mode=target-class

1.2AnnotationConfigUtils.applyScopeProxyMode()

spring-cloud @RefereshScope 热更新源码分析_第2张图片
1.3 ScopedProxyUtils.createScopedProxy()
spring-cloud @RefereshScope 热更新源码分析_第3张图片该方法很重要,生成了一个代理类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
spring-cloud @RefereshScope 热更新源码分析_第4张图片设置代理对象的方法拦截器

3.热更新
删除对象
spring-cloud @RefereshScope 热更新源码分析_第5张图片实际上删除的是被代理的对象

加载新的被代理对象
spring-cloud @RefereshScope 热更新源码分析_第6张图片
spring-cloud @RefereshScope 热更新源码分析_第7张图片

你可能感兴趣的:(spring,@RefreshSCope,热更新)