web-dev-qa-db-ja.com

サーブレットの<mvc:annotation-driven />と<context:annotation-config />の違いは何ですか?

Spring 2.5からSpring 3に移行しています。

彼らはいくつかの黒魔術を行う<mvc:annotation-driven />を導入しました。これは、サーブレット構成ファイルでのみ宣言されることが期待されています。

Spring 2.5では、<context:annotation-config /><context:component-scan base='...'/>タグを、application-context.xmlとディスパッチャサーブレット構成XMLの両方で、適切なベースパッケージを使用してスキャンするように宣言して使用しました。

だから、サーブレット構成のmvc:annotation-drivenタグとcontext:annotation-configタグの違いは何で、Spring 3の構成ファイルでは何を削除できるのでしょうか?

151
glaz666

<context:annotation-config>は、@Required@Autowired@PostConstructなどの一般的な注釈のサポートを宣言します。

<mvc:annotation-driven />は、アノテーション駆動型MVCコントローラーの明示的なサポートを宣言します(つまり、@RequestMapping@Controller、これらのサポートはデフォルトの動作ですが)とともに、@Validおよび@RequestBody/ResponseBodyによるマーシャリングによる宣言検証のサポートを追加します。

145
skaffman

Spring docs<mvc:annotation-driven />の使用に関する詳細もあります。簡単に言うと、<mvc:annotation-driven />を使用すると、Spring MVCの内部動作をより細かく制御できます。前述のドキュメントのセクションで説明されている1つ以上の機能が必要でない限り、使用する必要はありません。

また、他のSpringモジュールに追加機能を提供するために利用可能な他の「注釈駆動型」タグがあります。たとえば、<transaction:annotation-driven />は@Transactionアノテーションの使用を有効にし、@ Scheduledなどには<task:annotation-driven />が必要です。

36
seanhodges

mvc:annotation-drivenは、Spring 3.0で追加されたタグで、次のことを行います。

  1. Spring 3 Type ConversionServiceを構成します(PropertyEditorsの代替)
  2. @NumberFormatを使用して数値フィールドの書式設定のサポートを追加します
  3. Joda Timeがクラスパス上にある場合、@ DateTimeFormatで日付、カレンダー、およびJoda Timeフィールドのフォーマットのサポートを追加します
  4. JSR-303プロバイダーがクラスパスにある場合、@ Validで@Controller入力を検証するためのサポートを追加します
  5. JAXBがクラスパスにある場合、XMLの読み取りおよび書き込みのサポートのサポートを追加します(@ RequestBody/@ ResponseBodyを使用したHTTPメッセージ変換)
  6. Jacksonがクラスパスにない場合(#5と同じ行に沿って)、JSONの読み取りと書き込みのサポートを追加します。

context:annotation-config定義されている同じアプリケーションコンテキストでBeanの注釈を探し、@ Autowired、@ Resource、@ Required、@ PostConstructなどのすべての一般的な注釈のサポートを宣言します。

7