@Autowired не работает, если компонентное сканирование удалено

Я столкнулся с проблемой, что аннотация @Autowired больше не работает (во всех классах Java, использующих эту аннотацию), если я удалю тег компонентного сканирования из config

<?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 http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

  <context:component-scan base-package="efco.auth" />

here are some beans...

В пакете efco.auth есть только один класс, и этот не имеет отношения к следующему классу EfcoBasketLogic.

и класс, который использует @Autowired:

package efco.logic;
    public class EfcoBasketLogic extends BasketLogicImpl {

        @Autowired
        private EfcoErpService erpService;

Этот Bean определяется в другом файле конфигурации spring:

<bean id="BasketLogic" class="efco.logic.EfcoBasketLogic">
    <property name="documentLogic" ref="DocumentLogic" />
    <property name="stateAccess" ref="StateAccess" />
    <property name="contextAccess" ref="ContextAccess" />
  </bean>

Как вы можете видеть, erpService не определен. Остальные три свойства находятся на BasketLogicImpl и имеют сеттеры.

Что я делаю неправильно?

Ответ 1

Как говорит Томаш, вам нужно <context:annotation-config/> для @Autowired работать. Если у вас есть <context:component-scan/>, он неявно включает в себя аннотацию-config для вас.

Ответ 2

Добавление либо autowire = "byType", либо autowire = "byName" к вашему объявлению bean должно выполнять задание.