精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java注解和注解解析器深耕,架構師必會

開發 前端 新聞
本文將介紹學習 元數據->元注解->運行時注解->編譯時注解處理器- >自定義框架Demo

什么是元數據(metadata)

元數據由metadata譯來,所謂的元數據就是“關于數據的數據”,更通俗的說就是描述數據的數據,對數據及信息資源的描述性信息.比如說一個文本文件,有創建時間,創建人,文件大小等數據,這都可以理解為是元數據.

在java中,元數據以標簽的形式存在java代碼中,它的存在并不影響程序代碼的編譯和執行,通常它被用來生成其它的文件或運行時知道被運行代碼的描述信息。java當中的javadoc和注解都屬于元數據.

什么是注解(Annotation)?

注解是從java 5.0開始加入,可以用于標注包,類,方法,變量等.比如我們常見的@Override,再或者Android源碼中的@hide,@systemApi,@privateApi等

對于@Override,多數人往往都是知其然而不知其所以然,今天我就來聊聊Annotation背后的秘密,開始正文.

元注解就是定義注解的注解,是java提供給我們用于定義注解的基本注解.在java.lang.annotation包中我們可以看到目前元注解共有以下幾個:

  1. @Retention

  2. @Target

  3. @Inherited

  4. @Documented

  5. @interface

下面我們將集合@Override注解來解釋著5個基本注解的用法.

@interface

@interface是java中用于聲明注解類的關鍵字.使用該注解表示將自動繼承java.lang.annotation.Annotation類,該過程交給編譯器完成.

因此我們想要定義一個注解只需要如下做即可,以@Override注解為例

  1. public @interface Override { 

需要注意:在定義注解時,不能繼承其他注解或接口

@Retention

@Retention:該注解用于定義注解保留策略,即定義的注解類在什么時候存在(源碼階段 or 編譯后 or 運行階段).該注解接受以下幾個參數: RetentionPolicy.SOURCE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME ,其具體使用及含義如下:

來看一下@Override注解的保留策略:

  1. @Retention(RetentionPolicy.SOURCE) 
  2. public @interface Override { 

這表明@Override注解只在源碼階段存在,javac在編譯過程中去去掉該注解.

@Target

該注解用于定義注解的作用目標,即注解可以用在什么地方,比如是用于方法上還是用于字段上,該注解接受以下參數:

以@Override為例,不難看出其作用目標為方法:

  1. @Target(ElementType.METHOD) 
  2. public @interface Override { 

到現在,通過@interface,@Retention,@Target已經可以完整的定義一個注解,來看@Override完整定義:

  1. @Target(ElementType.METHOD) 
  2. @Retention(RetentionPolicy.SOURCE) 
  3. public @interface Override { 

@Inherited

默認情況下,我們自定義的注解用在父類上不會被子類所繼承.如果想讓子類也繼承父類的注解,即注解在子類也生效,需要在自定義注解時設置@Inherited.一般情況下該注解用的比較少.

@Documented

該注解用于描述其它類型的annotation應該被javadoc文檔化,出現在api doc中.

比如使用該注解的@Target會出出現在api說明中.

  1. @Documented 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. @Target(ElementType.ANNOTATION_TYPE) 
  4. public @interface Target { 
  5.  
  6.  
  7.  
  8.  
  9.     ElementType[] value(); 

借助@Interface,@Target,@Retention,@Inherited,@Documented這五個元注解,
我們就可以自定義注解了,其中前三個注解是任何一個注解都必備具備的.

自定義注解

格式:

  1. public @interface 注解名 {定義體} 

定義體就是方法的集合,每個方法實則是聲明了一個配置參數.方法的名稱作為配置參數的名稱,方法的返回值類型就是配置參數的類型.和普通的方法不一樣,可以通過default關鍵字來聲明配置參數的默認值.

需要注意:

此處只能使用public或者默認的defalt兩個權限修飾符

配置參數的類型只能使用基本類型(byte,boolean,char,short,int,long,float,double)和String,Enum,Class,annotation

對于只含有一個配置參數的注解,參數名建議設置中value,即方法名為value

配置參數一旦設置,其參數值必須有確定的值,要不在使用注解的時候指定,要不在定義注解的時候使用default為其設置默認值,對于非基本類型的參數值來說,其不能為null.

像@Override這樣,沒有成員定義的注解稱之為標記注解.

注解處理器

上面我們已經學會了如何定義注解,要想注解發揮實際作用,需要我們為注解編寫相應的注解處理器.根據注解的特性,注解處理器可以分為運行時注解處理和編譯時注解處理器.運行時處理器需要借助反射機制實現,而編譯時處理器則需要借助APT來實現.

無論是運行時注解處理器還是編譯時注解處理器,主要工作都是讀取注解及處理特定注解,從這個角度來看注解處理器還是非常容易理解的.

注解處理器是(Annotation Processor)是javac的一個工具,用來在編譯時掃描和編譯和處理注解(Annotation)。你可以自己定義注解和注解處理器去搞一些事情。一個注解處理器它以Java代碼或者(編譯過的字節碼)作為輸入,生成文件(通常是java文件)。這些生成的java文件不能修改,并且會同其手動編寫的java代碼一樣會被javac編譯。看到這里加上之前理解,應該明白大概的過程了,就是把標記了注解的類,變量等作為輸入內容,經過注解處理器處理,生成想要生成的java代碼。

運行時注解處理器(不建議使用)

熟悉java反射機制的同學一定對java.lang.reflect包非常熟悉,該包中的所有api都支持讀取運行時Annotation的能力,即屬性為@Retention(RetentionPolicy.RUNTIME)的注解.

在java.lang.reflect中的AnnotatedElement接口是所有程序元素的(Class,Method)父接口,我們可以通過反射獲取到某個類的AnnotatedElement對象,進而可以通過該對象提供的方法訪問Annotation信息,常用的方法如下:

運行時注解處理器的編寫本質上就是通過反射獲取注解信息,隨后進行其他操作。編譯一個運行時注解處理器就是這么簡單。運行時注解通常多用于參數配置類模塊。

編譯時注解處理器

不同于運行時注解處理器,編寫編譯時注解處理器(Annotation Processor Tool).

APT用于在編譯時期掃描和處理注解信息.一個特定的注解處理器可以以java源碼文件或編譯后的class文件作為輸入,然后輸出另一些文件,可以是.java文件,也可以是.class文件,但通常我們輸出的是.java文件.(注意:并不是對源文件修改).如果輸出的是.java文件,這些.java文件回合其他源碼文件一起被javac編譯.

你可能很納悶,注解處理器是到底是在什么階段介入的呢?好吧,其實是在javac開始編譯之前,這也就是通常我們為什么愿意輸出.java文件的原因.

注解最早是在java 5引入,主要包含apt和com.sum.mirror包中相關mirror api,此時apt和javac是各自獨立的。從java 6開始,注解處理器正式標準化,apt工具也被直接集成在javac當中。

我們還是回到如何編寫編譯時注解處理器這個話題上,編譯一個編譯時注解處理主要分兩步:

1、繼承AbstractProcessor,實現自己的注解處理器

2、注冊處理器,并打成jar包

首先來看一下一個標準的注解處理器的格式:

  1. public class MyAnnotationProcessor extends AbstractProcessor { 
  2.  
  3.  
  4.     @Override 
  5.     public Set<String> getSupportedAnnotationTypes() { 
  6.         return super.getSupportedAnnotationTypes(); 
  7.     } 
  8.  
  9.  
  10.     @Override 
  11.     public SourceVersion getSupportedSourceVersion() { 
  12.         return super.getSupportedSourceVersion(); 
  13.     } 
  14.  
  15.  
  16.     @Override 
  17.     public synchronized void init(ProcessingEnvironment processingEnv) { 
  18.         super.init(processingEnv); 
  19.     } 
  20.  
  21.  
  22.     @Override 
  23.     public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
  24.         return false
  25.     } 

編寫一個注解處理器首先要對ProcessingEnvironment和RoundEnvironment非常熟悉。接下來我們一覽這兩個類的風采.首先來看一下ProcessingEnvironment類:

  1. public interface ProcessingEnvironment { 
  2.  
  3.  
  4.     Map<String,String> getOptions(); 
  5.  
  6.  
  7.     //Messager用來報告錯誤,警告和其他提示信息 
  8.     Messager getMessager(); 
  9.  
  10.  
  11.     //Filter用來創建新的源文件,class文件以及輔助文件 
  12.     Filer getFiler(); 
  13.  
  14.  
  15.     //Elements中包含用于操作Element的工具方法 
  16.     Elements getElementUtils(); 
  17.  
  18.  
  19.      //Types中包含用于操作TypeMirror的工具方法 
  20.     Types getTypeUtils(); 
  21.  
  22.  
  23.     SourceVersion getSourceVersion(); 
  24.  
  25.  
  26.     Locale getLocale(); 

Element

element表示一個靜態的,語言級別的構件。而任何一個結構化文檔都可以看作是由不同的element組成的結構體,比如XML,JSON等。

對于java源文件來說, Element代表程序元素:包,類,方法都是一種程序元素 ,他同樣是一種結構化文檔:

  1. package com.closedevice;             //PackageElement 
  2. public class Main{                  //TypeElement 
  3.     private int x;                  //VariableElement 
  4.     private Main(){                 //ExecuteableElement 
  5.     } 
  6.     private void print(String msg){ //其中的參數部分String msg為TypeElement 
  7.     } 

TypeMirror

這三個類也需要我們重點掌握:

DeclaredType代表聲明類型:類類型還是接口類型,當然也包括參數化類型,比如Set<String>,也包括原始類型

TypeElement代表類或接口元素,而DeclaredType代表類類型或接口類型。

TypeMirror代表java語言中的類型.Types包括基本類型,聲明類型(類類型和接口類型),數組,類型變量和空類型。也代表通配類型參數,可執行文件的簽名和返回類型等。TypeMirror類中最重要的是getKind()方法,該方法返回TypeKind類型,為了方便大家理解,這里附上其源碼:

  1. public enum TypeKind { 
  2.     BOOLEAN,BYTE,SHORT,INT,LONG,CHAR,FLOAT,DOUBLE,VOID,NONE,NULL,ARRAY,DECLARED,ERROR,  TYPEVAR,WILDCARD,PACKAGE,EXECUTABLE,OTHER,UNION,INTERSECTION; 
  3.     public boolean isPrimitive() { 
  4.         switch(this) { 
  5.         case BOOLEAN: 
  6.         case BYTE: 
  7.         case SHORT: 
  8.         case INT: 
  9.         case LONG: 
  10.         case CHAR: 
  11.         case FLOAT: 
  12.         case DOUBLE: 
  13.             return true
  14.         default
  15.             return false
  16.         } 
  17.     } 

簡單來說,Element代表源代碼,TypeElement代表的是源碼中的類型元素,比如類。雖然我們可以從TypeElement中獲取類名,TypeElement中不包含類本身的信息,比如它的父類,要想獲取這信息需要借助TypeMirror,可以通過Element中的asType()獲取元素對應的TypeMirror。

然后來看一下RoundEnvironment,這個類比較簡單,一筆帶過:

  1. public interface RoundEnvironment { 
  2.     boolean processingOver(); 
  3.      //上一輪注解處理器是否產生錯誤 
  4.     boolean errorRaised(); 
  5.      //返回上一輪注解處理器生成的根元素 
  6.     Set<? extends Element> getRootElements(); 
  7.    //返回包含指定注解類型的元素的集合 
  8.     Set<? extends Element> getElementsAnnotatedWith(TypeElement a); 
  9.     //返回包含指定注解類型的元素的集合 
  10.     Set<? extends Element> getElementsAnnotatedWith(Class<? extends Annotation> a); 

Filer

Filer用于注解處理器中創建新文件,由于Filer用起來實在比較麻煩,后面我們會使用javapoet簡化我們的操作.

打包注解處理器的時候需要一個特殊的文件 javax.annotation.processing.Processor 在 META-INF/services 路徑下

新建項目必要配置:

  1. //javapoet代碼生成框架 
  2. implementation  'com.squareup:javapoet:1.8.0'  
  3. //注解處理器 
  4. implementation 'com.google.auto.service:auto-service:1.0-rc6' 
  5. annotationProcessor  'com.google.auto.service:auto-service:1.0-rc6' 

編譯時注解demo示例地址:https://gitee.com/yutg/apt.git

項目結構

  1. --apt-demo 
  2. ----bindview-annotation(Java Library)//注解定義 
  3. ----bindview-api(Android Library)//定義SDK接口方法 
  4. ----bindview-compiler(Java Library)//注解處理器相關操作及生成java文件 
  5. ----app(Android App) 

 

責任編輯:張燕妮 來源: Android技術之家
相關推薦

2021-10-31 19:39:11

注解Spring 核心類

2025-03-13 07:33:46

Spring項目開發

2021-12-30 12:30:01

Java注解編譯器

2025-03-10 01:00:00

Spring參數解析器

2017-09-30 16:06:28

代碼注解分析

2023-03-30 16:16:00

Java自定義注解開發

2023-03-27 08:12:40

源碼場景案例

2023-03-06 11:13:20

Spring注解加載

2023-03-13 08:12:25

@DependsOn源碼場景

2023-05-08 08:11:49

@Component使用場景時序圖

2020-12-02 10:13:45

JacksonJDK解析器

2012-02-09 10:42:24

Java

2018-07-03 15:46:24

Java架構師源碼

2009-03-19 09:26:05

RSS解析器MagpieRSS

2020-10-30 07:09:52

Lombok架構師

2023-02-27 08:10:00

代理對象Spring

2009-12-09 10:31:32

ibmdwJava

2010-02-22 13:38:50

Python解析器

2020-12-02 11:56:16

Java注解Excel

2010-02-22 16:51:03

Python 解析器
點贊
收藏

51CTO技術棧公眾號

国产精品福利视频| 久久久91精品国产一区不卡| 国模无码视频一区二区三区| 丝袜视频国产在线播放| 欧美亚洲一区| 日韩一级黄色av| 蜜桃色一区二区三区| 成人性生活视频| 国产精品毛片久久久久久久| 99re在线视频上| 欧美精品韩国精品| 亚洲成人最新网站| 日韩av在线电影网| 欧美大片久久久| 精品极品在线| 国产亚洲一二三区| 99www免费人成精品| 欧美一级特黄视频| 欧美在线免费一级片| 亚洲精品在线视频| 欧美污在线观看| 成人片免费看| 一区二区三区不卡在线观看| 欧美极品色图| 成人h动漫精品一区二区无码| 免费看的黄色欧美网站| 欧美成年人网站| 白白色免费视频| 久久伊人精品| 欧美亚洲国产bt| 久久久久久久久久久99| 超碰在线最新| 久久精品水蜜桃av综合天堂| 国产精品日韩欧美一区二区| 国产99久久九九精品无码免费| 先锋影音久久久| 久久久久中文字幕| 久久免费看少妇高潮v片特黄| 九九精品在线| 亚洲国产成人精品女人久久久| 色91精品久久久久久久久| 欧美大胆成人| 懂色av中文一区二区三区天美| 肉大捧一出免费观看网站在线播放 | 国产h视频在线播放| 成a人片在线观看| 国产精品视频看| 女人一区二区三区| 网站黄在线观看| 成人性生交大片免费看中文 | 在线精品高清中文字幕| 国产中文字幕一区二区| www.国产精品一区| 日韩精品一区二区三区老鸭窝| 中文字幕成人免费视频| 78精品国产综合久久香蕉| 精品福利在线观看| 青青草国产精品视频| 免费不卡av| 亚洲一区精品在线| 99在线观看视频免费| 色呦呦在线免费观看| 一区二区三区在线视频免费| 成人手机在线播放| 最新国产在线拍揄自揄视频| 亚洲精品欧美激情| 麻豆视频传媒入口| 欧美日韩经典丝袜| 亚洲高清免费观看高清完整版在线观看 | 久久久久亚洲精品国产| 精品视频一区二区在线观看| 亚洲午夜久久久久久尤物| 欧美大片在线免费观看| 国产无遮无挡120秒| 国产日韩欧美一区在线| 国产91av在线| 波多野结衣一二区| 久久精品国产成人一区二区三区 | 2021狠狠干| 日本动漫同人动漫在线观看| 亚洲18色成人| 成人一级片网站| 欧美亚洲大片| 5月丁香婷婷综合| www.四虎精品| 午夜欧洲一区| 国产亚洲精品91在线| 亚洲av无一区二区三区| 国产精品av久久久久久麻豆网| 午夜精品久久久久久99热| 日本在线播放视频| 免费观看日韩电影| 国产精品国产精品国产专区蜜臀ah | 三级久久三级久久久| 国产日本欧美一区二区三区在线 | 蜜桃视频一区二区三区| 92国产精品久久久久首页 | 国精产品一区一区三区mba视频| 亚洲最大的网站| 无码精品人妻一区二区三区影院| 久久九九国产精品| 中文字幕在线中文| 性感美女一区二区在线观看| 91精品国产综合久久久蜜臀粉嫩| 老司机免费视频| 日本在线电影一区二区三区| 色综合久综合久久综合久鬼88| 波多野结衣国产| 精品一区二区三区免费播放| 久久伦理网站| av网站免费在线观看| 欧美性猛交xxx| 日韩欧美中文视频| 免费看日本一区二区| 久久夜精品va视频免费观看| 欧产日产国产69| 国产精品中文有码| 日本高清一区| av影片在线| 欧美丰满一区二区免费视频| 毛片网站免费观看| 伊人青青综合网| 国产精品激情av在线播放| 亚洲欧美另类一区| 成人欧美一区二区三区白人| 欧美韩国日本在线| 97精品久久| 久久视频免费观看| 中文在线资源天堂| 久久亚洲精精品中文字幕早川悠里 | 欧美亚洲成人精品| 亚洲av永久纯肉无码精品动漫| 国产午夜久久久久| 欧美视频在线播放一区| 911精品国产| www.亚洲天堂| 中文字幕在线视频免费| 91女人视频在线观看| 国产乱人伦精品一区二区三区| 国产一区精品福利| 亚洲香蕉成人av网站在线观看 | 在线影院国内精品| 玖草视频在线观看| 日韩网站在线| 国产伦精品一区二区三区免费视频 | 成人av第一页| 久操手机在线视频| 国产精品亚洲欧美一级在线| 久久九九热免费视频| 在线中文字幕网站| 中文字幕av不卡| 中文字幕第80页| 国产一区二区精品久| 欧美专区福利在线| 四虎在线免费观看| 欧美天堂在线观看| 色天使在线视频| 亚洲综合99| 日本不卡高清视频一区| 456成人影院在线观看| 亚洲新声在线观看| 久久久999久久久| 欧美激情一区二区三区全黄| 国产精品入口免费软件| 91日韩在线| 亚洲www视频| 日皮视频在线观看| 亚洲高清av在线| 男女啊啊啊视频| 久久嫩草精品久久久精品一| 亚洲人成色77777| 不卡一区2区| 成人国产精品av| 最爽无遮挡行房视频在线| 精品国产1区二区| 天天爽夜夜爽夜夜爽精品| 久久青草欧美一区二区三区| www欧美激情| 羞羞色午夜精品一区二区三区| 亚洲一区二区三区视频播放| 日韩另类在线| 亚洲黄页网在线观看| 亚洲国产av一区二区三区| 中文字幕一区二区不卡| 欧美xxxx日本和非洲| 国产精品久久久久久久久久妞妞| 欧美不卡三区| 自拍偷拍亚洲| 韩国一区二区电影| 电影av一区| 欧美一级日韩免费不卡| 亚洲精品视频在线观看免费视频| 久久综合九色综合欧美98| 亚洲成人天堂网| 影音国产精品| 手机成人在线| 亚洲国产中文在线| 国产mv免费观看入口亚洲| 国产在线看片| 日韩高清免费在线| 国产精品自拍电影| 精品欧美激情精品一区| 九九热久久免费视频| 国产91在线观看丝袜| 国产97色在线 | 日韩| 欧美69视频| 欧美专区一二三 | 日韩一区二区电影| 欧产日产国产69| 亚洲精品成人少妇| 色婷婷在线影院| 国产成都精品91一区二区三| 成人羞羞国产免费网站| 欧美a级在线| 日本一区二区三区四区高清视频 | 狠狠爱一区二区三区| 亚洲不卡系列| 性欧美视频videos6一9| 日本高清视频在线观看| 亚洲精品午夜精品| 精品国产无码AV| 欧美日韩国产精品自在自线| 亚洲国产成人精品激情在线| 亚洲三级电影全部在线观看高清| 菠萝菠萝蜜网站| 成人精品视频一区二区三区| 九一精品久久久| 日韩国产欧美在线播放| 欧美精品一区免费| 一区在线视频观看| 黑人巨茎大战欧美白妇| 影音先锋日韩精品| 亚洲午夜精品福利| 欧美日韩精品一区二区视频| 久久精品丝袜高跟鞋| 盗摄系列偷拍视频精品tp| 亚洲精品免费在线视频| 日韩午夜电影免费看| 国产精品美乳在线观看| 伊人成综合网站| 97视频免费看| 91av久久| 午夜精品久久17c| 国产美女一区视频| 欧美激情一区二区三级高清视频| 黄色在线论坛| 超碰97人人做人人爱少妇| 伊人免费在线| 日韩在线视频网站| 成人免费视频| 国产一区二区三区在线免费观看| 亚洲欧美一区二区三| 亚洲国产毛片完整版| 日韩一区免费视频| 日韩精品视频三区| 日本在线丨区| 亚洲一区第一页| 浮生影视网在线观看免费| 亚洲欧美日韩久久久久久| 牛牛澡牛牛爽一区二区| 亚洲网址你懂得| 午夜不卡视频| 成年人精品视频| av在线导航| 欧美激情视频在线免费观看 欧美视频免费一| 日本不卡不卡| 久99九色视频在线观看| 欧美家庭影院| 国语自产精品视频在线看| 免费一二一二在线视频| 国产成人综合久久| 黄色成人在线视频| 91美女高潮出水| 国产精品jk白丝蜜臀av小说| 久久精品一区二区三区不卡免费视频| 天天久久夜夜| 色999五月色| 综合久久99| 国产av天堂无码一区二区三区| 性xx色xx综合久久久xx| 九九热精品在线播放| 国产伦精品一区二区三区免费| 成人在线电影网站| 久久亚洲私人国产精品va媚药| 欧美自拍偷拍网| 一区二区在线免费观看| 精品美女久久久久| 欧美日本在线播放| 全国男人的天堂网| 亚洲最新av在线| 日韩精品亚洲人成在线观看| 欧美中文在线视频| 99综合久久| 精品伊人久久大线蕉色首页| 日韩在线观看一区 | 亚洲一区中文字幕在线观看| 福利电影一区| 亚洲图片小说在线| 一道本一区二区| 一级黄色高清视频| 久久久激情视频| a级片在线观看免费| 日韩欧美精品网址| av老司机久久| 国产亚洲a∨片在线观看| 欧洲性视频在线播放| 国产精品白丝jk喷水视频一区| 蜜桃精品视频| 日韩免费中文专区| 99国产精品久久久久久久| 五月天婷婷亚洲| 91香蕉视频mp4| 欧美精品久久久久性色| 欧美网站大全在线观看| 天天操天天干天天| 欧美成人免费在线观看| 91av亚洲| 国产精品久久久久久久久久久久冷| 成人毛片在线| 成人免费在线小视频| 国产精品夜夜嗨| 国产综合精品久久久久成人av| 亚洲va欧美va人人爽| 国产一区二区三区中文字幕| 亚洲美女av电影| 精品精品导航| 91视频8mav| 久久综合国产| 少妇激情一区二区三区| 99久久久久久99| 久久久久无码精品国产| 欧美精品一二三四| 99re热久久这里只有精品34| 国产成人短视频| 米奇精品关键词| 300部国产真实乱| 久久激五月天综合精品| 东京热无码av男人的天堂| 日本久久精品电影| 免费在线观看一级毛片| 欧亚精品中文字幕| 欧美午夜18电影| 欧美日本视频在线观看| 福利一区二区在线| 久久久久久久久毛片| 91精品国产综合久久精品app | 欧美亚洲另类色图| www.亚洲在线| 日韩三级一区二区三区| 亚洲高清不卡av| 国产美女高潮在线观看| 国语精品中文字幕| 国产亚洲激情| 国产精品三级在线观看无码| 欧美午夜精品在线| 玖玖综合伊人| 国产成人精品久久久| 国产一区二区三区电影在线观看| 精品久久久久久久无码| 久久久久久日产精品| 无码人妻精品一区二区三区9厂| 亚洲人成电影网站色xx| 久久久人成影片一区二区三区在哪下载 | 亚洲天堂中文在线| 精品国产拍在线观看| 欧美成人精品午夜一区二区| 4444亚洲人成无码网在线观看| 成人高清视频在线| 香蕉影院在线观看| 在线亚洲男人天堂| 精品91福利视频| 日韩成人三级视频| 26uuu亚洲婷婷狠狠天堂| 无码免费一区二区三区| 久久精视频免费在线久久完整在线看| 99精品美女视频在线观看热舞| 无码人妻精品一区二区蜜桃百度| 成人一区二区视频| 久久久久久久极品| 中文字幕欧美日韩| 久久免费福利| 东京热加勒比无码少妇| 中文字幕 久热精品 视频在线| 国产精品人人爽| 午夜精品蜜臀一区二区三区免费 | 新呦u视频一区二区| 国内成人免费视频| 亚洲精品www久久久久久| 亚洲欧美一区二区三区在线| 91精品福利观看| 亚洲精品无码国产| 亚洲国产成人一区二区三区| www香蕉视频| 欧美亚洲视频在线看网址| 欧美电影一区| 亚洲精品女人久久久| 欧美日韩国产另类不卡| 午夜激情电影在线播放| 亚洲一卡二卡三卡四卡无卡网站在线看 | 91极品女神在线|