代码之家  ›  专栏  ›  技术社区  ›  lisak

bean的Spring静态初始化

  •  1
  • lisak  · 技术社区  · 14 年前

    嘿, 在Spring中应该如何处理静态初始化?我是说,我的bean有一个静态初始化

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

    我需要注意之前加载了errorexceptionapping。我试过这个:

    <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的方法中调用了该方法,当然可以。我想初始化回调(afferrpropertiesset())在这里没有帮助。

    2 回复  |  直到 14 年前
        1
  •  4
  •   axtavt    14 年前

    static 对其他bean的依赖不是一种Spring方式。

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

    编辑: 所谓延迟加载,我的意思是这样的(我在这里使用holder类的lazy initialization习惯用法,也可以使用其他的lazy initialization习惯用法):

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

    使用 ExceptionMappingHolder.exceptionMapping 而不是 exceptionMapping .

        2
  •  3
  •   dcp    14 年前

    你应该可以用 @Component 注释,然后添加一个非静态setter @Autowired(required=true) 用于设置静态变量的注释。

    Here's a link 更多信息。

    推荐文章