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