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

我正在从属性文件中读取配置。现在我有一个错误,我认为它与 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;


UYOU
浏览 165回答 1
1回答

千万里不及你

您可以将配置类替换为这样(更简单);@Configurationpublic 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    }}并在配置类中使用它;@Configurationpublic class Config {    @Bean    @ConfigurationProperties(prefix = "amazon.service")    public Pojo serviceName() {        return new Pojo();    }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java