Яка різниця між <mvc: annotation-driven /> та <context: annotation-config /> у сервлеті?


155

Я переїжджаю з весни 2,5 до весни 3.

Вони ввели, <mvc:annotation-driven />що робить якусь чорну магію. Очікується, що це буде оголошено лише у файлі конфігурації сервлетів.

Навесні 2.5 я щойно використовував <context:annotation-config />і <context:component-scan base='...'/>теги, декларовані як у application-context.xmlконфігурації сервера, так і в диспетчерському сервлеті XML, з відповідними базовими пакетами для сканування.

Тож мені цікаво, в чому різниця між mvc:annotation-drivenта context:annotation-configтегами у серфлет-конфігурації та чим я можу усунути файли конфігурації Spring 3?

Відповіді:


150

<context:annotation-config>оголошує підтримку загальних анотацій , таких як @Required, @Autowired, @PostConstruct, і так далі.

<mvc:annotation-driven />декларує явну підтримку контролерів MVC, керованих анотаціями (тобто @RequestMapping, @Controllerхоча підтримка для них є поведінкою за замовчуванням), а також додає підтримку декларативної перевірки за допомогою @Validтестового повідомлення та розподілу з @RequestBody/ ResponseBody.


3
чи слід оголосити контекст: annotation-config і в applicationContext, і в сервлеті, особливо якщо я використовую різні базові пакети в тезі сканування компонентів?
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.
Конрад Гарус

36

Також є детальніше про використання <mvc:annotation-driven />у весняних документах . Коротше кажучи, <mvc:annotation-driven />дає вам більший контроль над внутрішніми функціями Spring MVC. Вам не потрібно використовувати його, якщо вам не потрібна одна чи кілька функцій, викладених у вищезгаданому розділі Документів.

Також доступні інші теги "на основі анотацій", які надають додаткову функціональність в інших модулях Spring. Наприклад, <transaction:annotation-driven />дозволяє використовувати анотацію @Transaction, <task:annotation-driven />необхідну для @Scheduled et al ...


Я хотів би побачити набір налаштувань у xml, схожий на цей тег. Одного разу я давно зіткнувся з цим прикладом, але він був неповним, AFAIR.
glaz666

7

mvc: анотація - тег, доданий у Spring 3.0, який робить наступне:

  1. Налаштування служби Spring Conversion 3 типу (альтернатива PropertyEditors)
  2. Додає підтримку для форматування полів з номером за допомогою @NumberFormat
  3. Додає підтримку форматування полів дати, календаря та часу Joda за допомогою @DateTimeFormat, якщо Joda Time на класі
  4. Додає підтримку валідації входів @Controller за допомогою @Valid, якщо постачальник JSR-303 знаходиться на класі
  5. Додає підтримку для читання та запису XML, якщо JAXB перебуває на класі (шлях перетворення HTTP за допомогою @ RequestBody / @ ResponseBody)
  6. Додає підтримку читання та письма JSON, якщо Джексон стоїть на класі (за тими ж лініями, що і №5)

контекст: annotation-config Шукає анотації на бобах у тому ж контексті програми, він визначений та оголошує підтримку всіх загальних приміток, таких як @Autowired, @Resource, @Required, @PostConstruct тощо тощо.


2
Джерело та додаткові відомості про mvc: annotation-driver - spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0
Thakur

Отже, ви хочете сказати: Якщо мені потрібно @Autowired, @Resource, @Required, @PostConstruct І @RequestBody, @ResponseBody- всі ці анотації, тоді мені доведеться додати обидва ці mvc:annotation-driven context:annotation-configтеги до мого конфігурації?
R Dhaval
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.