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

Ris*_*ran 8 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我没看错,那是因为静态块先被加载。我有什么办法可以不用创建带有new关键字的对象就可以完成这项工作?

ger*_*s.b 5

static总是在弹簧注入之前对块进行处理。如@TheLostMind所建议,“在其中使用@PostConstruct并放置您的代码”。如果要避免这种情况new,可以factory-method在Xml文件中使用spring 。


The*_*ind 5

加载类后,将在初始化类时调用静态块。您组件的依赖项尚未初始化。这就是为什么您得到NullPointerException(您的依赖项为null)的原因。

将您的代码移动到带有注释的方法@PostConstruct。这将确保您的代码在组件的所有依赖项都初始化时运行