基於依賴注入的設計模式融入Spring

2021-10-14 11:35:29 字數 1925 閱讀 2814

在乙個程序中,某個類始終只有乙個例項

@service //和@component功能一樣,將該類宣告為bean交由容器管理

public class userserviceimpl implements userservice

@controller

public class usercontroller

}

即使注入多次,仍然只有乙個例項物件。

如果想多次建立,則使用@scope修改作用域

@service

@scope("prototype")

public class userserviceimpl implements userservice

bean的單例只保證ioc容器中單例,如果繞開spring,自行new例項物件,則會存在多個例項物件。

乙個請求沿著鏈條傳遞直到被處理。

在spring中應用的關鍵是把鏈條上的每個節點物件都交由spring來管理。一種方式是手動新增,參考***

@configuration

public class webconfig implements webmvcconfigurer

// 通過@bean註解將自定義***交由spring管理

@bean

public logininterceptor logininterceptor()

@bean

public authinterceptor authinterceptor()

}

另一種更加簡單的方式,將bean注入到集合中。

@order(1)

@service

public class leaderhandler implements handler

@order(2)

@service

public class managerhandler implements handler

@order(3)

@service

public class bosshandler implements handler

其中@order註解控制裝配順序,數字越小越靠前

@service

public class handlerchain }}

}

此處的關鍵是bean的多個注入,所有實現handler介面的bean都將被注入到handlers集合中!

根據不同的情況執行不同的操作。

首先將策略類宣告為bean

@service("freezone") // 註解中的值代表bean的名稱,這裡為什麼要這樣做,等下我會講解

public class freezonepostagestrategy implements postagestrategy

@service("nearzone")

public class nearzonepostagestrategy implements postagestrategy

@service("farzone")

public class farzonepostagestrategy implements postagestrategy

將bean注入到map中

@controller

public class ordercontroller

}

其中key為bean宣告的名稱,這也是為什麼要給bean命名的原因,value為bean例項物件。這樣可以通過map的get()方法方便的找到對應的bean物件。

這篇部落格是對該文章的個人閱讀筆記+總結

原文:依賴注入用得好,設計模式輕鬆搞

設計模式 依賴注入

1 背景 現在有乙個使用場景 司機開車 一般這樣寫 public driver 2 問題 1 耦合度高 driver中建立和持有car這個類,管理car的生命週期 2 不易維護 car的通用性太強,無法細分汽車型號等等引數 比如自動擋和手動擋 以實現不同處理 不同汽車,點火,掛檔,踩油門,打方向等等...

設計模式 控制反轉 依賴注入

一 控制反 從簡單的 示例入手 郵件服務類 public class emailservice 郵件通知類 public class notifycationsystem 共兩個類,乙個郵件服務類,乙個郵件通知類,郵件通知類依賴於郵件服務類。郵件通知類必須精確的知道建立和使用了哪種型別的服務,此處高...

設計模式 控制反轉 依賴注入

一 控制反 從簡單的 示例入手 郵件服務類 public class emailservice 郵件通知類 public class notifycationsystem 共兩個類,乙個郵件服務類,乙個郵件通知類,郵件通知類依賴於郵件服務類。郵件通知類必須精確的知道建立和使用了哪種型別的服務,此處高...