上一篇博客討論了關(guān)于注解的基礎(chǔ)知識,以及運(yùn)行時(Runtime)通過反射機(jī)制來處理注解,但既然是Runtime,那么總會有效率上的損耗,如果我們能夠在編譯期(Compile time)就能處理注解,那自然更好,而很多框架其實(shí)都是在編譯期處理注解,比如大名鼎鼎的bufferknife,這個過程并不復(fù)雜,只需要我們自定義注解處理器(Annotation Processor)就可以了。(Annotation Processor下文有些地方直接簡稱處理器,不要理解成cpu那個處理器)。

在Compile time注解就能起作用,這才是真正體現(xiàn)注解價值的地方,不過自定義Compile time的注解處理器也沒什么神秘的。注解處理器是編譯器(javac)的一個工具,它用來在編譯時掃描和處理注解。我們可以自定義一個注解,并編寫和注冊對應(yīng)的處理器。在寫法上它其實(shí)就是我們自定義一個類,該類 extends javax.annotation.processing.AbstractProcessor, AbstractProcessor是一個abstract的基類。它以我們寫好的java源碼或者編譯好的代碼做為輸入,然后就可以通過處理器代碼來實(shí)現(xiàn)我們所希望的輸出了,比如輸出一份新的java代碼,此時注解管理器就以遞歸的形式進(jìn)行多趟處理,直到把代碼(包括你手寫的代碼,以及注解處理器生成的代碼)中所有的注解都被處理完畢。

我們已經(jīng)寫好的代碼固然是不能修改了,但是這并不影響通過注解處理器來生成新的代碼。還以bufferknife為例,寫findViewById實(shí)在太無聊了,所以我們就使用了bufferknife的注解方式省略這個過程。

public class TestMainActivity extends BaseActivity {    @BindView(R.id.mainSwitchGoneBtn)
    Button goneBtn;
    .......
}

但是實(shí)際上呢,是bufferknife通過其注解處理器器來生成了相應(yīng)的代碼,它生成的文件是這樣的:

        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式