JavaPoet APT(一) 寫架構(gòu)思想

我們大致梳理下,下載的編譯期框架,都有下面這些兜畸,不全但比較有名

  • Dagger2
  • Room
  • ARouter ------JavaPoet 生成
  • ButterKnife
  • EventBus ------ 傳統(tǒng)方式一行一行生成

了解APT是什么?

APT(Annotation Processing Tool)

是一種處理注釋的工具纺念,它對(duì)源代碼文件進(jìn)行檢測找出其中的Annotation渠驼,根據(jù)注解自動(dòng)生成代碼羡鸥, 如果想要自定義的注解處理器能夠正常運(yùn)行蔑穴,必須要通過APT工具來進(jìn)行處理。 也可以這樣理解惧浴,只有通過聲明APT工具后存和,程序在編譯期間自定義注解解釋器才能執(zhí)行。

通俗理解:根據(jù)規(guī)則衷旅,幫我們生成代碼捐腿、生成類文件

APT中用到的重要元素

PackageElement
表示一個(gè)包程序元素。提供對(duì)有關(guān)包及其成員的信息的訪問
ExecutableElement
表示某個(gè)類或接口的方法柿顶、構(gòu)造方法或初始化程序(靜態(tài)或?qū)嵗?
TypeElement
表示一個(gè)類或接口程序元素茄袖。提供對(duì)有關(guān)類型及其成員的信息的訪問。
VariableElement
表示一個(gè)字段嘁锯、enum 常量宪祥、方法或構(gòu)造方法參數(shù)、局部變量或異常參數(shù)

APT中用到API

屬性名 描述
getEnclosedElements() 返回該元素直接包含的子元素
getEnclosingElement() 返回包含該element的父element家乘,與上一個(gè)方法相反
getKind() 返回element的類型蝗羊,判斷是哪種element
getModifiers() 獲取修飾關(guān)鍵字,入public static final等關(guān)鍵字
getSimpleName() 獲取名字,不帶包名
getQualifiedName() 獲取全名仁锯,如果是類的話耀找,包含完整的包名路徑
getParameters() 獲取方法的參數(shù)元素,每個(gè)元素是一個(gè)VariableElement
getReturnType() 獲取方法元素的返回值
getConstantValue() 如果屬性變量被final修飾业崖,則可以使用該方法獲取它的值

工作原理
APT 編譯的時(shí)候 ---> 處理注解
APT 傳統(tǒng)方式 ---> 生成 java文件
APT JavaPoet方式 --> 生成Java文件

傳統(tǒng)方式 那些 開源項(xiàng)目有用到?

類似EventBus源碼就知道了
傳統(tǒng)方式:優(yōu)點(diǎn)(編程的流程寫下去) 缺點(diǎn)(沒有oop思想加入進(jìn)來)

JavaPoet是什么?

JavaPoet是square推出的開源java代碼生成框架野芒,提供Java Api生成.java源文件 這個(gè)框架功能非常實(shí)用,也是我們習(xí)慣的Java面向?qū)ο驩OP語法 可以很方便的使用它根據(jù)注解生成對(duì)應(yīng)代碼
通過這種自動(dòng)化生成代碼的方式腻要, 可以讓我們用更加簡潔優(yōu)雅的方式要替代繁瑣冗雜的重復(fù)工作

項(xiàng)目主頁及源碼:https://github.com/square/javapoet

JavaPoet相關(guān)API

類對(duì)象 說明
MethodSpec 代表一個(gè)構(gòu)造函數(shù)或方法聲明
TypeSpec 代表一個(gè)類复罐,接口,或者枚舉聲明
FieldSpec 代表一個(gè)成員變量雄家,一個(gè)字段聲明
JavaFile 包含一個(gè)頂級(jí)類的Java文件
ParameterSpec 用來創(chuàng)建參數(shù)
AnnotationSpec 用來創(chuàng)建注解
ClassName 用來包裝一個(gè)類
TypeName 類型效诅,如在添加返回值類型是使用 TypeName.VOID
$S 字符串,如:$S, ”hello”,
$T 類趟济、接口乱投,如:$T, MainActivity

JavaPoet到底是什么?

oop思想方式:優(yōu)點(diǎn)(加入oop思想) 缺點(diǎn)(不習(xí)慣,倒序)

JavaPoet對(duì)比.png

JavaPoet真的比傳統(tǒng)方式好嗎?

并不是這樣的顷编,如果復(fù)雜的代碼生成戚炫,反而效率低下.發(fā)展趨勢,oop思想媳纬,真正的掌握J(rèn)avaPoet双肤,非常受用

看下一般的模塊思路

架構(gòu)大多數(shù)用到的套路.png

arouter-annotation 存放所有的注解
arouter-compiler 注解處理器施掏,APT。服務(wù)茅糜,盯著整個(gè)項(xiàng)目七芭,如果你在編譯,我就知道

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載蔑赘,如需轉(zhuǎn)載請(qǐng)通過簡信或評(píng)論聯(lián)系作者狸驳。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市缩赛,隨后出現(xiàn)的幾起案子耙箍,更是在濱河造成了極大的恐慌,老刑警劉巖酥馍,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辩昆,死亡現(xiàn)場離奇詭異,居然都是意外死亡物喷,警方通過查閱死者的電腦和手機(jī)卤材,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來峦失,“玉大人扇丛,你說我怎么就攤上這事∥炯” “怎么了帆精?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長隧魄。 經(jīng)常有香客問我卓练,道長,這世上最難降的妖魔是什么购啄? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任襟企,我火速辦了婚禮,結(jié)果婚禮上狮含,老公的妹妹穿的比我還像新娘顽悼。我一直安慰自己,他們只是感情好几迄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布蔚龙。 她就那樣靜靜地躺著,像睡著了一般映胁。 火紅的嫁衣襯著肌膚如雪木羹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天解孙,我揣著相機(jī)與錄音坑填,去河邊找鬼抛人。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脐瑰,可吹牛的內(nèi)容都是我干的函匕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蚪黑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了中剩?” 一聲冷哼從身側(cè)響起忌穿,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎结啼,沒想到半個(gè)月后掠剑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郊愧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年朴译,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片属铁。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡眠寿,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出焦蘑,到底是詐尸還是另有隱情盯拱,我是刑警寧澤,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布例嘱,位于F島的核電站狡逢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏拼卵。R本人自食惡果不足惜奢浑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腋腮。 院中可真熱鬧雀彼,春花似錦、人聲如沸低葫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘿悬。三九已至实柠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間善涨,已是汗流浹背窒盐。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工草则, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蟹漓。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓炕横,卻偏偏與公主長得像,于是被迫代替她去往敵國和親葡粒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子份殿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

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