spring中有乙個重要的元件,ioc容器。ioc就是(inverse of control)控制反轉。我們在程式中經常去呼叫別的物件,這個時候就會對呼叫的物件產生依賴,我們程式的耦合性就會變高。
程式的耦合大致分為類與類之間的依賴,方法與方法之間的依賴。
這裡拿類與類之間的依賴為例,我們在a類中需要b類的方法時,此時往往去new乙個b類的物件。比如
userdao userdao = new userdao();
在以前三層架構程式設計時,往往控制層呼叫業務層,業務層呼叫資料訪問層時,是直接new物件,耦合性大大提公升,萬一以後資料訪問層有新的版本,我們還要去業務層中修改源**,就特別麻煩,還有可能出錯。
為了避免這種情況,可以使用工廠模式程式設計,即寫乙個工廠,以後我們如果要物件就直接管工廠要就可以,剩下的事情不歸我們管了。
**:
public
class
beanfactory
}catch
(ioexception e)
catch
(classnotfoundexception e)
catch
(illegalacces***ception e)
catch
(instantiationexception e)
}public
static
t getbean
(string classname)
}
這個原理其實比較簡單,就是先讀取配置檔案,然後傳引數,根據引數的名字,反射出這個物件,為了不寫死**,所以才使用載入配置檔案的方式。
工廠中有個map集合,是為了讓工廠符合單例設計模式,即每個物件只生產一次,生產出物件後就存入到map集合中。
為什麼要使用單例設計模式呢?
具體是要看情況,在三層結構程式設計裡面,我們生產出來的bean物件(service和dao物件)沒必要用到多例,多例反而還會影響效率,而且還沒有共有變數,所以我們使用了單例模式還不用考慮執行緒安全問題,於是採用單例模式。
回到主題,ioc的目的就是為了解耦,控制反轉的意思說白了就是把建立物件的許可權移交出去。至於移交給誰,這裡我們介紹的是spring的ioc,那肯定是移交給spring框架。上面的例子是移交給我們自己寫的工廠物件。
以上是我個人理解,如果有需要更正的地方,希望各位幫幫忙指點出來。
簡單實現spring中Ioc容器
spring的ioc容器是通過工廠模式 反射機制完成的。簡單來說反射機制就是我們可以通過類的名字來生成物件。比如比較常見的用法 person p person class.forname chinese newinstance 這樣子,我們可以直接通過chinese這個類的名字來構造這個物件。下面我...
Spring的核心容器 IoC
簡單來說,beanfactory就是乙個管理bean的工廠,它主要負責初始化各種bean,並呼叫它們的生命週期方法 beanfactory factory newxmlbeanfactory new filesystemresource file beanfactory factory newxml...
Spring框架的IoC容器
ioc 是指在程式開發中,例項的建立不再由呼叫者管理,而是由 spring 容器建立。spring 容器會負責控制程式之間的關係,而不是由程式 直接控制,因此,控制權由程式 轉移到了 spring 容器中,控制權發生了反轉,這就是 spring 的 ioc 思想。打個比方 孩子長大了需要找老師,你需...