難道我使用依賴注入下面的例子:我應該在這些域類上使用依賴注入嗎?
@Scope("prototype")
@Component
public class Order{
@Autowired
public Order(User user,List<OrderItem> items,.......){
現在別的地方:
@Component
public class PersistOrder{
@Autowired
Provider<Order> orderProvider;
public void prepareOrder() {
Order order = orderProvider.get();
AS JSR-330的狀態中,Provider的get()方法返回訂購的新實例,但是什麼對象被傳遞給新訂單的構造函數?正如您所看到的,訂單具有自己的依賴性,必須在實際的訂單對象被檢索到方法之前注入它們。
沒有DI我只是創建所有必要的參數並將它們傳遞給新訂單的構造函數。那麼我應該在這裏使用DI嗎?
編輯:
這是該代碼似乎沒有DI:正如你看到我的用戶和訂單項目的ID,可以從DAO中得到他們的情況下
@Component
public class PersistOrder{
public void prepareOrder() {
User user=userDao.get(userId);
List<OrderItem> orderItems=orderItemDao.getAll(orderItemIds);
Order order = new SmartPhoneOrder(user,orderItems);
。然後,我將這些實例傳遞給Order的子類的構造函數以獲取實例。這個過程對我來說似乎很清楚。我的意思是我如何使用DI來完成這項工作,以便我的代碼能夠在PersistOrder和Order類之間解耦?或者在這個例子中使用DI使邏輯更復雜?
我認爲您已將訂單與訂單服務進行了合併。您通常會將用戶傳遞給返回用戶訂單的服務,並且您在撥打電話時會這樣做。 –
其實我簡化了這個例子。是的,服務的prepareOrder()具有從視圖提供的參數,但它不會改變這個概念。假設我有一個有意義的順序(比如user,items,...)的所有必要對象的引用,但我必須將它們傳遞給順序的構造函數。這就是問題所在,因爲當我調用spring時,spring會實例化新順序get() –
我編輯了問題並刪除了提到我的服務。現在我認爲這個問題不那麼令人困惑 –