在乙個程序中,某個類始終只有乙個例項
@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 共兩個類,乙個郵件服務類,乙個郵件通知類,郵件通知類依賴於郵件服務類。郵件通知類必須精確的知道建立和使用了哪種型別的服務,此處高...