Нужна ли аннотация @Autowired при использовании XML-конфигурации Spring?

«Нужна ли аннотация @Autowired при использовании XML-конфигурации Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, аннотация @Autowired не является обязательной при использовании чистой XML-конфигурации. Spring может внедрять зависимости, описанные в XML-файле, без каких-либо аннотаций в коде.

Сравнение подходов:

  1. Чистая XML-конфигурация (без @Autowired):

    <bean id="userRepository" class="com.example.UserRepositoryImpl"/>
    <bean id="userService" class="com.example.UserService">
        <!-- Явное указание зависимости через property или constructor-arg -->
        <property name="repository" ref="userRepository"/>
    </bean>
    public class UserService {
        private UserRepository repository;
        // Setter для внедрения из XML
        public void setRepository(UserRepository repository) {
            this.repository = repository;
        }
    }
  2. Гибридный подход (XML + @Autowired):

    <!-- Включаем поддержку аннотаций -->
    <context:annotation-config/>
    
    <bean id="userRepository" class="com.example.UserRepositoryImpl"/>
    <bean id="userService" class="com.example.UserService"/>
    <!-- Зависимость не описана в XML -->
    public class UserService {
        @Autowired // Spring сам найдет бин подходящего типа
        private UserRepository repository;
    }

Ключевые моменты:

  • Без @Autowired зависимости должны быть явно объявлены в XML через <property> или <constructor-arg>.
  • С @Autowired конфигурация в XML становится минимальной (только объявление бинов), а связи между ними Spring устанавливает автоматически по типу.
  • Для работы @Autowired в XML необходимо добавить <context:annotation-config/>.

Выбор подхода: Зависит от стиля проекта. Чистый XML дает полную явность конфигурации в одном месте, а @Autowired сокращает объем XML и позволяет использовать автодополнение в IDE.