3

Java (Spring 3.1) で @Required アノテーションを有効にする方法は? xml ではなく、Java 経由で。また、どの注釈の下にこれを有効にしますか? @Feature の下 (@FutureConfiguration 内または @Bean (@Configuration 内) ?

編集:

    @Feature
    public MvcAnnotationDriven annotationDriven(ConversionService conversionService) {
        return new MvcAnnotationDriven().conversionService(conversionService)
                .argumentResolvers(new CustomArgumentResolver());
    }

これはすべての注釈を有効にしますか?

4

3 に答える 3

5

@anubhavaの答えは機能しますが、彼は5年前のSpring 2.0マニュアルを参照しています。

XML 構成では、Spring 3.x にはより洗練されたアプローチがあります: <context:annotation-config/>. これにより、おそらく必要になると思われる他の機能もすべて有効になりましたが、有効になったのRequiredAnnotationBeanPostProcessorはごく一部だけです。

Spring 3.x のマニュアルを参照してください。

@Bean-style configを使用している場合、 のような注釈は既に有効になっている@Requiredはずです。ただし、これはバグである可能性があります。Spring 3.1 はまだ初期ベータ版であり、その大きな部分が壊れている可能性があります。@Bean

自分が何をしているのか本当によくわかっていない限り、3.0.x に固執することを強くお勧めします。

于 2011-03-22T08:36:16.887 に答える
2

のマニュアルから:

この動作を実際に「オンにする」ために必要な、Spring 構成の最後の小さな (小さな、小さな) ピースが 1 つあります。クラスの「セッター」プロパティに注釈を付けるだけでは、この動作を得るには十分ではありません。@Required アノテーションを認識し、適切に処理できるコンポーネントを有効にする必要があります。

このコンポーネントは RequiredAnnotationBeanPostProcessor クラスです。これは、@Required に対応する特別な BeanPostProcessor 実装であり、実際に「この必須プロパティが設定されていない場合に失敗する」ロジックを提供します。構成は非常に簡単です。次の Bean 定義を Spring XML 構成にドロップするだけです。

<bean class=
"org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>

確認してください: http://static.springsource.org/spring/docs/2.0.x/reference/metadata.html

于 2011-03-22T04:02:28.140 に答える
0

XML を使用AnnotationConfigApplicationContextしたくない場合に使用します。

アノテーション付きクラスを入力として受け入れるスタンドアロン アプリケーション コンテキスト - 特に アノテーション付きクラス@Configurationだけでなく、javax.inject アノテーションを使用するプレーンな@Components JSR-330 準拠クラスも受け入れます。クラスを 1 つずつ登録する ( register(java.lang.Class...)) だけでなく、クラスパスをスキャンする ( scan(java.lang.String...)) こともできます。

複数の構成クラスの場合、後のクラスで定義された Bean メソッドは、前のクラスで定義されたものをオーバーライドします。これを利用して、追加の構成クラスを介して特定の Bean 定義を意図的にオーバーライドできます。

サンプルコード:

ConfigurableApplicationContext applicationContext =
new AnnotationConfigApplicationContext(
    "com.mycompany.package1",
    "com.mycompany.package2",
    "com.mycompany.package3"
    // etc.
);
applicationContext.refresh();
于 2011-03-22T09:06:05.930 に答える