内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解詳析-創(chuàng)新互聯(lián)

1. 一些基本概念

創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開(kāi)發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為近1000家服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

在開(kāi)始之前,我們需要聲明一件重要的事情是:我們不是在討論在運(yùn)行時(shí)通過(guò)反射機(jī)制運(yùn)行處理的注解,而是在討論在編譯時(shí)處理的注解。


編譯時(shí)注解跟運(yùn)行時(shí)注解到底區(qū)別在什么地方?其實(shí)說(shuō)大也不大,主要是考慮到性能上面的問(wèn)題。運(yùn)行時(shí)注解主要是完全依賴于反射,反射的效率比原生的慢,所以在內(nèi)存比較少,CPU比較爛的機(jī)器上會(huì)有一些卡頓現(xiàn)象出現(xiàn)。而編譯時(shí)注解完全不會(huì)有這個(gè)問(wèn)題,因?yàn)樗谖覀兙幾g過(guò)程(java->class)中,通過(guò)一些注解標(biāo)示,去動(dòng)態(tài)生成一些類或者文件,所以跟我們的APK運(yùn)行完全沒(méi)有任何關(guān)系,自然就不存在性能上的問(wèn)題。所以一般比較著名的開(kāi)源項(xiàng)目如果采用注解功能,通常采用編譯時(shí)注解

注解處理器是 javac 自帶的一個(gè)工具,用來(lái)在編譯時(shí)期掃描處理注解信息。你可以為某些注解注冊(cè)自己的注解處理器。這里,我假設(shè)你已經(jīng)了解什么是注解及如何自定義注解。如果你還未了解注解的話,可以查看官方文檔。注解處理器在 Java 5 的時(shí)候就已經(jīng)存在了,但直到 Java 6 (發(fā)布于2006看十二月)的時(shí)候才有可用的API。過(guò)了一段時(shí)間java的使用者們才意識(shí)到注解處理器的強(qiáng)大。所以最近幾年它才開(kāi)始流行。


一個(gè)特定注解的處理器以 java 源代碼(或者已編譯的字節(jié)碼)作為輸入,然后生成一些文件(通常是.java文件)作為輸出。那意味著什么呢?你可以生成 java 代碼!這些 java 代碼在生成的.java文件中。因此你不能改變已經(jīng)存在的java類,例如添加一個(gè)方法。這些生成的 java 文件跟其他手動(dòng)編寫(xiě)的 java 源代碼一樣,將會(huì)被 javac 編譯。

Annotation processing是在編譯階段執(zhí)行的,它的原理就是讀入Java源代碼,解析注解,然后生成新的Java代碼。新生成的Java代碼最后被編譯成Java字節(jié)碼,注解解析器(Annotation Processor)不能改變讀入的Java 類,比如不能加入或刪除Java方法。

2. AbstractProcessor

讓我們來(lái)看一下處理器的 API。所有的處理器都繼承了AbstractProcessor,如下所示:

package com.example;
import java.util.LinkedHashSet;
import java.util.Set;
import javax.annotation.processing.AbstractProcessor;
import javax.annotation.processing.ProcessingEnvironment;
import javax.annotation.processing.RoundEnvironment;
import javax.annotation.processing.SupportedAnnotationTypes;
import javax.annotation.processing.SupportedSourceVersion;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.TypeElement;

public class MyProcessor extends AbstractProcessor {

 @Override
 public boolean process(Set<? extends TypeElement> annoations,
  RoundEnvironment env) {
 return false;
 }

 @Override
 public Set<String> getSupportedAnnotationTypes() {
 Set<String> annotataions = new LinkedHashSet<String>();
 annotataions.add("com.example.MyAnnotation");
 return annotataions;
 }

 @Override
 public SourceVersion getSupportedSourceVersion() {
 return SourceVersion.latestSupported();
 }

 @Override
 public synchronized void init(ProcessingEnvironment processingEnv) {
 super.init(processingEnv);
 }
}

分享文章:Java注解處理器學(xué)習(xí)之編譯時(shí)處理的注解詳析-創(chuàng)新互聯(lián)
鏈接分享:http://www.rwnh.cn/article26/gdgjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、網(wǎng)站收錄商城網(wǎng)站、微信公眾號(hào)、網(wǎng)頁(yè)設(shè)計(jì)公司營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)
东兴市| 永新县| 上虞市| 宣汉县| 乐都县| 白山市| 鄢陵县| 新疆| 郧西县| 芦溪县| 咸宁市| 镇原县| 辛集市| 巴林左旗| 筠连县| 富顺县| 新源县| 青龙| 鸡泽县| 厦门市| 龙山县| 景谷| 奉贤区| 稷山县| 栖霞市| 云梦县| 镇巴县| 威信县| 滦平县| 柳州市| 古丈县| 阿拉善左旗| 岫岩| 扎鲁特旗| 揭西县| 手机| 高州市| 新宁县| 万年县| 巴林右旗| 胶南市|