SpringBoot源码学习之@EnableConfigurationProperties原理机制

前言

用法

  1. 定义一个与application.yml中属性配置相对应的实体类,比如ServerProperties
  2. 在ServerProperties中添加@ConfigurationProperties注解,指定prefix
  3. 在@Configuration配置类中添加@EnableConfigurationProperties(ServerProperties.class)
  4. 使用方式,可以透过@Bean方法中的入参或者在Spring Bean中用@Autowired注解都可以。

原理

解析@Configuration类

找到该类通过@Import所引入的类,对于@EnableConfigurationProperties来说,引入的是EnableConfigurationPropertiesRegistrar。

在loadBeanDefinitionsFromConfiguration中向IOC容器中注册有关的beanDefinition信息。

对于@EnableConfigurationProperties来说,向IOC容器实际注册beanDefinition是通过
loadBeanDefinitionsFromRegistrars(configClass.getImportBeanDefinitionRegistrars()); 来实现的,即完成EnableConfigurationPropertiesRegistrar这个类的BeanDefinition信息的注册。

	// EnableConfigurationPropertiesRegistrar该类下重载的方法
	@Override
	public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
		// 注册该类的基础BeanDefinition信息
		registerInfrastructureBeans(registry);
		// 创建特定Bean的注册器,以便将通过注解引入的用户自定义类注册到IOC容器中
		ConfigurationPropertiesBeanRegistrar beanRegistrar = new ConfigurationPropertiesBeanRegistrar(registry);
		// 获取@EnableConfigurationProperties注解引入的类,进行注册
		getTypes(metadata).forEach(beanRegistrar::register);
	}
	// 注册需要的基础设置类
	static void registerInfrastructureBeans(BeanDefinitionRegistry registry) {
		// Bean对象创建后置处理BeanPostProcessor
		// 处理比如ServerProperties这种
		ConfigurationPropertiesBindingPostProcessor.register(registry);
		// 绑定的beanDefinition注册
		BoundConfigurationProperties.register(registry);
		// 配置Bean工厂元数据的注册
		ConfigurationBeanFactoryMetadata.register(registry);
	}

以SpringBoot提供的ServerProperties为例:
当在创建ServerProperties对象时,在bean生命周期的initializeBeanpostProcessBeforeInitializationConfigurationPropertiesBindingPostProcessor起作用。

通过ConfigurationProperties annotation = findAnnotation(instance, type, factory, ConfigurationProperties.class);找到ServerProperties类上的注解@ConfigurationProperties。

在这里插入图片描述
通过bind方法绑定
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值