3

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

4

2 回答 2

4

您应该能够使用注释标记类@Component,然后添加带有注释的非静态设置器@Autowired(required=true)来设置静态变量。

这是更多信息的链接。

于 2010-11-22T16:35:37.853 回答
4

依赖static其他 bean 不是 Spring 方式。

但是,如果你想保留它static,你可以懒惰地初始化它——在这种情况下depends-on可以强制执行正确的初始化顺序。

编辑:通过延迟加载我的意思是这样的(我在这里使用带有持有者类习惯用法的延迟初始化,可以使用其他延迟初始化习惯用法):

private static class ExceptionMappingHolder {
    private static final Map<String, String> exceptionMapping = 
        ErrorExceptionMapping.getExceptionMapping(); 
}

并使用ExceptionMappingHolder.exceptionMapping而不是exceptionMapping.

于 2010-11-22T16:41:27.570 回答