java - 哪个先加载?静态 block 还是 spring bean?

标签 java spring static

我正在使用 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/

相关文章:

java - Spring 要求@Transactional 提供getter 服务?

java - 使用反射设置私有(private)字段适用于静态或最终,但不适用于静态最终(组合)

c++ - 来自另一个类的 switch 语句中的 static const int 导致错误 C2051 : case expression not constant

时间:: console application - static methods

java - 云托管与托管托管

spring - 如何减少使用多层架构实现的服务中的冗余,同时保持整个系统的一致性?

java - 使用 spring 和 mongodb 根据我的查询获取文档列表

java - Android 获取 url,需要登录

java - 无法读取 Maven 项目中的 Artifact 描述符

java - 从其他类获取 spinner 值并将其分配给 editText