我正在创建一个2类库。主类(CustomLogger)将由我的应用程序使用。辅助类(LoggerConfig)用于从 CustomLogger 使用的.properties 文件导入一些字段。当我运行下面的代码时,我的自动连线配置对象保持为空。如有任何建议,我们将不胜感激。
CustomLogger.java:
@Component
public class CustomLogger {
private String env;
@Autowired
private LoggerConfig myConfig;
public CustomLogger() {
this.env = myConfig.env; // <-- getting null pointer exception here
}
}
// ... public void methods here
LoggerConfig.java:
@Configuration
@ConfigurationProperties("logger")
public class LoggerConfig {
public string env; // represented as 'logger.env' in properties
public void setEnv(final String env) { this.env = env; }
// ... other fields
}
Controller.java (使用库)
@RestController
public class Controller {
@Autowired private CustomLogger customLogger;
// GET mappings
}
2条答案
按热度按时间ha5z0ras1#
对于
@Autowired
注解,根据文档字段是在bean构造之后,在调用任何配置方法之前注入的。这样的配置字段不必是公共的。
因此,对于属性自动装配,它将使用默认构造器创建类的对象,并且只有在创建对象后才会注入依赖项。因此,在
CustomLogger
的情况下,在对象创建期间,myConfig
尚未注入,因此它为null,这会导致NPE。这可以通过使用构造函数进行依赖注入来解决
在这种情况下,对象与其依赖项一起创建
ibps3vxo2#
总结
问题可能是如何在
Spring
中建立一个自定义的自动连线属性配置?我认为你可以尝试按照下面的步骤,这可能会对你有帮助。additional-spring-configuration-metadata.json
1.定义自定义属性类
2.添加配置文件
additional-spring-configuration-metadata.json
定义spring文件
additional-spring-configuration-metadata.json
,指示连接哪些属性的springContext;您应该将additional-spring-configuration-metadata.json
添加到您的project path
,即src/main/resources/META-INF/additional-spring-configuration-metadata.json
以下是代码片段3.将步骤1中定义的值与Spring属性关联
checkout 你的spring yaml或properties路径,确保它在你的资源路径中,然后配置在前面步骤代码片段中定义的config
4.创建一个Configuration类,并将Bean连接到SpringContext中
如果您没有更多的自定义配置,可以忽略步骤4,使用
@Autowired
来获取Bean,希望对您有所帮助;