基本思路
解析xml配置檔案
根據配置的生成相應的物件
將物件存入ioc容器
ioc容器實現**
1.建立實體類<?xml version=
"1.0" encoding=
"utf-8"?>
"address" class=
"com.example.xmlsax_reader.entity.address"
>
"city" value=
"fuzhou"
>
"user" class=
"com.example.xmlsax_reader.entity.user"
>
"username" value=
"tom"
>
"address" ref=
"address"
>
2.封裝bean和property,對應配置檔案中的bean節點和property節點@data
public class user
@data
public class address
3.用於解析配置檔案.xml的類@data
public class bean
@data
public class property
4.初始化ioc容器,生成物件放入容器中public class xmlconfig catch (documentexception e)
//定義xpath,取出所有的bean
string xpath =
"//bean"
; //對bean進行遍歷
list list = doc.selectnodes(xpath)
; if(list!=null)
} //id是不應重複的
if(configmap.containskey(id))
//將bean封裝到map中
configmap.put(id, bean);}
}return configmap;
}}
beanutil工具類public inte***ce beanfactory
//定義乙個ioc容器
//所謂的容器,在**中的表現形式其實就是個集合,我們使用hashmap來作為容器
private map ioc;
private map config;
/*** 建構函式
* 1. 初始化ioc容器
* 2. 載入配置檔案,生成bean物件放入ioc容器
* @param path
*/}}
/*** 根據bean生成物件例項
* @param bean
* @return
*/private object createbean(bean bean)
catch (classnotfoundexception e)
try catch (exception e)
//將bean的屬性封裝到物件中
if(bean.getproperties(
)!= null)
catch (exception e)
} //情況二:配置檔案中使用的是ref屬性注入
if(p.getref(
)!= null)
else catch (exception e)}}
}}return object;
} @override
public object getbean(string beanname)
}
測試類public class beanutil
}} catch (nosuchmethodexception e)
return method;
}}
public class test
/*** 測試ioc容器
*/private static void testioc(
) /**
* 測試讀取配置檔案
*/private static void testconfig()}
}
手寫spring ioc容器遇到的坑
寫web的時候發現,tomcat啟動起來,但是無法注入自己手寫的bean物件,查了原因發現,tomcat啟動有自己的容器,換句話說,不會初始化我寫的容器,解決辦法是,自己手寫了 在web.xml中配置 來完成容器物件中beans的初始化。tomcat生命名週期及容器初始化過程 為什麼是servlet...
(一)手寫spring IOC容器
設計bean工廠介面 如何告訴他建立bean?建立什麼bean?bean工廠實現 畫完整uml類圖 編寫 測試總結 1.ioc是什麼?ioc inversion of control 控制反轉,也稱依賴倒置反轉。反 依賴物件的獲得權被反轉了,由自己建立,變為從ioc容器獲取,和自動注入。2.帶來什麼...
手寫SpringIOC 實現原理
spring ioc 指的是控制反轉,ioc容器負責例項化 定位 配置應用程式中的物件及建立這些物件間的依賴。交由spring來管理這些,實現解耦 使用反射機制 xml技術 手寫spring專題 xml方式注入bean 手寫spring 專題xml 方式注入 bean publicclass xml...