關於spring中IOC的思想
阿新 • • 發佈:2020-10-16
關於spring中IOC的思想。
一、編譯期錯誤轉化
在我們日常使用的MVC三層架構中,service層去呼叫dao層,一般會去建立dao層介面的例項進行呼叫。但是,如果說dao介面並沒有實現類那麼直接出現編譯錯誤,這在開發中是不允許出現的。那麼就需要將編譯期錯誤轉化為執行時錯誤:
解決:
通過配置檔案,以key-value的形式將全限定類名與標誌進行儲存,當伺服器啟動時,通過工廠類中的類載入器對配置檔案進行載入讀取,通過配置檔案中的資訊反射建立物件。
二、安全與效率問題
(1)controller層的實現類如果是多例的,那麼每次呼叫都會新建不同的物件,類中的成員也會隨著不斷的初始化,雖然解決的執行緒安全問題,但是效率低下
那麼,如何解決安全與效率問題呢?
解決:
那就是實現類採用單例模式,但是將原先的類成員定義在方法中,那麼每次呼叫雖然是一個物件,但是要提供成員對其進行初始化,解決了問題。
三、生命週期問題
在控制層實現類採用單例後,又有一個問題,那就是在建立該類物件後,如果長時間不用就會被GC回收
解決:
用一個容器將建立好的物件進行儲存。
那麼,在(一)中,通過配置檔案反射,每次會呼叫Class.forName(beanPath).newInstance();建立物件,為了解決(二)的問題,我們只建立一次,解決(三)的問題,用一個容器儲存建立的物件
對外只暴露Beans的get方法來獲取物件,這樣就實現了單例。