Sự khác biệt giữa <mvc: annotation-direction /> và <bối cảnh: annotation-config /> trong servlet là gì?


155

Tôi đang di chuyển từ Mùa xuân 2.5 sang Mùa xuân 3.

Họ đã giới thiệu <mvc:annotation-driven />một số ma thuật đen. Điều này dự kiến ​​sẽ chỉ được khai báo trong tệp cấu hình servlet.

Trong Spring 2.5, tôi vừa sử dụng <context:annotation-config /><context:component-scan base='...'/>các thẻ được khai báo cả application-context.xmlXML và cấu hình servlet XML với các gói cơ sở phù hợp để quét.

Vì vậy, tôi tự hỏi sự khác biệt giữa mvc:annotation-drivencontext:annotation-configcác thẻ trong cấu hình servlet và những gì tôi có thể loại bỏ trong các tệp cấu hình Spring 3?

Câu trả lời:


150

<context:annotation-config>tuyên bố hỗ trợ cho các chú thích chung như @Required, @Autowired, @PostConstruct, và vân vân.

<mvc:annotation-driven />tuyên bố hỗ trợ rõ ràng cho các bộ điều khiển MVC dựa trên chú thích (nghĩa là @RequestMapping, @Controllermặc dù hỗ trợ cho các bộ điều khiển đó là hành vi mặc định), cũng như thêm hỗ trợ cho xác thực khai báo thông qua @Validvà sắp xếp nội dung thư với @RequestBody/ ResponseBody.


3
Tôi có nên khai báo ngữ cảnh: annotation-config trong cả applicationContext và servlet, đặc biệt nếu tôi sử dụng các gói cơ sở khác nhau trong thẻ quét thành phần?
glaz666

2
Có, bạn sẽ cần <context:annotation-config>trong từng bối cảnh.
skaffman

61
@skaffman: <mvc:annotation-driven>không phải là vô nghĩa, nó chỉ được đặt tên không đúng. Trên thực tế, nó định cấu hình hỗ trợ cho các tính năng Spring MVC mới như xác thực khai báo với @Valid, chuyển đổi thông báo HTTP với @RequestBody/ @ResponseBody, kiến ​​trúc chuyển đổi trường mới, v.v.
axtavt

5
@Richards: Thường thì có, xem blog.springsource.com/2009/12/21/ từ
axtavt

7
Câu trả lời này hoàn toàn sai, vì mvc: hướng chú thích là rất quan trọng cho chuyển đổi và xác nhận. Điều duy nhất đúng và đáng giá ở đây là nhận xét từ @axtavt.
Konrad Garus

36

Ngoài ra còn có một số chi tiết hơn về việc sử dụng <mvc:annotation-driven />trong các tài liệu mùa xuân . Tóm lại, <mvc:annotation-driven />cung cấp cho bạn quyền kiểm soát lớn hơn đối với hoạt động bên trong của Spring MVC. Bạn không cần sử dụng nó trừ khi bạn cần một hoặc nhiều tính năng được nêu trong phần nói trên của tài liệu.

Ngoài ra, có các thẻ "điều khiển chú thích" khác có sẵn để cung cấp chức năng bổ sung trong các mô-đun Spring khác. Ví dụ: <transaction:annotation-driven />cho phép sử dụng chú thích @Transaction, <task:annotation-driven />được yêu cầu cho @Schediated et al ...


Tôi muốn xem một bộ cài đặt trong xml tương tự như thẻ này. Một khi tôi đã bắt gặp ví dụ đó từ lâu nhưng nó chưa hoàn chỉnh, AFAIR.
glaz666

7

mvc: chú thích điều khiển là một thẻ được thêm vào trong Spring 3.0, thực hiện như sau:

  1. Định cấu hình Dịch vụ chuyển đổi loại 3 mùa xuân (thay thế cho Trình chỉnh sửa thuộc tính)
  2. Thêm hỗ trợ để định dạng các trường Số với @NumberFormat
  3. Thêm hỗ trợ để định dạng các trường Ngày, Lịch và Thời gian Joda với @DateTimeFormat, nếu Joda Time nằm trên đường dẫn lớp
  4. Thêm hỗ trợ để xác thực các đầu vào @Controll bằng @Valid, nếu Nhà cung cấp JSR-303 nằm trên đường dẫn lớp
  5. Thêm hỗ trợ để hỗ trợ đọc và viết XML, nếu JAXB nằm trên đường dẫn lớp (chuyển đổi thông báo HTTP với @ RequestBody / @ FeedbackBody)
  6. Thêm hỗ trợ cho việc đọc và viết JSON, nếu Jackson nằm trên đường dẫn lớp (cùng dòng với # 5)

bối cảnh: annotation-config Tìm kiếm các chú thích trên các bean trong cùng một bối cảnh ứng dụng, nó được xác định và tuyên bố hỗ trợ cho tất cả các chú thích chung như @Autowired, @Resource, @Required, @PostConstruct, v.v.


2
Nguồn và thông tin chi tiết về mvc: chú thích-trình điều khiển - spring.io/blog/2009/12/21/mvc-simplutions-in-spring-3-0
Aniket Thakur

Vì vậy, bạn có nghĩa là, nếu tôi cần @Autowired, @Resource, @Required, @PostConstruct@RequestBody, @ResponseBody- tất cả các chú thích này thì tôi sẽ phải thêm cả hai mvc:annotation-driven context:annotation-configthẻ này trong cấu hình của mình?
R Dhaval
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.