有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@ConstructorBinding在SpringBoot2.5.4中似乎不起作用

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

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

应用程序。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构造函数时,它确实可以工作


共 (1) 个答案

  1. # 1 楼答案

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

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