使用 properties 配置文件装配 bean 的方式
在spring中将bean 注册到spring 容器中常见的有三种方式(两类):
先说明配置文件内容:application.yml,有一段配置如下
persons:
youtube:
name: youtube
age: 18
google:
name: google
age: 20
第一类:将单个类注册到容器中
第一种,使用 @ConfigurationProperties + @Component,配置 GoogleUser
@Configuration //效果等同于 @Component
@ConfigurationProperties(prefix="persons.google") // 表示使用配置文件中前缀为 persons.google 的属性的值初始化该bean定义产生的的bean实例的同名属性,例如会将name 初始化为 "google"
@Data
public class GoogleUser{
private String name;
private Integer age;
}
第二种,使用 @Value
@Configuration
@Data
public class GoogleUser{
@Value("${persons.google.name}") //将配置文件中 persons.google.name 属性值注入进来
private String name;
@Value("${persons.google.age}")
private Integer age;
}
第二类,@ConfigurationProperties + @Bean注解在配置类的bean定义方法上
首先需要定义一个普通类,属性有 name、age。Person
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Person {
private String name;
private Integer age;
}
在配置类中将一个方法定义为一个 bean
@Configuration
public class PropertyConf {
@Bean(name="youtubeUser")
@ConfigurationProperties(prefix="persons.youtube")
public Person youtubeUser() {
return new Person();
}
}
至此配置完成了,可以写写controller 验证一下了
@RestController
public class WelcomeController {
@Autowired
private GoogleUser p;
@Autowired
@Qualifier("youtubeUser")
private Person youtubeUser;
@RequestMapping(value="/hello", method=RequestMethod.GET)
public String hello() {
return "hello world";
}
@RequestMapping(value="/hi/{name}", method=RequestMethod.GET)
public String hi(@PathVariable String name) {
System.out.println("user name is:" + name);
return "hi "+name;
}
@RequestMapping(value="/person/google", method=RequestMethod.GET)
public Person getGoogle() {
System.out.println(p);
Person result = Person.builder().name(p.getName()).age(p.getAge()).build();
return result;
}
@RequestMapping(value="/person/youtube", method=RequestMethod.GET)
public Person getYoutube() {
System.out.println(youtubeUser);
return youtubeUser;
}
}
使用 postman 等工具可以测一下了