1. 程式人生 > >java 成神之路 (一)

java 成神之路 (一)

通過註解和反射例項化一個物件(依賴注入)

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

我們都知道 spring 在 變數前面加上 @autowired @component 等註解就可以例項化該變數。它是怎麼做到的呢? 反射加Bean工廠,spring掃描這些註解後通過註解從bean工廠裡面取出已例項化的物件,然後通過反射賦值到該變數上面,達到了例項化含有改註解的變數。

今天我們來演示一下通過 反射加註解怎麼例項化一個變數。

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

這裡寫圖片描述

DAL 資料訪問層

BLL 業務處理層

main 就當控制層

然後我們 例項化一個物件的時候 通常是這樣

這裡寫圖片描述

通過 new 關鍵詞 來例項化物件。

執行結果:

這裡寫圖片描述

現在我們需要把 BLL 改造成這樣 也能使我們的程式整執行:
這裡寫圖片描述

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

這裡寫圖片描述

因為我們要通過反射例項化一個物件, 所以在這個註解上面加入了一個Class 變數。 後面通過傳入的 Class 得到 例項化物件。

下一步是 掃描註解得到 註解有 @DAL 註解的變數

這裡寫圖片描述

下一步 通過反射 含有 DAL 例項化物件

這裡寫圖片描述

到此 完成 了 反射例項化物件並賦值到了 含有該變數的註解上面

我們來測試一下

這裡寫圖片描述

結果和前面通過 new 是一樣的

我們再加多一個 adminDAL 看看

這裡寫圖片描述

這裡寫圖片描述

執行正常。

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

接下來我們可以 實現 一個類似 spring 的bean 容器。 只要初始化過一個的物件 都放到這個容器裡面,下一次從這個 容器裡面獲取這個物件。
這樣就可以進一步 節約開銷,提升效能。