1. 程式人生 > >Java中的容器和註入分析

Java中的容器和註入分析

details 這也 用戶 包含 決定 中間 方式 兩個 依賴

為什麽會出現容器的註入?

  容器:顧名思義,裝東西的器物。

至於spring中bean,aop,ioc等一些都只是實現的方式;具體容器哪些值得我們借鑒,我個人覺得是封裝的思想。將你一個獨立的系統功能放到一個容器之中,可以當做一個大的接口被別人使用,也可以更好的規範標準。

  雲計算解決了計算機基礎設施計算、網絡、存儲這幾個方面的彈性問題,但是它遺留了兩個問題
應用的擴展問題
遷移性問題

在雲計算環境下,人們想出了兩種方法解決問題。一是通過自動化腳本,然而不同的環境千差萬別,一個腳本往往在一個環境上運行正確,到另一個環境就不正確了。二是通過虛擬機鏡像,然而虛擬機鏡像太大了,動不動就幾十個G,拷貝和下載都太費時間。


於是乎,大牛們考慮是否存在著更加輕量級的虛擬化方式,更容易去遷移,也更容易擴展應用層業務的虛擬化方法。有人根據集裝箱的設計思想來設計了更輕量級的虛擬化技術。
在集裝箱出來之前,貨物搬運需要來回的卸貨裝貨,如下圖所示,並且物品與物品之間的隔離性很差,如果船上的貨物有水果、有鐵桶等,那麽水果很容易被其他硬的東西擠壞。
  

  因此,為了解決這個問題,有人提出了集裝箱技術。其一是為了能夠更好的進行遷移,省去了中間來回搬貨卸貨的問題;其二是為了進行隔離,讓不同的物品之間分隔開,互不影響。
借鑒與傳統運輸業的解決方案,有人提出使用類似集裝箱的方式封裝應用和應用運行的環境(應用運行所需要的依賴關系),也就是將任何應用及其依賴打包成一個輕量級、可移植、自包含的容器

容器技術有很多種,docker只是其中一種,只不過docker的流行度較高。
要實現類似於集裝箱的這種封裝技術,需要兩大技術,其一是Namespace,在不同Namespace中的應用可以有獨立的網絡資源、用戶空間、進程號等;其二是Cgroups,可以把cpu、內存等資源進行隔離讓容器使用,可以實現對容器資源的限制,限制容器能夠使用的cpu和內存資源,避免單個容器出錯,耗盡所有系統資源。


container設計的思想

經典的兩個知識點:1、控制反轉;2、依賴註入。

一、控制反轉

每個對象自身對於邏輯的執行能力,被其所依賴的對象反向控制了,這也就是控制反轉的本質含義。

軟件之父為了解決與業務邏輯完好的解耦,從而又能實現一個額外的編程元素容器來幫助進行對象的生命周期管理!提出了容器的構建規則:

1、容器應該被設計成一個全局的,統一的編程元素;
2、在最大程度上降低容器對業務邏輯的入侵;
3、容器應該提供簡單而全面的對象操作接口。

二、依賴註入


只提供普通的Java方法讓容器去決定依賴關系。容器全權負責的組件的裝配,它會把符合依賴關系的對象通過JavaBean屬性或者構造函數傳遞給需要的對象。通過
JavaBean屬性註射依賴關系的做法稱為設值方法註入(Setter Injection);將依賴關系作為構造函數參數傳入的做法稱為構造器註入(Constructor Injection)。
在這裏要提示一下,本次我所說的容器是container(由一系列對象的操作接口構成,其中應該至少包含獲取對象實列以及管理對象之間的依賴關系這兩類操作方法),而不是collection(用於表述一組對象的集合)!

原文:https://blog.csdn.net/liliang_11676/article/details/78753291
https://blog.csdn.net/gui951753/article/details/81504318

Java中的容器和註入分析