【问题标题】:@ConstructorBinding seems not to work in Spring Boot 2.5.4@ConstructorBinding 似乎在 Spring Boot 2.5.4 中不起作用
【发布时间】:2021-11-02 14:13:41
【问题描述】:

我正在使用 Spring Boot 2.5.4 并尝试从属性初始化一个不可变类:

@Configuration
@ConfigurationProperties("test")
public class Config {
    public final String foo;
    
    @ConstructorBinding
    public Config(String foo) {
        this.foo = foo;
    }
}

application.yml:

test:
  foo: bar

主类:

@SpringBootApplication
@ConfigurationPropertiesScan
public class Application implements CommandLineRunner {
    @Autowired Config config;
    public Application(Config config) {
        this.config = config;
    }

    public static void main(String[] args) { SpringApplication.run(Application.class, args); }

    @Override
    public void run(String... args) {
        System.out.println(config.foo);
    }
}

我希望这会启动并打印“bar”。但是,它无法以开始

Parameter 0 of constructor in Config required a bean of type 'java.lang.String' that could not be found.

当我删除 @ConstructorBinding 并添加一个 setter 和 nullary 构造函数时,它确实有效。

【问题讨论】:

  • 不要在同一个类中使用@ConfigurationProperties@Configuration,即使它有时会起作用。

标签: java spring-boot configurationproperties


【解决方案1】:

在班级级别添加@ConstructorBinding。并删除@Configuration 注释。像这样,

@ConstructorBinding
@ConfigurationProperties("test")
public class Config {
    public final String foo;
    
    public Config(String foo) {
        this.foo = foo;
    }
}

【讨论】:

  • 删除@Configuration 是关键。 @ConstructorBinding 可以在构造函数上。谢谢!
猜你喜欢
  • 2014-12-23
  • 1970-01-01
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
相关资源
最近更新 更多