手?jǐn)]golang 仿spring ioc/aop 之10 增強(qiáng)1

手?jǐn)]golang 仿spring ioc/aop 之10 增強(qiáng)1

緣起

最近閱讀 [Spring Boot技術(shù)內(nèi)幕: 架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理] (朱智勝 , 2020.6)
本系列筆記擬采用golang練習(xí)之
Talk is cheap, show me the code.

Spring

Spring的主要特性:
1. 控制反轉(zhuǎn)(Inversion of Control, IoC)
2. 面向容器
3. 面向切面(AspectOriented Programming, AOP)

源碼gitee地址:
https://gitee.com/ioly/learning.gooop

原文鏈接:
https://my.oschina.net/ioly

目標(biāo)

  • 參考spring boot常用注解桩撮,使用golang編寫“基于注解的靜態(tài)代碼增強(qiáng)器/生成器”

子目標(biāo)(Day 10)

  • 代碼掃描差不多了端幼,接下來考慮如何增強(qiáng)
  • Q:子目標(biāo)蝗茁?
  • A:以最常用的@RestController注解為例西采,改造代碼實(shí)現(xiàn)ioc注入/aop鉤子,bean注冊(cè)婉烟,gin整合
  • Q:具體于微?
  • A:一種功能增強(qiáng)會(huì)涉及到一族相關(guān)注解芽隆,比如RestController通常涉及RequestMapping, GetMapping和PostMapping。而幾乎所有的Bean都會(huì)用到Autowired崖瞭。
  • Q:如何實(shí)現(xiàn)狂巢,組織和擴(kuò)展?
  • A:凡擴(kuò)展必對(duì)應(yīng)鏈?zhǔn)?表式結(jié)構(gòu)书聚。系統(tǒng)將定義增強(qiáng)器接口唧领,以及多個(gè)增強(qiáng)器的實(shí)現(xiàn)。每種增強(qiáng)器識(shí)別一個(gè)核心注解(如RestController)及其相關(guān)注解(如GetMapping)雌续,并添加相關(guān)代碼到代碼模型中斩个。
  • Q:誰來運(yùn)行和調(diào)用這些增強(qiáng)器?
  • A:本來想著做成standlone app驯杜,現(xiàn)在看來受啥,直接在項(xiàng)目中集成增強(qiáng)器的包,寫個(gè)xx_test.go并運(yùn)行可能更方便鸽心。
  • Q:難點(diǎn)是什么滚局?
  • A:毫無疑問,Autowired是關(guān)鍵顽频。在什么范圍藤肢,如何匹配Implementation,循環(huán)依賴糯景,以及合適的初始化谤草。
  • Q:如何折衷跟束?
  • A:答案幾乎總是簡(jiǎn)化問題模型。
  • Q:如何開始丑孩?
  • A:第一步冀宴,是給所有代碼模型添加Clone()方法,為增強(qiáng)器提供材料温学。

domain/IClonable.go

克侣灾(深度拷貝)接口

package domain

type IClonable interface {
    Clone() interface{}
}

domain/StructInfo.go

所有代碼模型實(shí)現(xiàn)IClonable接口,這里以StructInfo為例仗岖。

func (me *StructInfo) Clone() interface{} {
    it := new(StructInfo)
    it.CodeFile = me.CodeFile
    it.LineNO = me.LineNO
    it.Name = me.Name

    it.Fields = make([]*FieldInfo, len(me.Fields))
    for i,v := range me.Fields {
        it.Fields[i] = v.Clone().(*FieldInfo)
        it.Fields[i].Struct = it
    }

    it.Methods = make([]*MethodInfo, len(me.Methods))
    for i,v := range me.Methods {
        it.Methods[i] = v.Clone().(*MethodInfo)
        it.Methods[i].Struct = it
    }

    it.Annotations = make([]*AnnotationInfo, len(me.Annotations))
    for i,v := range me.Annotations {
        it.Annotations[i] = v.Clone().(*AnnotationInfo)
    }

    return it
}

(未完待續(xù))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逃延,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子轧拄,更是在濱河造成了極大的恐慌揽祥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件檩电,死亡現(xiàn)場(chǎng)離奇詭異拄丰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)俐末,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門料按,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人卓箫,你說我怎么就攤上這事载矿。” “怎么了烹卒?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長旅急。 經(jīng)常有香客問我馁筐,道長,這世上最難降的妖魔是什么坠非? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任敏沉,我火速辦了婚禮,結(jié)果婚禮上炎码,老公的妹妹穿的比我還像新娘盟迟。我一直安慰自己,他們只是感情好潦闲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布攒菠。 她就那樣靜靜地躺著,像睡著了一般歉闰。 火紅的嫁衣襯著肌膚如雪辖众。 梳的紋絲不亂的頭發(fā)上卓起,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音凹炸,去河邊找鬼戏阅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛啤它,可吹牛的內(nèi)容都是我干的奕筐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼变骡,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼离赫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起塌碌,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤渊胸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后台妆,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體翎猛,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年频丘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泡态。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡搂漠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出某弦,到底是詐尸還是另有隱情桐汤,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布靶壮,位于F島的核電站怔毛,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏腾降。R本人自食惡果不足惜拣度,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望螃壤。 院中可真熱鬧抗果,春花似錦、人聲如沸奸晴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽寄啼。三九已至逮光,卻和暖如春代箭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涕刚。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來泰國打工嗡综, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人副女。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓蛤高,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碑幅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戴陡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容