首先加载哪一个?静态块还是春豆?

时间:2017-10-03 06:54:11

标签: java spring static

我正在使用spring自动装配一个对象,我正在调用一个使用相同自动对象的方法。它抛出NullPointerException。问题是我在静态块中调用方法。以下是我的代码 -

@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);
    }
}

如果我没有错,就会发生这种情况,因为静态块首先被加载。有没有什么方法可以在不创建带有新关键字的对象的情况下完成这项工作?

3 个答案:

答案 0 :(得分:5)

弹簧注射前始终会处理

static块。正如@TheLostMind所建议的,“使用@PostConstruct并将代码放在那里”。 如果您想避开new,可以在Xml文件中使用spring factory-method

答案 1 :(得分:4)

在加载后,在初始化类时调用

静态块组件的依赖关系尚未初始化。这就是为什么你得到一个NullPointerException(你的依赖是空的)。

将代码移至使用@PostConstruct注释的方法。这将确保在初始化组件的所有依赖项时运行代码

答案 2 :(得分:2)

静态将是第一位的。 在BeanPostProcessor初始化级别之后初始化Spring bean。