В чем разница между ‹mvc: annotation-driven /› и ‹context: annotation-config /› в сервлете?

Я перехожу со Spring 2.5 на Spring 3.

Они представили <mvc:annotation-driven />, который занимается черной магией. Ожидается, что это будет объявлено только в файле конфигурации сервлета.

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

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


person glaz666    schedule 20.10.2010    source источник


Ответы (3)


<context:annotation-config> заявляет о поддержке общих аннотаций, таких как @Required, @Autowired, @PostConstruct и т. Д.

<mvc:annotation-driven /> декларирует явную поддержку контроллеров MVC, управляемых аннотациями (т.е. @RequestMapping, @Controller, хотя поддержка для них является поведением по умолчанию), а также добавляет поддержку декларативной проверки с помощью @Valid и маршалинга тела сообщения с помощью _9 _ / _ 10_.

person skaffman    schedule 20.10.2010
comment
должен ли я объявлять context: annotation-config как в applicationContext, так и в сервлете, особенно если я использую разные базовые пакеты в теге component-scan? - person glaz666; 20.10.2010
comment
Да, вам понадобится <context:annotation-config> в каждом контексте. - person skaffman; 20.10.2010
comment
@skaffman: <mvc:annotation-driven> не бессмысленно, просто неправильно названо. Фактически он настраивает поддержку новых функций Spring MVC, таких как декларативная проверка с @Valid, преобразование HTTP-сообщений с _3 _ / _ 4_, новая архитектура преобразования полей и т. Д. - person axtavt; 20.10.2010
comment
@axtavt, поэтому я должен определить <mvc:annotation-driven />? - person Rihards; 01.04.2011
comment
@Richards: Обычно да, см. Блог . springsource.com/2009/12/21/ - person axtavt; 01.04.2011
comment
Этот ответ совершенно неверен, так как mvc: аннотации имеют решающее значение для преобразований и проверки. Единственно правильный и стоящий здесь комментарий - это комментарий от @axtavt. - person Konrad Garus; 20.07.2012
comment
Хороший вариант ответа, теперь я считаю это правильным. - person seanhodges; 29.05.2013
comment
без аннотации atRequestMapping atController будет найден, но atPathVariable не будет найден - person Junchen Liu; 28.12.2015

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

Кроме того, существуют другие теги, «управляемые аннотациями», которые обеспечивают дополнительную функциональность в других модулях Spring. Например, <transaction:annotation-driven /> позволяет использовать аннотацию @Transaction, <task:annotation-driven /> требуется для @Scheduled et al ...

person seanhodges    schedule 03.12.2012
comment
Хотелось бы увидеть в xml набор настроек, похожих на этот тег. Однажды я столкнулся с этим примером давным-давно, но он был неполным, AFAIR. - person glaz666; 04.12.2012

mvc: annotation-driven - это тег, добавленный в Spring 3.0, который выполняет следующие действия:

  1. Настраивает Spring 3 Type ConversionService (альтернатива PropertyEditors)
  2. Добавляет поддержку форматирования числовых полей с помощью @NumberFormat.
  3. Добавляет поддержку форматирования полей даты, календаря и времени Joda с помощью @DateTimeFormat, если время Joda находится в пути к классам.
  4. Добавляет поддержку проверки входных данных @Controller с помощью @Valid, если поставщик JSR-303 находится в пути к классам.
  5. Добавляет поддержку для чтения и записи XML, если JAXB находится в пути к классам (преобразование HTTP-сообщения с помощью @ RequestBody / @ ResponseBody)
  6. Добавляет поддержку чтения и записи JSON, если Джексон находится в пути к классам (в тех же строках, что и # 5)

context: annotation-config Ищет аннотации к bean-компонентам в том же контексте приложения, который он определен, и объявляет поддержку всех общих аннотаций, таких как @Autowired, @Resource, @Required, @PostConstruct и т. д.

person Praveen Kumar K S    schedule 09.10.2016
comment
Источник и дополнительные сведения о mvc: annotation-driver - spring.io/blog/2009/12/21/mvc-simplifications-in-spring-3-0 - person Aniket Thakur; 14.01.2017
comment
Итак, вы хотите сказать: «Если мне нужны @Autowired, @Resource, @Required, @PostConstruct И @RequestBody, @ResponseBody - все эти аннотации, тогда мне придется добавить оба этих тега mvc:annotation-driven context:annotation-config в мою конфигурацию?» - person R Dhaval; 23.10.2018