Spring Boot 2.2.6 源码之旅四十八@ConfigurationProperties原理一

本文讲解SpringBoot中@ConfigurationProperties注解的使用原理,包括如何通过@EnableConfigurationProperties启用配置属性类,以及ConfigurationPropertiesBindingPostProcessor、ConfigurationPropertiesBinder和ConfigurationPropertiesBeanRegistrar在属性绑定过程中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单流程

在这里插入图片描述

@ConfigurationProperties

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

例子

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

然后可能加上依赖,否则可能没提示:
在这里插入图片描述
然后在配置文件application.properties里配置:
在这里插入图片描述
接着上篇的值的话,name应该是222,但是我们现在来看,要被覆盖了:
在这里插入图片描述
在这里插入图片描述
原来还能被覆盖,在实例初始化之前applyBeanPostProcessorsBeforeInitialization里被覆盖的,那肯定是有个处理器给处理了,是的,就是ConfigurationPropertiesBindingPostProcessor。下面就简单说下原理吧。

@EnableConfigurationProperties

关键是这个注解的importEnableConfigurationPropertiesRegistrar
在这里插入图片描述
这个已经讲过好几遍了,在解析的时候会被创建放入一个集合里,然后在加载bean定义的时候执行registerBeanDefinitions在这里插入图片描述

EnableConfigurationPropertiesRegistrar的registerInfrastructureBeans注册基础bean

首先进行注册基础的bean,用来处理的:
在这里插入图片描述

ConfigurationPropertiesBindingPostProcessor的register

内部把自己注册进去了,而且不会重复,这个就是用来处理绑定属性的。
在这里插入图片描述

ConfigurationPropertiesBinder的register

还注册了配置属性绑定器,作用就是讲配置文件读取的属性帮定到配置属性。
在这里插入图片描述

ConfigurationPropertiesBeanRegistrar

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

在这里插入图片描述
然后获取他们的ConfigurationProperties注解的属性前缀,如果有的话就拼接beanName,否则就用全限定类名。
在这里插入图片描述
当然这个是第一步,先注册进容器,因为ConfigurationPropertiesBindingPostProcessor会在初始化之前的处理方法中去处理他们,让他们绑定上配置文件中的属性,具体怎么绑定的下篇说吧。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值