作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬
学习必须往深处挖,挖的越深,基础越扎实!
阶段1、深入多线程
阶段2、深入多线程设计模式
阶段3、深入juc源码解析
码哥源码部分
码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】
码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】
码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】
码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】
打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】
简单流程
@ConfigurationProperties
这个是把一个类设置成配置属性,但是要绑定启用,得有个条件,就是得有@EnableConfigurationProperties
注解,里面放入要启动的类。
例子
还是前面的例子,这次就加了ConfigurationProperties
注解。
然后找了个能注册到容器的配置类,加上EnableConfigurationProperties
注解,写上启动的类。这里要注意EnableConfigurationProperties只要挂在能注册到容器的类就可以,没有规定是哪个类,只要里面加上你的配置属性类就可以,比如我这里是MyProperties.class
。
然后可能加上依赖,否则可能没提示:
然后在配置文件application.properties
里配置:
接着上篇的值的话,name
应该是222
,但是我们现在来看,要被覆盖了:
原来还能被覆盖,在实例初始化之前applyBeanPostProcessorsBeforeInitialization
里被覆盖的,那肯定是有个处理器给处理了,是的,就是ConfigurationPropertiesBindingPostProcessor
。下面就简单说下原理吧。
@EnableConfigurationProperties
关键是这个注解的import
的EnableConfigurationPropertiesRegistrar
。
这个已经讲过好几遍了,在解析的时候会被创建放入一个集合里,然后在加载bean
定义的时候执行registerBeanDefinitions
。
EnableConfigurationPropertiesRegistrar的registerInfrastructureBeans注册基础bean
首先进行注册基础的bean
,用来处理的:
ConfigurationPropertiesBindingPostProcessor的register
内部把自己注册进去了,而且不会重复,这个就是用来处理绑定属性的。
ConfigurationPropertiesBinder的register
还注册了配置属性绑定器,作用就是讲配置文件读取的属性帮定到配置属性。
ConfigurationPropertiesBeanRegistrar
然后创建ConfigurationPropertiesBeanRegistrar
对象,将当前配置类上EnableConfigurationProperties
注解的所有配置属性类注册到容器中。
然后获取他们的ConfigurationProperties
注解的属性前缀,如果有的话就拼接beanName
,否则就用全限定类名。
当然这个是第一步,先注册进容器,因为ConfigurationPropertiesBindingPostProcessor
会在初始化之前的处理方法中去处理他们,让他们绑定上配置文件中的属性,具体怎么绑定的下篇说吧。
好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。