java 成神之路 (一)

經過註解和反射實例化一個對象(依賴注入)

適合對java反射有一點了解的人java

咱們都知道 spring 在 變量前面加上 @autowired @component 等註解就能夠實例化該變量。它是怎麼作到的呢? 反射加Bean工廠,spring掃描這些註解後經過註解從bean工廠裏面取出已實例化的對象,而後經過反射賦值到該變量上面,達到了實例化含有改註解 的變量。git

今天咱們來演示一下經過 反射加註解怎麼實例化一個變量。github

咱們來模擬 簡單一個 三層架構 MVC 工程。spring

這裏寫圖片描述

DAL 數據訪問層架構

BLL 業務處理層性能

main 就當控制層測試

而後咱們 實例化一個對象的時候 一般是這樣spa

這裏寫圖片描述

經過 new 關鍵詞 來實例化對象。設計

運行結果:component

這裏寫圖片描述

如今咱們須要把 BLL 改形成這樣 也能使咱們的程序整運行:
這裏寫圖片描述

首先看看 咱們 @DAL 是怎麼定義的:

這裏寫圖片描述

由於咱們要經過反射實例化一個對象, 因此在這個註解上面加入了一個Class 變量。 後面經過傳入的 Class 獲得 實例化對象。

下一步是 掃描註解獲得 註解有 @DAL 註解的變量

這裏寫圖片描述

下一步 經過反射 含有 DAL 實例化對象

這裏寫圖片描述

到此 完成 了 反射實例化對象並賦值到了 含有該變量的註解上面

咱們來測試一下

這裏寫圖片描述

結果和前面經過 new 是同樣的

咱們再加多一個 adminDAL 看看

這裏寫圖片描述

這裏寫圖片描述

運行正常。

這只是個簡單的列子,重要的是設計思想。

接下來咱們能夠 實現 一個相似 spring 的bean 容器。 只要初始化過一個的對象 都放到這個容器裏面,下一次從這個 容器裏面獲取這個對象。
這樣就能夠進一步 節約開銷,提高性能。

代碼地址 https://github.com/linving/java_club.git

相關文章
相關標籤/搜索