← Назад к вопросам

Нужна ли аннотация Autowired при XML конфигурации

2.2 Middle🔥 121 комментариев
#Другое

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Аннотация @Autowired при XML конфигурации

Краткий ответ

Нет, аннотация @Autowired не требуется при использовании XML конфигурации. При XML конфигурации Spring Bean зависимости определяются явно в XML файле через теги <bean> и элементы <property>, <constructor-arg> или <ref>. Однако @Autowired можно использовать одновременно с XML конфигурацией, если это необходимо.

Когда используется @Autowired

@Autowired активируется только если в контекст приложения зарегистрирован AutowiredAnnotationBeanPostProcessor. Это происходит автоматически при:

  • Использовании @ComponentScan и аннотаций типа @Component, @Service, @Repository
  • Явной регистрации <context:annotation-config /> в XML
  • Использовании @SpringBootApplication

Два подхода конфигурации

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

public class UserService {
    private UserRepository userRepository;
    
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
}
<bean id="userRepository" class="com.example.UserRepositoryImpl" />
<bean id="userService" class="com.example.UserService">
    <constructor-arg ref="userRepository" />
</bean>

2. XML конфигурация с аннотациями

Если добавить <context:annotation-config />, то @Autowired будет работать:

public class UserService {
    @Autowired
    private UserRepository userRepository;
}
<context:annotation-config />
<bean id="userRepository" class="com.example.UserRepositoryImpl" />
<bean id="userService" class="com.example.UserService" />

Важные различия

АспектXML конфигурация@Autowired + XML
РазвязкаЯвная, читаемаяНа уровне класса
Type SafetyОбнаруживается при компиляции XMLОбнаруживается при запуске
ДокументированиеВсе зависимости в одном местеЗависимости в классе и XML
ТестированиеПроще макироватьТребует более сложной настройки

Рекомендации

  1. Только XML: Используй для legacy приложений, где требуется централизованная конфигурация
  2. XML + @Autowired: Переходный вариант при модернизации проекта
  3. @ComponentScan + @Autowired (современный подход): Используй для новых проектов
  4. @Configuration класс (Spring Boot): Самый чистый и типобезопасный вариант

Практический пример с @Configuration

@Configuration
public class AppConfig {
    
    @Bean
    public UserRepository userRepository() {
        return new UserRepositoryImpl();
    }
    
    @Bean
    public UserService userService(UserRepository userRepository) {
        return new UserService(userRepository);
    }
}

Этот подход предпочтителен: типизирован, легко отлаживается и не требует магии аннотаций.