1. 程式人生 > 實用技巧 >關於spring中IOC的思想

關於spring中IOC的思想

關於spring中IOC的思想。

一、編譯期錯誤轉化
在我們日常使用的MVC三層架構中,service層去呼叫dao層,一般會去建立dao層介面的例項進行呼叫。但是,如果說dao介面並沒有實現類那麼直接出現編譯錯誤,這在開發中是不允許出現的。那麼就需要將編譯期錯誤轉化為執行時錯誤:
解決:
通過配置檔案,以key-value的形式將全限定類名與標誌進行儲存,當伺服器啟動時,通過工廠類中的類載入器對配置檔案進行載入讀取,通過配置檔案中的資訊反射建立物件。
二、安全與效率問題
(1)controller層的實現類如果是多例的,那麼每次呼叫都會新建不同的物件,類中的成員也會隨著不斷的初始化,雖然解決的執行緒安全問題,但是效率低下

(2)controller層的實現類如果是單例的,那麼只會首次建立物件,類中的成員也只會初始化一次,在多執行緒環境中會產生安全問題。
那麼,如何解決安全與效率問題呢?
解決:
那就是實現類採用單例模式,但是將原先的類成員定義在方法中,那麼每次呼叫雖然是一個物件,但是要提供成員對其進行初始化,解決了問題。
三、生命週期問題
在控制層實現類採用單例後,又有一個問題,那就是在建立該類物件後,如果長時間不用就會被GC回收
解決:
用一個容器將建立好的物件進行儲存。

那麼,在(一)中,通過配置檔案反射,每次會呼叫Class.forName(beanPath).newInstance();建立物件,為了解決(二)的問題,我們只建立一次,解決(三)的問題,用一個容器儲存建立的物件

程式碼:
在這裡插入圖片描述
對外只暴露Beans的get方法來獲取物件,這樣就實現了單例。
在這裡插入圖片描述