第一次看spring的時候,會感覺ioc好神奇阿。不需要設定值,用的時候取就可以了。那麼它是怎麼實現的呢?核心就是ioc容器。那麼它有多神秘呢額?其實很簡單,就是讀取配置檔案,生成對應的bean,再將值賦給那個bean就行了,取的時候直接用那個getbean方法去取就行了。
廢話少說,我們自己來寫乙個簡單的ioc容器,來證明其實它就是那麼回事。
名字我們完全按照spring的來,讓測試起來就感覺在用spring一樣。
我們的測試例子是這樣的,兩個類,user和people,user裡又name和age,people裡又user的引用。呼叫people裡的user裡的say方法,列印。先看這兩個類。
user類
就是根據檔名,從類路徑下去讀取那個xml檔案,然後呼叫readxml()去讀取xml檔案,生成相應的bean並賦值放到乙個map裡。
readxml()方法
這個方法就是ioc核心了,這裡我用的是jdom來處理xml檔案的,dom4j也行,無所謂。
1.是使用的xpath來讀取的xml,如果不熟可以看看資料。
2.取得定義的類,例項化並取得所有定義的方法。
3.取出所有以set開頭的方法。
4.如果xml定義裡面的property有name屬性就賦值
5.如果沒有name屬性就用ref屬性來鏈結其他 bean(可以看出,帶ref一定要在要鏈結的bean後面,如果沒有是查不到的。)
最後寫個類測試一下。
和spring沒區別吧?看看結果吧
ok。ioc其實就是這麼簡單,這個只是簡單的實現,要深入研究,就去看spring的源**吧。
php 簡單ioc容器
inte ce supermoduleinte ce class xpower implements supermoduleinte ce 終極炸彈 就這麼俗 class ultrabomb implements supermoduleinte ce class superman class con...
簡單實現spring中Ioc容器
spring的ioc容器是通過工廠模式 反射機制完成的。簡單來說反射機制就是我們可以通過類的名字來生成物件。比如比較常見的用法 person p person class.forname chinese newinstance 這樣子,我們可以直接通過chinese這個類的名字來構造這個物件。下面我...
Spring的IOC容器簡單介紹 工廠模式解耦
spring中有乙個重要的元件,ioc容器。ioc就是 inverse of control 控制反轉。我們在程式中經常去呼叫別的物件,這個時候就會對呼叫的物件產生依賴,我們程式的耦合性就會變高。程式的耦合大致分為類與類之間的依賴,方法與方法之間的依賴。這裡拿類與類之間的依賴為例,我們在a類中需要b...