嘿 如何在Spring中处理静态初始化?我的意思是,我的bean有一个静态初始化
private static final Map<String, String> exceptionMapping = ErrorExceptionMapping.getExceptionMapping();
我需要注意之前加载ErrorExceptionMapping。我试过这个:
<bean id="errorExceptionMapping" class="cz.instance.transl.util.ErrorExceptionMapping" />
<bean id="validateService" class="cz.instance.transl.services.ValidateService" depends-on="errorExceptionMapping" >
但我得到了
java.lang.NoClassDefFoundError: Could not initialize class cz.instance.transl.util.ErrorExceptionMapping
如果我省略静态初始化或从bean的方法中调用方法,它当然很好。我想初始化回调(affterPropertiesSet())在这里没有帮助。
答案 0 :(得分:4)
对其他bean有static
依赖关系不是Spring方式。
但是,如果你想保留它static
,你可以懒惰地初始化它 - 在这种情况下depends-on
可以强制执行正确的初始化顺序。
编辑:通过延迟加载我的意思是这样的(我在这里使用持有者类习惯用懒惰初始化,可以使用其他懒惰的初始化习语):
private static class ExceptionMappingHolder {
private static final Map<String, String> exceptionMapping =
ErrorExceptionMapping.getExceptionMapping();
}
并使用ExceptionMappingHolder.exceptionMapping
代替exceptionMapping
。
答案 1 :(得分:3)
您应该能够使用@Component
注释标记该类,然后添加一个带有@Autowired(required=true)
注释的非静态setter来设置静态变量。
Here's a link了解更多信息。