freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

手動實(shí)現(xiàn)ioc框架(已修改)

2025-07-07 07:05 本頁面
 

【正文】 手動實(shí)現(xiàn)IOC框架自序在開發(fā)Android中,總要寫許多的findViewById方法,這無疑是一件非常痛苦的事情。直到接觸了Xutils框架,發(fā)現(xiàn)竟然可以使用注解的方式,優(yōu)雅的干掉了findViewById方法,當(dāng)時真是驚為天人。后來遇到了Butterknife之后,發(fā)現(xiàn)不僅能夠通過實(shí)現(xiàn)findViewById方法,甚至連setOnClickListener,getString(),getResource()方法,都能通過一行注解的方式快速的實(shí)現(xiàn)。當(dāng)時在使用過程中,感覺這種方式大大的提高了開發(fā)的效率,以及編碼的舒暢度,自己很有必要實(shí)現(xiàn)以下。于是便有了這篇博客,該篇博客主要實(shí)現(xiàn)了findViewById方法,雖然廣度不是很大,但他們的原理都是相同的。如何使用使用方式和Butterknife相似,通過注解@BindView標(biāo)識控件,(this)實(shí)現(xiàn)代碼的注入。public class MainActivity extends AppCompatActivity { // 通過注解綁定控件 @BindView() TextView textView。 @Override protected void onCreate(Bundle savedInstanceState) { (savedInstanceState)。 setContentView()。 //代碼注入 (this)。 (123)。 }}實(shí)現(xiàn)原理實(shí)現(xiàn)方式有兩種通過反射實(shí)現(xiàn):如果對于反射有深入了解,則應(yīng)該清楚,我們可以通過反射獲取到該注解,并且獲取到該注解的值等等一系列的必須量,通過反射我們實(shí)現(xiàn)對控件的注入。該方法雖然可以實(shí)現(xiàn),但對效率有著一定的影響。畢竟反射很影響效率。通過編譯器生成代碼實(shí)現(xiàn):在我們運(yùn)行Java代碼的時候,然后運(yùn)行class文件,那么我們能不能夠在編譯時期,根據(jù)我們的注解生成findViewById等方法,這樣我們就能夠在運(yùn)行期查找控件。結(jié)果當(dāng)然是可以的,本例就是使用這種方式。因?yàn)殡m然其使用的是注解,但在運(yùn)行期其實(shí)質(zhì)仍是通過findViewById方法查找控件,相比于反射來說,大大的提高了性能。通過編譯器生成代碼的大致流程如下:編寫Modul:iocannotation,該工程主要定義注解@BindView用以修飾變量。編寫Modul:iocpiler,該工程為最終會打成jar包,主要是在javac編譯時期根據(jù)注解生成注入代碼的相關(guān)類編寫Modul:iocapi,(),調(diào)用代碼注入的方法。編寫Modul:app,測試工程。代碼實(shí)現(xiàn)根據(jù)上面的流程,開始實(shí)現(xiàn)框架編寫iocannotation模塊該模塊比較簡單,就是定義一個注解。如下:@Retention()@Target()public @interface BindView { int value()。}該注解主要有兩個功能:在Activity中修飾變量,用以標(biāo)識需要findViewById的相關(guān)控件。在iocpiler模塊中,用以檢索和獲取需要findViewById的控件。編寫iocpiler模塊在之前我們提到過,該框架的原理是在編譯時期根據(jù)我們的要求生成注入的輔助代碼,那么如何生成,以何種規(guī)則生成,肯定是由我們來定義的。javac命令中,(后面再說),這樣運(yùn)行javac命令之前,javac會調(diào)用jar,通過這種特性訂制一些我們想實(shí)現(xiàn)的功能。那么看一下該模塊的關(guān)鍵類IocProcessor@AutoService()public class IocProcessor extends AbstractProcessor { // 文件相關(guān)的輔助類,生成JavaSouceCode private Filer mFileUtils。 private Elements mElementUtils。 // 日志相關(guān) private Messager mMessager。 private Types mTypeUtils。 @Override public synchronized void init(ProcessingEnvironment processingEnvironment) {
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1