title: Why do I need a setter for autowired / injected field?
body: <p>I have a bean:</p>
  
  <pre><code>    &lt;bean id="BasketLogic" class="efco.logic.EfcoBasketLogic" autowire="byType"&gt;
          &lt;property name="documentLogic" ref="DocumentLogic" /&gt;
          &lt;property name="stateAccess" ref="StateAccess" /&gt;
          &lt;property name="contextAccess" ref="ContextAccess" /&gt;
      &lt;/bean&gt;
  
    &lt;bean id="EfcoErpService" autowire="byType" class="efco.erp.service.EfcoErpServiceImpl"&gt;
      &lt;constructor-arg ref="ErpConnector"/&gt;
    &lt;/bean&gt;
  </code></pre>
  
  <p><em>documentLogic</em>, <em>stateAccess</em> and <em>contextAccess</em> are fields on <em>BasketLogicImpl</em></p>
  
  <p>And I do not have <code>&lt;context:component-scan /&gt;</code> </p>
  
  <p>EfcoBasketLogic.java:</p>
  
  <pre><code>public class EfcoBasketLogic extends BasketLogicImpl {
  
          @Inject
          private EfcoErpService erpService;
      ...
      ...
      ...
  }
  </code></pre>
  
  <p>erpService is <em>null</em>, unless I provide a setter. But why? I thought a setter isn't needed where autowiring is taking place? Could it be that BasketLogicImpl is responsible for that?</p>