我有一顆豆:爲什麼我需要自動佈線/注入字段的setter?
<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和contextAccess是在BasketLogicImpl
和領域,我沒有<context:component-scan />
EfcoBasketLogic.java:
public class EfcoBasketLogic extends BasketLogicImpl {
@Inject
private EfcoErpService erpService;
...
...
...
}
erpService是null,除非我提供setter。但爲什麼?我認爲在自動裝配發生的地方不需要安裝人員? BasketLogicImpl會對此負責嗎?
如果我這樣做會出現一個新問題 - > _沒有定義類型爲[xyz]的唯一bean:期望的單個匹配bean,但找到5_。這是由其他bean引起的,我通過''顯式注入了一個屬性,並且有5個bean實現了該接口。屬性'x'有註解@Inject。所以看起來顯式定義不會覆蓋自動裝配的東西? –
GarfieldKlon
如果只有一個給定類型的bean或一個標記爲primary的bean,那麼'@ Inject'將被正確解析。如果你有多種這種類型的可互換bean,你需要使用'@ Resource'或xml按名稱注入。 – mrembisz
即使我通過''顯式注入這個bean? –
GarfieldKlon