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


155

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

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

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

では、サーブレット構成のタグmvc:annotation-drivencontext:annotation-configタグの違いは何ですか?また、Spring 3構成ファイルで何を排除できるのでしょうか?

回答:


150

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

<mvc:annotation-driven />アノテーションドリブンMVCコントローラーの明示的なサポートを宣言します(つまり@RequestMapping@Controllerこれらのサポートはデフォルトの動作です)。また@Valid@RequestBody/ を使用したメッセージ本文のマーシャリングによる宣言的な検証のサポートを追加しますResponseBody


3
特にコンポーネントスキャンタグで異なるベースパッケージを使用する場合は、applicationContextとサーブレットの両方でcontext:annotation-configを宣言する必要がありますか?
glaz666

2
はい、<context:annotation-config>それぞれの状況で必要になります。
skaffman

61
@skaffman:それ<mvc:annotation-driven>は無意味ではありません、それは単に不適切に命名されています。実際には、新しい春MVCのための支持体は、と宣言的な検証などの機能構成@Validを有するHTTPメッセージ変換@RequestBody/ @ResponseBody、新しいフィールド変換等アーキテクチャ、
axtavt


7
mvc:annotation-drivenは変換と検証に不可欠であるため、この答えは間違いです。ここで正しい、価値のある唯一のものは@axtavtからのコメントです。
Konrad Garus

36

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

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


このタグに似た一連の設定をxmlで確認したいのですが。ずっと前にその例に出くわしたが、それは不完全だった、AFAIR。
glaz666

7

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がクラスパス上にある場合、JSONの読み取りと書き込みのサポートを追加します(#5と同じ行に沿って)

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


2
mvc:annotation-driverのソースと詳細-spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Aniket Thakur

あなたが言うことを意味して私が必要な場合は、@Autowired, @Resource, @Required, @PostConstruct AND @RequestBody, @ResponseBody-すべてのこれらのアノテーションを、私はこれらの両方を追加する必要がありますmvc:annotation-driven context:annotation-config私の設定でタグを?
R Dhaval 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.