Java高階—代理設(shè)計模式從搶銀行開始說起
Java的設(shè)計模式多達23種,這二十三般絕藝,絕大多數(shù)人都是樣樣精通,樣樣疏松,咋一看猛如虎,定眼一瞧,只會用在main函數(shù)。大家都用Mybatis框架,增刪改查都不怕,若要問你只見接口不見實現(xiàn)是為啥,你腦袋一拍,得去找真專家。今天我從代理設(shè)計模式出發(fā)結(jié)合Mybatis框架給大家講解一下。
靜態(tài)代理——套絲襪搶銀行
你是法外狂徒張三,你準備策劃一起搶銀行事件,你開始進行思考,然后你聰明的大腦靈光一現(xiàn)∑(●ΦДΦ●),你決定給自己套上絲襪。這樣你就套上了一層殼子,搶銀行的是絲襪變態(tài),關(guān)我張某人什么事情 ?ω?,這就是靜態(tài)代理。

動態(tài)代理——哥譚Joker:you completed me
由于你上次的策劃行動很完美,你引起了哥譚義警的注意,同時你也成為了聞名遐邇的犯罪大師,你現(xiàn)在改名Joker,人送外號莫里亞蒂,也看不上以前的拙劣伎倆,你開始策略一起完美的犯罪。你準備藏身在幕后,指揮別人去完成,但是你擔心會走漏消息,該怎么辦呢,你進行思考。
∑(●ΦДΦ●),這時,一道靈光閃過你聰明的大腦。你先腦海里挑出龍?zhí)譇,B,C一直到Z,26個候選人。等到搶劫時倒計時5分鐘,你再從26個人中,臨時選一個出去干,這樣消息就不會走漏了,不愧是你。


罪案實錄——mybatis是怎么搶銀行的
Mybatis的作者以及使用Mybatis框架的我們當然是聰明人啦,所以讓我們來看看大聰明們都是怎么辦的吧。
犯罪第一步:挑龍?zhí)?/h1>

Mybatis框架的這個注解,實現(xiàn)了ImportBeanDefinitionRegistrar接口。其實現(xiàn)類,會掃描配置的mapper接口,然后封裝成factoryBean(龍?zhí)讉儯?。這個接口會在Spring框架的invokeBeanFactoryPostProcessor方法,在Bean實例化之前,同@Configuration,@Import,@Bean等標簽一起處理,注入到Spring的上下文中。
犯罪第二步:搶銀行
Spring框架,在完成實例化后,會去判斷這個實例的類型是不是FactoryBean類型,如果是的話,會去調(diào)用FactoryBean.getObject()方法,生成一個新的實例替代掉。讓我們看看MyBatis的底層怎么做的吧。

看清楚了吧,Mybatis的底層就是通過動態(tài)代理,讓接口實例化的。
如果你覺得內(nèi)容干貨滿滿,對你有用的話,記得點贊收藏與關(guān)注我哦,我會繼續(xù)推出更多優(yōu)質(zhì)的內(nèi)容。