为了账号安全,请及时绑定邮箱和手机立即绑定

无法使用@Bean 和@ConfigurationProperties 绑定属性

无法使用@Bean 和@ConfigurationProperties 绑定属性

UYOU 2023-04-26 10:45:27
我正在从属性文件中读取配置。现在我有一个错误,我认为它与 spring bean 的初始化顺序有关。如果我这样做 private Map name = new HashMap<>(); 它可以从属性文件中成功加载。但现在我无法将属性绑定到 ServiceNameConfig我不知道为什么会发生这种情况以及如何处理它。@ConfigurationProperties(prefix = "amazon.service")@Configuration@EnableConfigurationProperties(ServiceNameConfig.class)public class ServiceNameConfig {   //If I do private Map<String, String> name = new HashMap<>(); It can be successfully load from properties file.    private Map<String, String> name;    @Bean(value = "serviceName")    public Map<String, String> getName() {        return name;    }    public void setName(Map<String, String> name) {        this.name = name;    }} 它的用法;@Autowired@Qualifier("serviceName")Map<String, String> serviceNameMap;
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

您可以将配置类替换为这样(更简单);


@Configuration

public class Config {


    @Bean

    @ConfigurationProperties(prefix = "amazon.service")

    public Map<String, String> serviceName() {

        return new HashMap<>();

    }

}

对于@ConfigurationProperties注入,您需要提供一个空的 bean 对象实例。


或者另一种方法,您可以使用 pojo 类来处理配置。例如;


你有这样的属性;


amazon:

  service:

    valueA: 1

    valueB: 2

    details:

      valueC: 3

      valueD: 10

您可以使用如下的 pojo;


class Pojo {


    private Integer valueA;

    private Integer valueB;

    private Pojo2 details;


    // getter,setters


    public static class Pojo2 {


        private Integer valueC;

        private Integer valueD;


        // getter,setters

    }

}

并在配置类中使用它;


@Configuration

public class Config {


    @Bean

    @ConfigurationProperties(prefix = "amazon.service")

    public Pojo serviceName() {

        return new Pojo();

    }

}


查看完整回答
反对 回复 2023-04-26
  • 1 回答
  • 0 关注
  • 164 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信