Spring的静态初始化bean

时间:2010-11-22 16:31:14

标签: spring static static-initialization

嘿 如何在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())在这里没有帮助。

2 个答案:

答案 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了解更多信息。