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 のメソッド内からメソッドを呼び出したりしても、もちろん問題ありません。ここでは、初期化コールバック (afterPropertiesSet()) は役に立たないと思います。

4

2 に答える 2

4

クラスに注釈を付けてから、静的変数を設定するための注釈付き@Componentの非静的セッターを追加できるはずです。@Autowired(required=true)

詳細については、こちらのリンクをご覧ください。

于 2010-11-22T16:35:37.853 に答える
4

他のBean にstatic依存することは、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 に答える