我正在使用application.yml文件作为我的Spring Boot应用程序中的外部配置,该文件使用AppConfig.java批注绑定(bind)到@ConfigurationProperties。在AppConfig.java内部,我基于application.yml中的层次结构嵌套了类。当我使用static声明嵌套类时,一切正常。但是最近在一个项目中,我错过了其中一个嵌套类的static,并导致了NullPointerException。通过在线资源,我阅读了何时以及何时不使嵌套类静态化。但是,我需要了解application.ymlAppConfig.java的绑定(bind)是如何在 Spring 启动中发生的,以及为什么嵌套类需要为static的原因。
application.yml

spring:
  foo:
    host: localhost
  bar:
    endpoint: localhost
AppConfig.java
@Component
@ConfigurationProperties("spring")
public class AppConfig {
    private Foo foo;
    private Bar bar;
    public static class Foo {
        private String host;
        // getter, setter
    }
    public class Bar {
        private String host;
        // getter, setter
    }
    //getters, setters
}
当我在其他类中自动连接AppConfig.java时,appConfig.getFoo()可以正常工作,但是appConfig.getBar()导致了NullPointerException

最佳答案

我还没有找到为什么它必须是静态的。
但是,我在文档中发现了其他注释。它与@ConfigurationProperties bean的验证有关。
这里是:



这是关于内部类(Class)的。
更多详细信息:https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-validation

10-04 17:15