Apa perbedaan antara <mvc: annotation-driven /> dan <context: annotation-config /> dalam servlet?

155

Saya bermigrasi dari Spring 2.5 ke Spring 3.

Mereka telah memperkenalkan <mvc:annotation-driven />yang melakukan sihir hitam. Ini diharapkan dideklarasikan hanya dalam file konfigurasi servlet.

Di Spring 2.5 saya baru saja menggunakan <context:annotation-config />dan <context:component-scan base='...'/>tag mendeklarasikan application-context.xmlXML konfigurasi servlet dan dispatcher dengan paket basis yang sesuai untuk dipindai.

Jadi saya bertanya-tanya apa perbedaan antara mvc:annotation-drivendan context:annotation-configtag dalam konfigurasi servlet dan apa yang bisa saya hilangkan dalam file konfigurasi Spring 3?

glaz666
sumber

Jawaban:

150

<context:annotation-config>menyatakan dukungan untuk penjelasan umum seperti @Required, @Autowired, @PostConstruct, dan sebagainya.

<mvc:annotation-driven />mendeklarasikan dukungan eksplisit untuk pengontrol MVC anotasi yang digerakkan (yaitu @RequestMapping, @Controllermeskipun dukungan untuk itu adalah perilaku default), serta menambahkan dukungan untuk validasi deklaratif via @Validdan marshalling badan pesan dengan @RequestBody/ ResponseBody.

skaffman
sumber
3
haruskah saya menyatakan konteks: annotation-config di kedua applicationContext dan servlet, terutama jika saya menggunakan paket dasar yang berbeda dalam tag pemindaian komponen?
glaz666
2
Ya, Anda perlu <context:annotation-config>di setiap konteks.
skaffman
61
@skaffman: <mvc:annotation-driven>tidak ada gunanya, hanya saja namanya tidak benar. Sebenarnya itu mengkonfigurasi dukungan untuk fitur Spring MVC baru seperti validasi deklaratif dengan @Valid, konversi pesan HTTP dengan @RequestBody/ @ResponseBody, arsitektur konversi bidang baru, dll.
axtavt
5
@Richards: Biasanya ya, lihat blog.springsource.com/2009/12/21/…
axtavt
7
Jawaban ini jelas salah, karena mvc: annotation-driven sangat penting untuk konversi dan validasi. Satu-satunya hal yang benar dan bermanfaat di sini adalah komentar dari @axtavt.
Konrad Garus
36

Ada juga beberapa detail lebih lanjut tentang penggunaan <mvc:annotation-driven />dalam dokumen Spring . Singkatnya, <mvc:annotation-driven />memberi Anda kontrol lebih besar atas cara kerja Spring MVC. Anda tidak perlu menggunakannya kecuali Anda membutuhkan satu atau lebih fitur yang diuraikan dalam bagian dokumen yang disebutkan di atas.

Juga, ada tag "didorong anotasi" lainnya yang tersedia untuk memberikan fungsionalitas tambahan dalam modul Musim Semi lainnya. Misalnya, <transaction:annotation-driven />mengaktifkan penggunaan anotasi <task:annotation-driven />@Transaction , diperlukan untuk @ Terjadwal d ...

seanhodges
sumber
Saya ingin melihat satu set pengaturan dalam xml yang mirip dengan tag ini. Saya pernah menemukan contoh itu sejak lama tapi itu tidak lengkap, AFAIR.
glaz666
7

mvc: annotation-driven adalah tag yang ditambahkan di Spring 3.0 yang melakukan hal berikut:

  1. Mengkonfigurasi Layanan Konversi Jenis Spring 3 (alternatif untuk PropertyEditors)
  2. Menambahkan dukungan untuk memformat bidang Angka dengan @NumberFormat
  3. Menambahkan dukungan untuk memformat bidang Date, Calendar, dan Joda Time dengan @DateTimeFormat, jika Joda Time ada di classpath
  4. Menambahkan dukungan untuk memvalidasi input @Controller dengan @Valid, jika penyedia JSR-303 ada di classpath
  5. Menambahkan dukungan untuk dukungan untuk membaca dan menulis XML, jika JAXB ada di classpath (Konversi pesan HTTP dengan @ RequestBody / @ ResponseBody)
  6. Menambahkan dukungan untuk membaca dan menulis JSON, jika Jackson ada di jalur kelas (sepanjang baris yang sama dengan # 5)

konteks: annotation-config Mencari anotasi pada kacang-kacangan dalam konteks aplikasi yang sama seperti yang didefinisikan dan menyatakan dukungan untuk semua anotasi umum seperti @Autowired, @Resource, @Required, @PostConstruct dll.

Praveen Kumar KS
sumber
2
Sumber dan detail lebih lanjut tentang MVC: annotation-driver - spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Aniket Thakur
Jadi Anda bermaksud mengatakan, Jika saya perlu @Autowired, @Resource, @Required, @PostConstruct DAN @RequestBody, @ResponseBody- semua penjelasan ini maka saya harus menambahkan kedua mvc:annotation-driven context:annotation-configtag ini di konfigurasi saya?
R Dhaval