美文网首页
@ConfigurationProperties原理一

@ConfigurationProperties原理一

作者: 程序员札记 | 来源:发表于2023-08-14 11:32 被阅读0次

    简单流程

    image.png

    @ConfigurationProperties

    这个是把一个类设置成配置属性,但是要绑定启用,得有个条件,就是得有@EnableConfigurationProperties注解,里面放入要启动的类。

    例子

    还是前面的例子,这次就加了ConfigurationProperties注解。

    image.png

    然后找了个能注册到容器的配置类,加上EnableConfigurationProperties注解,写上启动的类。这里要注意EnableConfigurationProperties只要挂在能注册到容器的类就可以,没有规定是哪个类,只要里面加上你的配置属性类就可以,比如我这里是MyProperties.class

    image.png

    然后可能加上依赖,否则可能没提示:


    image.png

    然后在配置文件application.properties里配置:

    image.png

    接着上篇的值的话,name应该是222,但是我们现在来看,要被覆盖了:

    image.png
    image.png

    原来还能被覆盖,在实例初始化之前applyBeanPostProcessorsBeforeInitialization里被覆盖的,那肯定是有个处理器给处理了,是的,就是ConfigurationPropertiesBindingPostProcessor。下面就简单说下原理吧。

    @EnableConfigurationProperties

    关键是这个注解的importEnableConfigurationPropertiesRegistrar

    image.png

    这个已经讲过好几遍了,在解析的时候会被创建放入一个集合里,然后在加载bean定义的时候执行registerBeanDefinitions

    image.png

    EnableConfigurationPropertiesRegistrar的registerInfrastructureBeans注册基础bean

    首先进行注册基础的bean,用来处理的:

    image.png

    ConfigurationPropertiesBindingPostProcessor的register

    内部把自己注册进去了,而且不会重复,这个就是用来处理绑定属性的。


    image.png

    ConfigurationPropertiesBinder的register

    还注册了配置属性绑定器,作用就是讲配置文件读取的属性帮定到配置属性。


    image.png

    ConfigurationPropertiesBeanRegistrar

    然后创建ConfigurationPropertiesBeanRegistrar对象,将当前配置类上EnableConfigurationProperties注解的所有配置属性类注册到容器中。

    然后获取他们的ConfigurationProperties注解的属性前缀,如果有的话就拼接beanName,否则就用全限定类名。

    image.png

    当然这个是第一步,先注册进容器,因为ConfigurationPropertiesBindingPostProcessor会在初始化之前的处理方法中去处理他们。

    相关文章

      网友评论

          本文标题:@ConfigurationProperties原理一

          本文链接:https://www.haomeiwen.com/subject/ftfcmdtx.html