我正在使用 spring Autowiring 一个对象,并且正在使用相同的 Autowiring 对象调用一个方法。它正在抛出 NullPointerException。问题是我在静态 block 中调用方法。下面是我的代码-
@Autowired
static MyPropertyManagerClass myPropertyManagerClass;
private static URL SERVICE_URL = null;
static {
try {
SERVICE_URL = myPropertyManagerClass.getServiceURL();
}
catch (Exception e) {
log.error("Exception Occurred While Invoking myPropertyManagerClass.getServiceURL() : " , e);
}
}
如果我没记错的话,这是因为首先加载了静态 block 。有什么方法可以在不使用 new 关键字创建对象的情况下完成这项工作吗?
最佳答案
static blocks 在类被加载后初始化时被调用。您的组件 的依赖项尚未初始化。这就是为什么您会收到 NullPointerException
(您的依赖项为空)。
将您的代码移动到使用 @PostConstruct
注释的方法。这将确保您的代码在组件的所有依赖项都已初始化时运行
关于java - 哪个先加载?静态 block 还是 spring bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46538728/