Spring Cloud: @RefreshScop
Spring Cloud中提供@RefreshScope
注解,为Bean提供新的注入方式,实现Bean的动态配置。
-
简单介绍一下Spring Cloud刷新Bean的原理
-
1、自定义Scope:refresh。如同单例模式singleton。处理类:
org.springframework.cloud.context.scope.GenericScope.java
-
2、使用代理。
@RefreshScope
中ScopedProxyMode proxyMode() default ScopedProxyMode.TARGET_CLASS;
,创建基于类的代理(使用CGLIB),主要作用:实现懒加载,使用时进行对象获取(调用GenericScope.java
中的get方法返回类对象)。 -
3、自定义缓存。
GenericScope.java
的get方法中,逻辑:从缓存(自定义集合)中获取bean对象,如果不存在对象,调用bean的创建方法:objectFactory.getObject()
,重新创建bean对象进行缓存。 -
4、bean刷新。使缓存失效:在缓存bean的集合中调用remove方法,简单的说就等于
map.remove(key)
,获取不了缓存对象,就会导致bean在使用时,触发bean的重新创建,获得的新bean对象再进行缓存,完成bean的刷新。p.s. 版本:spring-cloud-contest-2.1.1