@ConfigurationProperties 实现流程

一、基本使用
  1. 创建配置对象
    对象上标注@ConfigurationProperties注解
@ConfigurationProperties(prefix = "spring.datasource")
public class DataSourceProperties implements 
BeanClassLoaderAware, InitializingBean {
private String driverClassName;
     /**
      * JDBC URL of the database.
      */
     private String url;
     /**
      * Login username of the database.
      */
     private String username;
     /**
      * Login password of the database.
      */
     private String password;

}

  1. 使用配置对象
  • 标注@EnableConfigurationProperties(配置对象类.class)
  • 一般用在@Configuration标注的类上
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(DataSourceProperties.class)
public class EmbeddedDataSourceConfiguration implements BeanClassLoaderAware {

	@Bean(destroyMethod = "shutdown")
	public EmbeddedDatabase dataSource(DataSourceProperties properties) {
		return new EmbeddedDatabaseBuilder().setType(EmbeddedDatabaseConnection.get(this.classLoader).getType())
				.setName(properties.determineDatabaseName()).build();
	}

}
二、关键对象
  • ConfigurationPropertiesBindingPostProcessor:实现了BeanPostProcessor
    拦截@ConfigurationProperties标注bean的创建过程,注入值。
  • EnableConfigurationPropertiesRegistrar:将ConfigurationPropertiesBindingPostProcessor放入容器;将value属性值(标注@ConfigurationProperties的bean class)放入容器
三、实现流程
  1. ConfigurationPropertiesBindingPostProcessor类被加载和解析
标注了
调用
调用
@EnableConfigurationProperties
@Import(EnableConfigurationPropertiesRegistrar.class)
spring-boot解析@Import流程
EnableConfigurationPropertiesRegistrar.
registerBeanDefinitions()
registerInfrastructureBeans()
向容器添加了
ConfigurationPropertiesBindingPostProcessor
ConfigurationPropertiesBeanRegistrar.register()
将@EnableConfigurationProperties注解value属性值
(标注@ConfigurationProperties的bean class)放入容器
  1. 拦截@ConfigurationProperties标注bean的创建过程,注入值
调用
调用
调用
创建bean流程
ConfigurationPropertiesBindingPostProcessor.
postProcessBeforeInitialization()
ConfigurationPropertiesBean.get()
如果bean没有@ConfigurationProperties,则结束流程
bind()
ConfigurationPropertiesBinder.bind()
从applicationContext中获取配置文件值注入bean
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值