В этом выпуске Enterprise Spring Best Practices давайте рассмотрим аннотации. Несколько аннотаций стали доступны весной 2.5. В Spring 3.0 добавлены удобные механизмы обнаружения аннотаций, которые мы увидим здесь.
Доступны аннотации для внедрения зависимостей, обнаружения и создания объектов Bean, постобработки (обязательные поля, метод инициализации и т. Д.).
Аннотации могут или не могут быть обнаружены в интерфейсах Java, обратитесь к документации или JavaDoc за подробностями о том, будет ли механизм обнаружения аннотаций перемещаться вверх в иерархии классов.
Разделы
- Решение по стилю аннотации
- Обнаружение аннотации из XML
- Сканирование компонентов приложения
- MVC компонент сканирования
- Рекомендации по сканированию компонентов
- Дальнейшее чтение
- Социальный Я
Решение по стилю аннотации
Аннотации помогают упростить настройку. Все аннотации в Java 5 и выше требуют некоторого механизма обнаружения.
В Spring у нас есть 3 стратегии для обнаружения бинов и внедрения зависимостей
- Открытие на основе XML
- JavaConfig
- Гибридная конфигурация
Гибридная конфигурация — это просто смешивание стандартных <bean/>
объявлений XML с методами аннотации, которые обсуждаются ниже. В следующем блоге я расскажу о JavaConfig, поэтому сейчас давайте сосредоточимся на обнаружении аннотаций на основе XML.
Обнаружение аннотации из XML
Все аннотации требуют директивы обнаружения. Мы ДОЛЖНЫ знать, какие директивы XML обнаруживают определенные аннотации, иначе компоненты не будут обработаны.
Подробнее об обнаружении аннотаций в Spring см.
Справочник по аннотациям для проектов Spring.
Вариант 1 — Регистрация отдельных постпроцессоров бина
Существует несколько отдельных постпроцессоров Bean, которые можно зарегистрировать для обнаружения определенных категорий аннотаций
- RequiredAnnotationBeanPostProcessor — (
@Required
) - CommonAnnotationBeanPostProcessor — (
@PostConstruct, @PreDestroy, @Resource
и т. Д.) - AutowiredAnnotationBeanPostProcessor — (
@Autowired, @Value, @Inject
и т. Д.) - PersistenceAnnotationBeanPostProcessor — (
@PersistenceUnit, @PersistenceContext
и т. Д.)
Вариант 2 — Используйте annotation-config
директиву
Автоматически регистрирует Bean Post Processors выше.
<context:annotation-config/>
Вариант 3 — Используйте component-scan
директиву
Автоматически регистрирует Bean Post Processors над И сканирует аннотации компонентов @Component, @Repository, @Service, @Controller
и многое другое …
<context:context:component-scan base-package="com.gordondickens.enterprisespring"/>
Сканирование компонентов приложения
Исключить элементы конфигурации, которые не являются частью базового приложения. Контроллеры являются частью приложения, которое имеет дело с пользовательским интерфейсом, но не относится к веб-службам.
В
applicationContext-bootstrap.xml
<context:component-scan base-package="com.gordondickens.enterprisespring"> <context:exclude-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan>
MVC компонент сканирования
Исключить компоненты не являются частью всего приложения. Если наше приложение обслуживает клиентов пользовательского интерфейса и клиентов веб-служб, в основной конфигурации приложения должны быть обнаружены только базовые компоненты. Мы обсудим конфигурацию MVC в будущем блоге.
В пределах applicationContext-webmvc.xml
<context:component-scan base-package="com.gordondickens.enterprisespring" use-default-filters="false"/> <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/> </context:component-scan>
Рекомендации по сканированию компонентов
Когда Spring создает контекст приложения, он объединяет всю конфигурацию в один контекст, независимо от того, сколько файлов конфигурации или аннотаций используется.
- Сканирование компонентов должно быть настроено ТОЛЬКО в файле конфигурации начальной загрузки, а не в каждом файле конфигурации XML
- НЕ включайте также
<context:annotation-config/>
директиву, она автоматически включается при сканировании компонента - НЕ начинайте сканирование с «com» и / или «org», так как это отсканирует ВСЕ подпакеты во всем проекте и фляги для кандидатов!
- Будьте максимально конкретны с пакетами
- НЕ пересекайте границы приложения с
component-scan
- Создать
applicationContext-services.xml
для сканирования услуг - Создайте
applicationContext-persistence.xml
для персистентности и сущности бобов - Создайте
applicationContext-webmvc.xml
для персистентности и сущности бобов - Создать
applicationContext-webservice.xml
для бобов веб-сервиса - Импортируйте эти ссылки в
applicationContext-bootstrap.xml
эти элементы
- Создать
Зачем разделять файлы обнаружения на специфичные для слоя конфигурации?
- Модульное тестирование проще, так как обнаружение бинов более конкретно
- Позволяет разделить проект на несколько Jar / Wars
- Снижает риск возникновения проблем обнаружения с широкой областью действия, избыточного сканирования и замены бинов несколькими сканерами
Подробнее об обнаружении аннотаций в Spring см. Справочник по аннотациям для проектов Spring.