springboot版本2.2.6,apollo版本1.6.1

接上一章,本章主要是SpringValueDefinitionProcessor、SpringValueProcessor、ApolloAnnotationProcessor、ApolloJsonValueProcessor

一.SpringValueDefinitionProcessor

SpringValueDefinitionProcessor,属于BeanDefinitionRegistryPostProcessor类型的BeanFactory后置处理器;主要目的是对所有的BeanDefinition进行遍历,将属性中含有占位符${key}中的key找出来(注:此处不包括@Value注解的占位符),key和field等做好关联,封装成SpringValueDefinition对象,放入集合中,注:并没有将SpringValueDefinition注入spring容器,再多说一句,apollo使用了Google Guice 轻量级的依赖注入框架,又简单的包装了一下

二.SpringValueProcessor

SpringValueProcessor,属于BeanFactory、Bean后置处理器;BeanFactory后置处理器优先级低于上面的BeanDefinitionRegistryPostProcessor,作用是取出上面创建好的集合SpringValueDefinition,继续操作;Bean后置处理器作用是解析bean中带有@Value注解的属性,将占位符key和属性field建立关联封装成SpringValue对象,增加到SpringValueRegistry集合中;循环SpringValueDefinition集合,将非@Value注解的占位符也封装注册进SpringValueRegistry对象中,注:同样没有将SpringValueRegistry注入spring容器,考虑到可能并发操作SpringValueRegistry单例对象的registry集合,注册方法用了synchronized

 三.ApolloAnnotationProcessor

ApolloAnnotationProcessor,Bean后置处理器,主要是处理带有@ApolloConfig注解和@ApolloConfigChangeListener注解的bean对象;如果属性上有@ApolloConfig,取出apollo上的配置,反射设置到属性值上,ReflectionUtils.setField(field, bean, config);如果方法上面有@ApolloConfigChangeListener,将方法封装成监听器对象,监听配置的变化;这个监听的目的是向外提供钩子,让项目可以感知远程apollo配置的变化,做出相应的处理,比如配置从1变化到2时,发出系统警告等

四.ApolloJsonValueProcessor

ApolloJsonValueProcessor,Bean后置处理器,主要是处理带有@ApolloJsonValue注解的bean对象,解析注解value值,找到对应配置json字符串,转化为对象;换种方式说就是将对象序列化成json串,配置在apollo上面,然后靠@ApolloJsonValue注解来将json串反序列化成对象