使用 @ConfigurationProperties 注入配置信息之二

接上一篇博客 使用@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中
    验证配置信息是否加载到属性配置bean中
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值