Tôi có một bean:Tại sao tôi cần thiết lập cho trường tự động/được tiêm?
<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 và contextAccess được các lĩnh vực trên BasketLogicImpl
Và tôi không có <context:component-scan />
EfcoBasketLogic.java:
public class EfcoBasketLogic extends BasketLogicImpl {
@Inject
private EfcoErpService erpService;
...
...
...
}
erpService là null, trừ khi tôi cung cấp một setter. Nhưng tại sao? Tôi nghĩ rằng một setter là không cần thiết, nơi autowiring đang diễn ra? Nó có thể được rằng BasketLogicImpl chịu trách nhiệm cho điều đó?
Nếu tôi làm như vậy một vấn đề mới xuất hiện -> _Không có loại bean duy nhất [xyz] được xác định: bean kết hợp đơn dự kiến nhưng tìm thấy 5_. Đó là do một bean khác mà tôi tiêm một thuộc tính thông qua '' và có 5 bean thực hiện giao diện đó. Thuộc tính 'x' có chú thích @Inject. Vì vậy, nó có vẻ như định nghĩa rõ ràng không ghi đè lên các công cụ autowired? –
GarfieldKlon
'@ Inject' sẽ được giải quyết đúng nếu chỉ có một loại đậu đã cho hoặc một loại được đánh dấu là chính. Nếu bạn có nhiều loại cây hoán đổi cho nhau của loại đó, bạn cần phải tiêm theo tên bằng cách sử dụng '@ Resource' hoặc xml. – mrembisz
Ngay cả khi tôi tiêm một cách rõ ràng bean đó thông qua ''? –
GarfieldKlon