私は豆がありますautowired/injectedフィールドのセッターが必要なのはなぜですか?
<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必要はありません。
を 私はセッターを提供しない限り、3210public class EfcoBasketLogic extends BasketLogicImpl {
@Inject
private EfcoErpService erpService;
...
...
...
}
erpServiceは、ヌルです。しかし、なぜ?オートワイヤリングが行われているところではセッターが必要ないと思ったのですか? BasketLogicImplがその責任を負うことはできますか?
私がそうした場合、新たな問題が表示されます - > [XYZ]が定義されているタイプの_Noユニークな豆:予想される単一のマッチングBeanをしかし5_を見つけました。これは、 'を介してプロパティを明示的に挿入する他のBeanによって引き起こされ、そのインタフェースを実装するBeanが5つあります。プロパティ 'x'には注釈@Injectがあります。だから明示的な定義は、autowiredものをオーバーライドしないようだ?ただ1つの所与のタイプのBeanまたはプライマリとしてマークされたものがある場合Inject' @ –
GarfieldKlon
'が適切に解決されます。そのタイプの複数の互換性のあるBeanがある場合は、 '@ Resource'またはxmlを使用して名前で注入する必要があります。 – mrembisz
私が明示的にそのbeanを ''経由で挿入しても? –
GarfieldKlon