<mvc: annotation-driven /> และ <context: annotation-config /> ใน servlet แตกต่างกันอย่างไร


155

ฉันกำลังย้ายจาก Spring 2.5 เป็น Spring 3

พวกเขาได้แนะนำ<mvc:annotation-driven />เวทมนตร์ดำ สิ่งนี้คาดว่าจะถูกประกาศในไฟล์การกำหนดค่า servlet เท่านั้น

ในฤดูใบไม้ผลิ 2.5 ฉันเพิ่งใช้<context:annotation-config />และ<context:component-scan base='...'/>แท็กประกาศทั้งในapplication-context.xmlและกำหนดค่า servlet XML XML กับแพคเกจฐานที่เหมาะสมในการสแกน

ดังนั้นฉันสงสัยว่าความแตกต่างระหว่างmvc:annotation-drivenและcontext:annotation-configแท็กในการกำหนดค่า servlet และสิ่งที่ฉันสามารถกำจัดในไฟล์กำหนดค่า Spring 3 คืออะไร?

คำตอบ:


150

<context:annotation-config>ประกาศการสนับสนุนสำหรับคำอธิบายประกอบทั่วไปเช่น@Required, @Autowired, @PostConstructและอื่น ๆ

<mvc:annotation-driven />ประกาศการสนับสนุนที่ชัดเจนสำหรับคำอธิบายประกอบที่ขับเคลื่อนด้วยตัวควบคุม MVC (เช่น@RequestMapping, @Controllerแม้ว่าการสนับสนุนสำหรับผู้ที่เป็นพฤติกรรมเริ่มต้น) เช่นเดียวกับการเพิ่มการสนับสนุนสำหรับการตรวจสอบที่เปิดเผยผ่าน@Validและนายอำเภอเนื้อหาของข้อความด้วย/@RequestBodyResponseBody


3
ฉันควรประกาศบริบท: annotation-config ใน applicationContext และ servlet โดยเฉพาะอย่างยิ่งถ้าฉันใช้แพ็คเกจพื้นฐานที่แตกต่างกันในแท็กคอมโพเนนต์สแกน?
glaz666

2
ใช่คุณต้องมี<context:annotation-config>ในแต่ละบริบท
skaffman

61
@skaffman: <mvc:annotation-driven>ไม่มีจุดหมายมันแค่ตั้งชื่อไม่ถูกต้อง จริง ๆ แล้วมันกำหนดค่าการสนับสนุนสำหรับคุณสมบัติ Spring MVC ใหม่เช่นการตรวจสอบการประกาศด้วย@Valid, การแปลงข้อความ HTTP ด้วย@RequestBody/ @ResponseBody, สถาปัตยกรรมการแปลงภาคสนามใหม่เป็นต้น
axtavt

5
@Richards: โดยปกติใช่ดูblog.springsource.com/2009/12/21/…
axtavt

7
คำตอบนี้ผิดธรรมดาเนื่องจาก mvc: การเพิ่มความคิดเห็นเป็นสิ่งสำคัญสำหรับการแปลงและการตรวจสอบความถูกต้อง สิ่งเดียวที่ถูกต้องและคุ้มค่าที่นี่คือความคิดเห็นจาก @axtavt
Konrad Garus

36

นอกจากนี้ยังมีบางรายละเอียดเพิ่มเติมเกี่ยวกับการใช้<mvc:annotation-driven />ในเอกสารฤดูใบไม้ผลิ สรุป<mvc:annotation-driven />ให้คุณควบคุมงานภายในของ Spring MVC ได้ดียิ่งขึ้น คุณไม่จำเป็นต้องใช้มันหากคุณไม่ต้องการคุณสมบัติอย่างน้อยหนึ่งอย่างที่ระบุไว้ในส่วนดังกล่าวของเอกสาร

นอกจากนี้ยังมีแท็ก "การเพิ่มความคิดเห็นที่ขับเคลื่อนด้วยคำอธิบายประกอบ" อื่น ๆ เพื่อให้มีฟังก์ชันเพิ่มเติมในโมดูลสปริงอื่น ๆ ตัวอย่างเช่น<transaction:annotation-driven />เปิดใช้งานการใช้คำอธิบายประกอบ @Transaction <task:annotation-driven />เป็นสิ่งจำเป็นสำหรับ @Scheduled et al ...


ฉันต้องการดูชุดการตั้งค่าใน xml ซึ่งคล้ายกับแท็กนี้ เมื่อฉันได้เจอกับตัวอย่างนานมาแล้ว แต่มันไม่สมบูรณ์ AFAIR
glaz666

7

mvc: ขับเคลื่อนด้วยคำอธิบายประกอบเป็นแท็กที่เพิ่มใน Spring 3.0 ซึ่งทำสิ่งต่อไปนี้:

  1. กำหนดค่า Spring 3 Type ConversionService (ทางเลือกกับ PropertyEditors)
  2. เพิ่มการรองรับการจัดรูปแบบเขตข้อมูลตัวเลขด้วย @NumberFormat
  3. เพิ่มการรองรับสำหรับการจัดรูปแบบฟิลด์วันที่ปฏิทินและ Joda Time ด้วย @DateTimeFormat หาก Joda Time อยู่ใน classpath
  4. เพิ่มการสนับสนุนสำหรับการตรวจสอบความถูกต้องอินพุต @Controller ด้วย @Valid หากผู้ให้บริการ JSR-303 อยู่ใน classpath
  5. เพิ่มการสนับสนุนสำหรับการสนับสนุนการอ่านและการเขียน XML หาก JAXB อยู่ใน classpath (การแปลงข้อความ HTTP ด้วย @ RequestBody / @ ResponseBody)
  6. เพิ่มการสนับสนุนสำหรับการอ่านและการเขียน JSON ถ้า Jackson อยู่ใน classpath (ตามบรรทัดเดียวกันกับ # 5)

บริบท: annotation-config ค้นหา คำอธิบายประกอบบน beans ในบริบทของแอปพลิเคชันเดียวกันซึ่งกำหนดไว้และประกาศการสนับสนุนคำอธิบายประกอบทั่วไปทั้งหมดเช่น @Autowired, @Resource, @Required, @PostConstruct เป็นต้นเป็นต้น


2
แหล่งที่มาและรายละเอียดเพิ่มเติมเกี่ยวกับ mvc: คำอธิบายประกอบ - ไดรเวอร์ - spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Aniket Thakur

ดังนั้นคุณหมายถึงว่าถ้าฉันต้องการ@Autowired, @Resource, @Required, @PostConstruct และ @RequestBody, @ResponseBody- คำอธิบายประกอบทั้งหมดเหล่านี้ฉันจะต้องเพิ่มmvc:annotation-driven context:annotation-configแท็กทั้งสองนี้ในการกำหนดค่าของฉัน
R Dhaval
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.