Mam Fasola:Dlaczego potrzebuję ustawiacza dla pola automatycznego/wtryskiwanego?
<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 i contextAccess są pola na BasketLogicImpl
I nie mam <context:component-scan />
EfcoBasketLogic.java:
public class EfcoBasketLogic extends BasketLogicImpl {
@Inject
private EfcoErpService erpService;
...
...
...
}
erpService to null, chyba że dostarczę setera. Ale dlaczego? Myślałem, że seter nie jest potrzebny tam, gdzie odbywa się autowiring? Czy to możliwe, że za to odpowiada BasketLogicImpl?
Jeśli to zrobię, pojawi się nowy problem -> _Nie zdefiniowano unikatowej fasoli typu [xyz]: oczekiwano pojedynczego pasującego komponentu bean, ale znaleziono 5_. Jest to spowodowane przez inny komponent bean, w którym jawnie wprowadzam właściwość za pomocą '', a 5 komponentów implementuje ten interfejs. Właściwość 'x' ma adnotację @Inject. Wydaje się więc, że jednoznaczne zdefiniowanie nie ma wpływu na rzeczy autoprzesyłane? –
GarfieldKlon
'@ Inject' zostanie rozwiązany poprawnie, jeśli istnieje tylko jeden komponent bean danego typu lub jeden oznaczony jako główny. Jeśli masz wiele wymiennych ziaren tego typu, musisz wprowadzić nazwę za pomocą '@ Resource' lub xml. – mrembisz
Nawet jeśli wyraźnie wstrzyknę tę fasolę przez ''? –
GarfieldKlon