MapperProxy在調(diào)用invoke方法時會創(chuàng)建一個MapperMethod類,MapperMethod類中有2個成員變量SqlCommand和MethodSignature浮创。SqlCommand負(fù)責(zé)封裝sql命令伐债,MethodSignature中封裝方法參數(shù)和sql的返回類型忧侧。
在new?sqlcommand方法中豆赏,會根據(jù)mapper中的接口創(chuàng)建mappedstatment對象,一個mappedstatment對應(yīng)一個方法立肘。
總結(jié):MapperMethod類是整個代理機(jī)制的核心類馏臭,對SqlSession中的操作進(jìn)行了封裝使用野蝇。 該類里有兩個內(nèi)部類SqlCommand和MethodSignature。 SqlCommand用來封裝CRUD操作括儒,也就是我們在xml中配置的操作的節(jié)點绕沈。每個節(jié)點都會生成一個MappedStatement類。MethodSignature用來封裝方法的參數(shù)以及返回類型帮寻,在execute的方法中我們發(fā)現(xiàn)在這里又回到了SqlSession中的接口調(diào)用乍狐,和我們自己實現(xiàn)UerDao接口的方式中直接用SqlSession對象調(diào)用DefaultSqlSession的實現(xiàn)類的方法是一樣的,經(jīng)過一大圈的代理又回到了原地固逗,這就是整個動態(tài)代理的實現(xiàn)過程了浅蚪。