Альтернативой настройке на XML является конфигурация на основе аннотаций, которая опирается на метаданные байт-кода для подключения компонентов вместо объявлений в угловых скобках. Вместо того чтобы использовать XML для описания инструмента связывания бинов, разработчик переносит конфигурацию в сам класс компонента с помощью аннотаций для соответствующего объявления класса, метода или поля. Как упоминалось в подразделе Пример: AutowiredAnnotationBeanPostProcessor
, использованиеBeanPostProcessor
в сочетании с аннотациями является распространенным средством расширения IoC-контейнера Spring. Например, в Spring 2.0 появилась возможность принудительного использования требуемых свойств с помощью аннотации @Required
. Spring 2.5 позволил использовать тот же общий подход для управления внедрением зависимостей с использованием Spring. По сути, аннотация @Autowired
предоставляет те же возможности, которые описаны в разделе "Автоматическое обнаружение и связывание взаимодействующих объектов", но с более тонким контролем и более широкой применимостью. В Spring 2.5 также добавлена поддержка аннотаций JSR-250, таких как @PostConstruct
и @PreDestroy
. Для Spring 3.0 была добавлена поддержка аннотаций JSR-330 (Внедрение зависимостей для Java), содержащихся в пакете javax.inject
, таких как @Inject
и @Named
.
Внедрение зависимостей с помощью аннотаций выполняется перед внедрением зависимостей с помощью XML. Таким образом, конфигурация XML замещает аннотации для свойств через оба подхода.
Как обычно, вы можете зарегистрировать постпроцессоры в виде отдельных определений бинов, но их также можно зарегистрировать и неявно, включив следующий тег в XML-конфигурацию Spring (обратите внимание на включение пространства имен context
):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
Элемент <context:annotation-config/>
неявно регистрирует следующие постпроцессоры:
<context:annotation-config/>
ищет аннотации только для бинов в том же контексте приложения, в котором он определен. Это означает, что если вы поместите <context:annotation-config/>
в WebApplicationContext
для DispatcherServlet
, он будет проверять наличие @Autowired
бинов только в ваших контроллерах, но не в службах.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ