Por que preciso de um setter para o campo autowired / injected?

Eu tenho um bean:

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

  <bean id="EfcoErpService" autowire="byType" class="efco.erp.service.EfcoErpServiceImpl">
    <constructor-arg ref="ErpConnector"/>
  </bean>

documentLogic, stateAccess econtextAccess são campos emBasketLogicImpl

E eu não tenho<context:component-scan />

EfcoBasketLogic.java:

public class EfcoBasketLogic extends BasketLogicImpl {

        @Inject
        private EfcoErpService erpService;
    ...
    ...
    ...
}

erpService énulo, a menos que eu forneça um setter. Mas por que? Eu pensei que um setter não é necessário onde a autowiring está ocorrendo? Poderia ser que o BasketLogicImpl é responsável por isso?

questionAnswers(3)

yourAnswerToTheQuestion