启动时,Autowired 属性 在 EnvironmentPostProcessor 实现 class 中为空
Autowired property is null in EnvironmentPostProcessor implementation class on startup
在我的 SpringBoot 应用程序中,我在实现 EnvironmentPostProcessor
.
的 class 中自动装配了一个 configObject
注入的 class 在启动时从不同的来源读取数据,因为这是应用运行所必需的。
但是在启动应用程序时,configObject
显示为 Null。
@SpringBootApplication
@EnableEncryptableProperties
@EnableConfigurationProperties
@EnableCaching
@Slf4j
public class SBApplication {
public static void main(String[] args) {
SpringApplication.run(SBApplication.class, args);
}
}
以及调用 Autowired 对象的 AppEnvironmentPostProcessor class。这个class配置为spring.factories中的org.springframework.boot.env.EnvironmentPostProcessor
。 class 在启动时被调用。
@Slf4j
public class AppEnvironmentPostProcessor implements
EnvironmentPostProcessor, Ordered {
@Autowired
KeysConfig keysConfig;
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
// keysConfig is null
String key = keysConfig.getSecretKeyMap().get("key12");
}
}
并且在 KeysConfig class
@Component
public final class KeysConfig {
public Map getSecretKeyMap() {
//Returns key map
}
}
我正在使用 Intellij Ultimate。我该如何调试和解决这个问题?
EnvironmentPostProcessor
s 是在创建应用程序上下文之前创建的,因此在依赖注入成为可能之前创建。这意味着 @Autowired
将不起作用。
您必须更新您的实现以创建 KeysConfig
本身的实例,或者使用模仿 KeysConfig
当前所做的任何事情的不同方法。
在我的 SpringBoot 应用程序中,我在实现 EnvironmentPostProcessor
.
configObject
注入的 class 在启动时从不同的来源读取数据,因为这是应用运行所必需的。
但是在启动应用程序时,configObject
显示为 Null。
@SpringBootApplication
@EnableEncryptableProperties
@EnableConfigurationProperties
@EnableCaching
@Slf4j
public class SBApplication {
public static void main(String[] args) {
SpringApplication.run(SBApplication.class, args);
}
}
以及调用 Autowired 对象的 AppEnvironmentPostProcessor class。这个class配置为spring.factories中的org.springframework.boot.env.EnvironmentPostProcessor
。 class 在启动时被调用。
@Slf4j
public class AppEnvironmentPostProcessor implements
EnvironmentPostProcessor, Ordered {
@Autowired
KeysConfig keysConfig;
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment,
SpringApplication application) {
// keysConfig is null
String key = keysConfig.getSecretKeyMap().get("key12");
}
}
并且在 KeysConfig class
@Component
public final class KeysConfig {
public Map getSecretKeyMap() {
//Returns key map
}
}
我正在使用 Intellij Ultimate。我该如何调试和解决这个问题?
EnvironmentPostProcessor
s 是在创建应用程序上下文之前创建的,因此在依赖注入成为可能之前创建。这意味着 @Autowired
将不起作用。
您必须更新您的实现以创建 KeysConfig
本身的实例,或者使用模仿 KeysConfig
当前所做的任何事情的不同方法。