Pourquoi ai-je besoin d'un setter pour le champ autowired / injecté?

J'ai un haricot:

    <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>

documentLogicstateAccess et contextAccess sont des champs sur BasketLogicImpl

Et je n'ai pas <context:component-scan />

EfcoBasketLogic.java:

public class EfcoBasketLogic extends BasketLogicImpl {

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

erpService est nullà moins de me fournir un setter. Mais pourquoi? J'ai pensé à un setter n'est pas nécessaire, où permettra à l'autowiring a lieu? Se pourrait-il que BasketLogicImpl est responsable de cela?

source d'informationauteur GarfieldKlon | 2012-11-02