接上一篇博客 使用@ConfigurationProperties 注入配置信息之一 ,本文继续讲@ConfigurationProperties相关知识
在上一篇博客中,我们的属性配置类FooProperties通过使用@ConfigurationProperties注解实现了配置信息的注入;然后又通过使用@EnableConfigurationProperties注解才使得配置bean被创建出来。其实,@EnableConfigurationProperties这个注解也会自动应用到项目中,同时,系统中任何被 @ConfigurationProperties 标注的“已经存在”的 bean 都会从系统环境中加载配置信息。也就是说,我们可以像下面这样简化上一篇博客中的配置。
- 配置信息
# ConfigurationProperties 学习,见 spring boot 文档第 24.7小节
foo.enabled=false
foo.remote-address=192.168.1.1
foo.security.username=user
foo.security.password=pwd
foo.security.roles=USER,ADMIN
- 属性配置类 - bean
/**
* 对比 {@link FooProperties}
*
* 事实上,{@link EnableConfigurationProperties} 已经自动将 Environment
*
* 中的配置应用到了被 {@link ConfigurationProperties} 注解的"bean"上
*
* 所以该类的配置等同于 {@link FooProperties} 和 {@link TestPropertiesConfiguration} 的组合配置
*/
@Component
@ConfigurationProperties(prefix = "foo")
public class BarProperties {
private boolean enabled;
private InetAddress remoteAddress;
private Security security;
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public InetAddress getRemoteAddress() {
return remoteAddress;
}
public void setRemoteAddress(InetAddress remoteAddress) {
this.remoteAddress = remoteAddress;
}
public Security getSecurity() {
return security;
}
public void setSecurity(Security security) {
this.security = security;
}
public static class Security {
private String username;
private String password;
private List<String> roles = new ArrayList<>(Collections.singleton("USER"));
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
@Override
public String toString() {
return "{ " + "username='" + username + '\'' + ", password='" + password + '\'' + " }";
}
}
@Override
public String toString() {
return "{ " + "enabled=" + enabled + ", remoteAddress=" + remoteAddress + ", security="
+ security + " }";
}
}
- 实例化属性配置bean
@Service
public class BarServiceImpl implements BarService {
private static final Logger logger = LoggerFactory.getLogger(BarServiceImpl.class);
private BarProperties barProperties;
@Autowired
public BarServiceImpl(BarProperties barProperties) {
this.barProperties = barProperties;
}
/**
* 这个注解在这里没实际用处,就是为了方便在该类构造完成后打印日志,看看配置信息是否加载到配置类中了
*/
@PostConstruct
public void verifyConfigurationProperties() {
logger.info("BarProperties: {}", barProperties);
}
}
- 验证配置信息是否加载到属性配置bean中