@ConfigurationProperties注解有个prefix属性,通过指定的前缀,绑定配置文件的相关配置。该注解可以放在类上,也可以放在方法上。
从官方的注释中了解,当作用于方法上时,如果绑定配置,需要有@Bean注解且对应的类需要@Configuration注解
/**
* Annotation for externalized configuration. Add this to a class definition or a
* {@code @Bean} method in a {@code @Configuration} class if you want to bind and validate
* some external Properties (e.g. from a .properties file).
* <p>
* Binding is either performed by calling setters on the annotated class or, if
* {@link ConstructorBinding @ConstructorBinding} is in use, by binding to the constructor
* parameters.
* <p>
* Note that contrary to {@code @Value}, SpEL expressions are not evaluated since property
* values are externalized.
*
* @author Dave Syer
* @since 1.0.0
* @see ConfigurationPropertiesScan
* @see ConstructorBinding
* @see ConfigurationPropertiesBindingPostProcessor
* @see EnableConfigurationProperties
*/
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Indexed
public @interface ConfigurationProperties {}
一、放在类上使用
配置文件:
personinfo:
name: jack02
age: 12
Java POJO类
@Component
@ConfigurationProperties(prefix = "personinfo")
public class PersonInfo {
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
测试:
@Autowired
private PersonInfo personInfo;
@Test
public void getPersonInfo(){
System.out.println(personInfo.getName()+"-"+personInfo.getAge());
}
二、放在方法上
配置文件
student:
name: jack03
age: 24
sex: M
Java POJO类
public class Student {
private String name;
private int age;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
Java Config 类
@Configuration
public class StudentConfig {
@Bean
@ConfigurationProperties(prefix = "student")
public Student getStudent(){
return new Student();
}
}
测试
@Autowired
private Student student;
@Test
public void getStudent(){
System.out.println(student.getName()+"-"+student.getAge()+"-"+student.getSex());
}