需求背景:通过nacos配置中心获取对应的配置信息,然后通过bean的方式注入属性值,其中部分属性值需要根据配置中的类型进行转换,达到直接获取通过处理后的属性值的目的。
如图所示:其中rules是在配置中心获取的,grayRuleInfos是需要提供给其他服务使用的,需要将rules转换成grayRuleInfos这个List对象。
目前可以通过三种方式实现
1、通过重写set方法,在自动初始化bean注入rules的时候完成grayRuleInfos的初始化(不够友好)。
2、通过EventListener监听下发的配置修改事件,然后修改对应的grayRuleInfos初始化(获取到的是上一次rules的值)
@EventListener
public void envChangeListener(EnvironmentChangeEvent event) {}
3、通过@PostConstruct,比较优雅的实现grayRuleInfos的初始化。
主要是因为在该bean上加了@RefreshScope,每次配置变更都是销毁原来的bean,然后重新将bean初始化(注意这里是延迟加载,只有在使用的时候才会触发PostConstruct对应的操作)。
网友评论