SpringBoot版本 2.4.5
问题
学习@ConfigurationPropertie 发现一个有趣的现象
@ConfigurationProperties(prefix = "bean01")
@Component("bean01")
@Data
public class ConfigrationPojo {
private String name;
private Integer age;
private Integer id;
}
如果你在类上标注了@ConfigurationPropertie ,然而你继续在配置类上注入这个类型的bean时候,后注入的bean属性会被覆盖掉
@Configuration
public class ApplicationConfigration {
@Bean("bean02")//被覆盖
public ConfigrationPojo bean02() {
ConfigrationPojo configrationPojo = new ConfigrationPojo();
configrationPojo.setAge(22);
configrationPojo.setId(2);
configrationPojo.setName("config02");
return configrationPojo;
}
}
@RestController
public class TestController {
@Autowired
@Qualifier("bean01")
private ConfigrationPojo configrationPojo01;
@Autowired
@Qualifier("bean02")
private ConfigrationPojo configrationPojo02;
@RequestMapping("/1")
public String bean01(){
return configrationPojo01.toString();
}
@RequestMapping("/2")
public String bean02(){
return configrationPojo02.toString();
}
}
输出结果
注意:这里请求返回的是bean02 ,可是返回的属性值已经被bean01覆盖掉
查询了好久都找不到答案(望大神指教),个人猜测应该是@ConfigurationPropertie + @Component 实例化bean时候会给属性赋值,所以把@Bean 的属性值覆盖了。
解决方法
我的解决方法是: 不在类上使用@ConfigurationPropertie + @Component ,改为在配置类里上装配这个bean
@Configuration
public class ApplicationConfigration {
@Bean("bean01")
@ConfigurationProperties("bean01")
public ConfigrationPojo configrationPojo() {
return new ConfigrationPojo();
}
@Bean("bean02")
public ConfigrationPojo bean02() {
ConfigrationPojo configrationPojo = new ConfigrationPojo();
configrationPojo.setAge(22);
configrationPojo.setId(2);
configrationPojo.setName("bean02");
return configrationPojo;
}
}
这样做注入的bean01就不会覆盖掉bean02的属性值。
输出结果