@Autowired не работает, если удалено компонентное сканирование
Я сталкиваюсь с проблемой, что аннотация @Autowired больше не работает (во всех классах Java, использующих эту аннотацию), если я удаляю тег component-scan из 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 id="BasketLogic" class="efco.logic.EfcoBasketLogic">
<property name="documentLogic" ref="DocumentLogic" />
<property name="stateAccess" ref="StateAccess" />
<property name="contextAccess" ref="ContextAccess" />
</bean>
Как видите, erpService не определен. Другие три свойства находятся в BasketLogicImpl и имеют сеттеры.
Что я делаю не так?
2 ответа
Как говорит Томаш, тебе нужно <context:annotation-config/>
за @Autowired
работать. Когда у вас было <context:component-scan/>
неявно включено annotation-config
для тебя.
Добавление либо autowire="byType"
или же autowire="byName"
к вашей декларации боб должен сделать работу.