Spring容器初始化實現V3 版本

2021-10-10 12:02:14 字數 1842 閱讀 3196

//儲存乙個url和乙個method的關係

public class handler

public method getmethod()

public object getcontroller()

public class<?> getparamtypes()

//形參列表

//引數的名字作為key,引數的順序,位置作為值

public handler(pattern pattern, object controller, method method)

//提取方法中加了註解的引數

//把方法上的註解拿到,得到的是乙個二維陣列

//因為乙個引數可以有多個註解,而乙個方法又有多個引數

annotation pa = method.getparameterannotations();

for (int i = 0; i < pa.length ; i ++) }}

} //提取方法中的request和response引數

class<?> paramstypes = method.getparametertypes();

for (int i = 0; i < paramstypes.length ; i ++)

} }// private

}

//思考:為什麼不用map

//你用map的話,key,只能是url

//handler 本身的功能就是把url和method對應關係,已經具備了map的功能

//根據設計原則:冗餘的感覺了,單一職責,最少知道原則,幫助我們更好的理解

//初始化url和method的一對一對應關係

if(ioc.isempty())

for (map.entryentry : ioc.entryset())

string baseurl = "";

} //預設獲取所有的public方法

for (method method : clazz.getmethods())

}}

修改dodispatch()方法:

//獲得方法的形參列表

class<?> paramtypes = handler.getparamtypes();

object paramvalues = new object[paramtypes.length];

mapparams = req.getparametermap();

for (map.entryparm : params.entryset())

paramvalues[reqindex] = req;

} paramvalues[respindex] = resp;

} object returnvalue = handler.method.invoke(handler.controller,paramvalues);

if(returnvalue == null || returnvalue instanceof void)

resp.getwriter().write(returnvalue.tostring());

}在以上**中,增加了兩個方法,乙個是gethandler()方法,主要負責處理url 的正則匹配;乙個是convert()方法,主要負責url 引數的強制型別轉換。至此,手寫mini 版springmvc 框架就已全部完成。

Spring容器初始化過程

1.preparerefresh 初始化placeholder source,校驗xml檔案 2.建立bean容器,載入並註冊bean。bean並沒有完成初始化,bean例項化未完成 初始化乙個defautllistablebeanfactory,載入beandefintion到beanfactor...

Spring容器啟動 Bean的3種初始化方式

通常我們建立乙個bean的時候,可能有這樣的需求,比如我建立了乙個連線資料庫的bean類,我希望在spring容器建立的時候,就檢查下是否能正常訪問資料庫。這時候我們可以借助於以下方式進行實現。1 如果是通過xml配置檔案進行bean的生成,我們可以在配置bean的時候,加下init method ...

Spring原始碼研究 容器初始化

新建乙個容器,看看後面幹了啥 xmlbeandefinitionreader.loadbeandefinitions resource line 302 我們用string指定了xml配置檔案的路徑,spring要將其封裝到resource方便io,這裡的resource指的就是我們的配置 之後經過...