質問
Javaで@required Annotationを有効にする方法(スプリング3.1)? XMLではなく、Javaを通して。また、どの注釈の下で私はこれを可能にしましたか? @feature(@futureconfigurationまたは@bean(@configuration)?
編集:
@Feature
public MvcAnnotationDriven annotationDriven(ConversionService conversionService) {
return new MvcAnnotationDriven().conversionService(conversionService)
.argumentResolvers(new CustomArgumentResolver());
}
これにより、すべての注釈が可能になりますか?
解決
@Anubhavaの回答は機能しますが、彼は5歳のSpring 2.0マニュアルを参照しています。
XML Configでは、Spring 3.Xにはよりエレガントなアプローチがあります。 <context:annotation-config/>
. 。これにより、おそらくあなたが望む他の機能の束も可能になりましたが、 RequiredAnnotationBeanPostProcessor
いくつかを有効にします。
見る スプリング3.xマニュアル.
使用している場合 @Bean
-Style Config、次に注釈のような @Required
したほうがいい すでに その方法だからです @Bean
作品。ただし、これはバグである可能性があります - スプリング3.1はまだ初期のベータ版であり、その大きなチャンクは壊れる可能性があります。
あなたが何をしているのか本当にわからない限り、私は3.0.xに固執することを強くお勧めします。
他のヒント
から スプリングマニュアル:
この動作を実際に「切り替える」ために必要な、最後の小さな(小さく、小さな)スプリング構成が1つあります。クラスの「セッター」プロパティに単純に注釈を付けるだけでは、この動作を得るには十分ではありません。 @requiredアノテーションを認識し、適切に処理できるコンポーネントを有効にする必要があります。
このコンポーネントは、AnnotationBeanPostProcessorクラスを必要としています。これは、 @expern-Awareであり、実際に「必要なプロパティが設定されていない場合は爆破」を提供する特別なBeanPostProcessorの実装です。構成は非常に簡単です。次のBean定義をSpring XML構成にドロップするだけです。
<bean class=
"org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor"/>
チェックしてください: http://static.springsource.org/spring/docs/2.0.x/reference/metadata.html
使用する AnnotationConfigApplicationContext
XMLを使用したくない場合:
スタンドアロンアプリケーションのコンテキスト、注釈付きクラスを入力として受け入れる - 特に -
@Configuration
- 認定クラスだけでなく、単純なクラスもあります@Components
javax.injectアノテーションを使用したJSR-330準拠クラス。クラスを1つずつ登録できます(register(java.lang.Class...)
)ClassPathスキャン(scan(java.lang.String...)
).複数の構成クラスの場合、後のクラスで定義されているBeanメソッドは、以前のクラスで定義されたクラスをオーバーライドします。これを活用して、追加の構成クラスを介して特定のBeanの定義を意図的にオーバーライドすることができます。
サンプルコード:
ConfigurableApplicationContext applicationContext =
new AnnotationConfigApplicationContext(
"com.mycompany.package1",
"com.mycompany.package2",
"com.mycompany.package3"
// etc.
);
applicationContext.refresh();