SpringBoot在application.yml中配置了全局信息,这些配置信息的引用有三种方法:
1、@Value
2、@ConfigurationProperties
3、@PropertySource
@ConfigurationProperties可以直接实现一个对象的自动绑定,我们详细来看一下@ConfigurationProperties的使用方法。
看demo
yml文件中配置:
person:
name: "张三"
age: 20
amount: 100
/**
* @Auther: www.itzhimei.com
* @Description:
*/
@Component
@Data
@ConfigurationProperties(prefix = "person")
public class Person7 {
private String name;
private int age;
private BigDecimal amount;
public Person7() {
}
@Override
public String toString() {
System.out.println("zhuanhuan");
return "Person[name:"+name+",age:"+age+"]";
}
}
@RestController
public class App2
{
@Autowired
private Person7 person7;
@GetMapping("/getPerson7")
public Person7 getPerson7() {
return person7;
}
}
启动服务,从浏览器访问:http://localhost:8081/getPerson7
浏览器输出:{“name”:”张三”,”age”:20,”amount”:100}
这里的demo先定义了一个Person7,并使用了注解@Component和@ConfigurationProperties(prefix = “person”),同时@ConfigurationProperties指定了前缀,这个很好理解,因为我们是要绑定一个对象的配置,在配置中文件中,肯定是有前缀的,所以需要指定前缀信息,配置像这样:
person:
name: "张三"
age: 20
amount: 100
还有另一种写法,也能实现基于对象的配置注入,在项目的一个有@Configuration注解类上,添加注解:
@SpringBootApplication(scanBasePackages = "com")
@EnableConfigurationProperties(Person8.class)
public class App {
......
}
也能实现基于一个对象的配置信息注入。
@Data
@ConfigurationProperties(prefix = "person2")
public class Person8 {
private String name;
private int age;
private BigDecimal amount;
public Person8() {
}
@Override
public String toString() {
System.out.println("zhuanhuan");
return "Person[name:"+name+",age:"+age+"]";
}
}
此时Person8就不需要使用@Component注解了。
@Component和@EnableConfigurationProperties的目的都是能够让容器发现我们的配置类。