入口
通过查看官方的文档,注解驱动的使用方式如下
@Configuration
@EnableNacosConfig(globalProperties = @NacosProperties(serverAddr = "127.0.0.1:8848"))
@NacosPropertySource(dataId = "example", autoRefreshed = true)
public class NacosConfiguration {
}
所以我们看看注解EnableNacosConfig的源码,其中的关键点为@Import(NacosConfigBeanDefinitionRegistrar.class)
这里涉及spring的import注解,它的作用简单概括为:
- 声明一个bean
- 导入@Configuration注解的配置类
- 导入ImportSelector的实现类
- 导入ImportBeanDefinitionRegistrar的实现类
查看NacosConfigBeanDefinitionRegistrar源码,它实现了接口ImportBeanDefinitionRegistrar。它主要是注册一些简单 bean 和 post processor 的 bean。下面就说说其中一些重要的
NacosPropertySourcePostProcessor
这个类的主要作用简单的说就是使用ConfigService 从服务端获取配置,解析生成NacosPropertySource(PropertySource的子类),追加到Spring的PropertySources中。
那么nacos服务端的配置是如何注入@NavosValue注解的属性中的呢?那就涉及下面一个类
NacosValueAnnotationBeanPostProcessor
这个类简单的说,把bean中被@NavosValue注解的属性或方法设置值,值来自于调用doGetInjectedBean方法返回的值。
我们看到这个类继承了AnnotationInjectedBeanPostProcessor,它的功能就是对自定义注解的属性注入一个值,至于值是什么,为它的子类的doGetInjectedBean方法返回的值。