- 目标:
- 一、@ConfigurationProperties注解配置自定义Bean
- 二、@ConfigurationProperties注解&@EnableConfigurationProperties配合使用配置自定义Bean
- 三、@ConfigurationProperties注解配置第三方Bean
- 四、@ConfigurationProperties注解宽松绑定
- 五、pom.xml文件完整内容
一、@ConfigurationProperties注解配置自定义Bean
- 0、基础依赖
- 1、自定义实体类,@Component注解注册Bean
- 2、application.yml配置属性
- 3、从IOC容器中获取Bean
二、@ConfigurationProperties注解&@EnableConfigurationProperties配合使用配置自定义Bean
- 1、自定义实体类
此处注意不要使用@Component将Bean注入容器,因为@EnableConfigurationProperties会有同样的作用。
- 2、application.yml配置属性
- 3、在启动类上使用@EnableConfigurationProperties
如果有多个自定义Bean,使用数组形式配置即可,用","隔开。
- 4、从IOC容器中获取Bean
@EnableConfigurationProperties注册Bean的原理
① 跟踪源码可以看到@Import({EnableConfigurationPropertiesRegistrar.class})
@Target({ ElementType. TYPE})
@Retention( RetentionPolicy. RUNTIME)
@Documented
@Import({ EnableConfigurationPropertiesRegistrar. class})
public @interface EnableConfigurationProperties {
String VALIDATOR_BEAN_NAME = "configurationPropertiesValidator";
Class <?>[] value() default {};
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
②EnableConfigurationPropertiesRegistrar#registerBeanDefinitions会完成Bean的注册
@Override
public void registerBeanDefinitions( AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
registerInfrastructureBeans( registry);
registerMethodValidationExcludeFilter( registry);
ConfigurationPropertiesBeanRegistrar beanRegistrar = new ConfigurationPropertiesBeanRegistrar( registry);
getTypes( metadata). forEach( beanRegistrar::register);
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
三、@ConfigurationProperties注解配置第三方Bean
- 1、@Bean注解注册Bean
- 2、application.yml配置属性
- 3、从IOC容器中获取Bean
四、@ConfigurationProperties注解宽松绑定
- 1、@ConfigurationProperties注解属性绑定
驼峰模式ipAddress
下划线模式ip_address
中划线模式ip-address
常量模式IP_ADDRESS
- 2、官方推荐
官方推荐的模式是:中划线模式(烤肉串模式)
- 3、@Value注解
不同于@ConfigurationProperties注解,@Value注解不支持宽松绑定。
- 4、@ConfigurationProperties注解前缀命名
prefix 命名规范只能使用:小写字母、数字、下划线作为合法字符,另外"-"能被识别忽略。
五、pom.xml文件完整内容
<?xml version="1.0" encoding="UTF-8"?>
< project xmlns= "http://maven.apache.org/POM/4.0.0" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation= "http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion >4.0.0 </ modelVersion >
< parent >
< groupId >org.springframework.boot </ groupId >
< artifactId >spring-boot-starter-parent </ artifactId >
< version >2.6.4 </ version >
< relativePath /> <!-- lookup parent from repository -->
</ parent >
< groupId >com.stone </ groupId >
< artifactId >springboot_13_configuration </ artifactId >
< version >0.0.1-SNAPSHOT </ version >
< dependencies >
<!--base-->
< dependency >
< groupId >org.springframework.boot </ groupId >
< artifactId >spring-boot-starter </ artifactId >
</ dependency >
<!--test-->
< dependency >
< groupId >org.springframework.boot </ groupId >
< artifactId >spring-boot-starter-test </ artifactId >
< scope >test </ scope >
</ dependency >
<!--druid work with jdbc-->
< dependency >
< groupId >com.alibaba </ groupId >
< artifactId >druid-spring-boot-starter </ artifactId >
< version >1.2.6 </ version >
</ dependency >
<!--jdbc-->
< dependency >
< groupId >org.springframework.boot </ groupId >
< artifactId >spring-boot-starter-jdbc </ artifactId >
</ dependency >
<!--lombok-->
< dependency >
< groupId >org.projectlombok </ groupId >
< artifactId >lombok </ artifactId >
</ dependency >
<!--configuration-processor-->
< dependency >
< groupId >org.springframework.boot </ groupId >
< artifactId >spring-boot-configuration-processor </ artifactId >
< optional >true </ optional >
</ dependency >
</ dependencies >
< build >
< plugins >
< plugin >
< groupId >org.springframework.boot </ groupId >
< artifactId >spring-boot-maven-plugin </ artifactId >
</ plugin >
</ plugins >
</ build >
</ project >
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.
- 35.
- 36.
- 37.
- 38.
- 39.
- 40.
- 41.
- 42.
- 43.
- 44.
- 45.
- 46.
- 47.
- 48.
- 49.
- 50.
- 51.
- 52.
- 53.
- 54.
- 55.
- 56.
- 57.
- 58.
- 59.
- 60.
- 61.
- 62.
六、结尾
以上即为本文全部内容