黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

Java Annotation手冊

瀏覽:146日期:2024-06-15 09:50:53
內容: Java Annotation手冊作者:cleverpig版權聲明:本文可以自由轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)原文:http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html關鍵字:java,annotation,reflect前言:在上篇文章《Java Annotation入門》中概要性的介紹了Annotation的定義、使用,范圍涵蓋較廣,但是深度不夠。所以作者在《Java Annotation入門》后,繼續整理了Annotation的概念和知識點,與喜歡research的朋友們共享。閱讀提示:文中提到的程序成員或者程序元素是一個概念,指組成程序代碼的單元:如類、方法、成員變量。一、Annotation究竟是什么?Annotation提供了一條與程序元素關聯任何信息或者任何元數據(metadata)的途徑。從某些方面看,annotation就像修飾符一樣被使用,并應用于包、類型、構造方法、方法、成員變量、參數、本地變量的聲明中。這些信息被存儲在annotation的“name=value結構對中。annotation類型是一種接口,能夠通過java反射API的方式提供對其信息的訪問。annotation能被用來為某個程序元素(類、方法、成員變量等)關聯任何的信息。需要注意的是,這里存在著一個基本的潛規則:annotaion不能影響程序代碼的執行,無論增加、刪除annotation,代碼都始終如一的執行。另外,盡管一些annotation通過java的反射api方法在運行時被訪問,而java語言解釋器在工作時忽略了這些annotation。正是由于java虛擬機忽略了annotation,導致了annotation類型在代碼中是“不起作用的;只有通過某種配套的工具才會對annotation類型中的信息進行訪問和處理。本文中將涵蓋標準的annotation和meta-annotation類型,陪伴這些annotation類型的工具是java編譯器(當然要以某種特殊的方式處理它們)。由于上述原因,annotation在使用時十分簡便。一個本地變量可以被一個以NonNull命名的annotation類型所標注,來作為對這個本地變量不能被賦予null值的斷言。而我們可以編寫與之配套的一個annotation代碼分析工具,使用它來對具有前面變量的代碼進行解析,并且嘗試驗證這個斷言。當然這些代碼并不必自己編寫。在JDK安裝后,在JDK/bin目錄中可以找到名為“apt的工具,它提供了處理annotation的框架:它啟動后掃描源代碼中的annotation,并調用我們定義好的annotation處理器完成我們所要完成的工作(比如驗證前面例子中的斷言)。說到這里,annotation的強大功能似乎可以替代XDoclet這類的工具了,隨著我們的深入,大家會更加堅信這一點。注:詳細描述請參看jsr250規范:http://www.jcp.org/aboutJava/communityprocess/pfd/jsr250/二、Annotation的定義:這段文字開始介紹annotation相關技術。在此大家將看到java5.0的標準annotation類型,這種標準類型就是前文中所說的“內建類型,它們可以直接被javac支持。可喜的是,在java6.0beta版中的javac已經加入了對自定義annotation的支持。1。Annotation的概念和語法:首先,關鍵的概念是理解annotation是與一個程序元素相關聯信息或者元數據的標注。它從不影響java程序的執行,但是對例如編譯器警告或者像文檔生成器等輔助工具產生影響。下面是常用的annotation列表,我們應該注意在annotation和annotation類型之間的不同:A.annotation:annotation使用了在java5.0所帶來的新語法,它的行為十分類似public、final這樣的修飾符。每個annotation具有一個名字和成員個數>=0。每個annotation的成員具有被稱為name=value對的名字和值(就像javabean一樣),name=value裝載了annotation的信息。B.annotation類型:annotation類型定義了annotation的名字、類型、成員默認值。一個annotation類型可以說是一個特殊的java接口,它的成員變量是受限制的,而聲明annotation類型時需要使用新語法。當我們通過java反射api訪問annotation時,返回值將是一個實現了該annotation類型接口的對象,通過訪問這個對象我們能方便的訪問到其annotation成員。后面的章節將提到在java5.0的java.lang包里包含的3個標準annotation類型。C.annotation成員:annotation的成員在annotation類型中以無參數的方法的形式被聲明。其方法名和返回值定義了該成員的名字和類型。在此有一個特定的默認語法:允許聲明任何annotation成員的默認值:一個annotation可以將name=value對作為沒有定義默認值的annotation成員的值,當然也可以使用name=value對來覆蓋其它成員默認值。這一點有些近似類的繼承特性,父類的構造函數可以作為子類的默認構造函數,但是也可以被子類覆蓋。D.marker annotation類型:一個沒有成員定義的annotation類型被稱為marker annotation。這種annotation類型僅使用自身的存在與否來為我們提供信息。如后面要說的Override。E.meta-annotation:meta-annotation也稱為元annotation,它是被用來聲明annotation類型的annotation。Java5.0提供了一些標準的元-annotation類型。下面介紹的target、retention就是meta-annotation。F.target:annotation的target是一個被標注的程序元素。target說明了annotation所修飾的對象范圍:annotation可被用于packages、types(類、接口、枚舉、annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。在annotation類型的聲明中使用了target可更加明晰其修飾的目標。G.retention:annotation的retention定義了該annotation被保留的時間長短:某些annotation僅出現在源代碼中,而被編譯器丟棄;而另一些卻被編譯在class文件中;編譯在class文件中的annotation可能會被虛擬機忽略,而另一些在class被裝載時將被讀取(請注意并不影響class的執行,因為annotation與class在使用上是被分離的)。使用這個meta-annotation可以對annotation的“生命周期限制。H.metadata:由于metadata被廣泛使用于各種計算機開發過程中,所以當我們在這里談論的metadata即元數據通常指被annotation裝載的信息或者annotation本身。2。使用標準Annotation:java5.0在java.lang包中定義了3種標準的annotation類型:A.Override:java.lang.Override是一個marker annotation類型,它被用作標注方法。它說明了被標注的方法重載了父類的方法,起到了斷言的作用。如果我們使用了這種annotation在一個沒有覆蓋父類方法的方法時,java編譯器將以一個編譯錯誤來警示。這個annotaton常常在我們試圖覆蓋父類方法而確又寫錯了方法名時發揮威力。使用方法極其簡單:在使用此annotation時只要在被修飾的方法前面加上@Override。下面的代碼是一個使用@Override修飾一個企圖重載父類的toString方法,而又存在拼寫錯誤的sample:清單1:@Overridepublic String toSting() { // 注意方法名拼寫錯了 return '[' + super.toString() + ']';}B.Deprecated:同樣Deprecated也是一個marker annotation。當一個類型或者類型成員使用@Deprecated修飾的話,編譯器將不鼓勵使用這個被標注的程序元素。而且這種修飾具有一定的“延續性:如果我們在代碼中通過繼承或者覆蓋的方式使用了這個過時的類型或者成員,雖然繼承或者覆蓋后的類型或者成員并不是被聲明為@Deprecated,但編譯器仍然要報警。值得注意,@Deprecated這個annotation類型和javadoc中的@deprecated這個tag是有區別的:前者是java編譯器識別的,而后者是被javadoc工具所識別用來生成文檔(包含程序成員為什么已經過時、它應當如何被禁止或者替代的描述)。在java5.0,java編譯器仍然象其從前版本那樣尋找@deprecated這個javadoc tag,并使用它們產生警告信息。但是這種狀況將在后續版本中改變,我們應在現在就開始使用@Deprecated來修飾過時的方法而不是@deprecated javadoc tag。清單2:下面是一段使用@Deprecated的代碼:/** * 這里是javadoc的@deprecated聲明. * @deprecated No one has players for this format any more. Use VHS instead. */@Deprecated public class Betamax { ... }C.SuppressWarnings:@SuppressWarnings被用于有選擇的關閉編譯器對類、方法、成員變量、變量初始化的警告。在java5.0,sun提供的javac編譯器為我們提供了-Xlint選項來使編譯器對合法的程序代碼提出警告,此種警告從某種程度上代表了程序錯誤。例如當我們使用一個generic collection類而又沒有提供它的類型時,編譯器將提示出'unchecked warning'的警告。通常當這種情況發生時,我們就需要查找引起警告的代碼。如果它真的表示錯誤,我們就需要糾正它。例如如果警告信息表明我們代碼中的switch語句沒有覆蓋所有可能的case,那么我們就應增加一個默認的case來避免這種警告。相仿,有時我們無法避免這種警告,例如,我們使用必須和非generic的舊代碼交互的generic collection類時,我們不能避免這個unchecked warning。此時@SuppressWarning就要派上用場了,在調用的方法前增加@SuppressWarnings修飾,告訴編譯器停止對此方法的警告。SuppressWarning不是一個marker annotation。它有一個類型為String[]的成員,這個成員的值為被禁止的警告名。對于javac編譯器來講,被-Xlint選項有效的警告名也同樣對@SuppressWarings有效,同時編譯器忽略掉無法識別的警告名。annotation語法允許在annotation名后跟括號,括號中是使用逗號分割的name=value對用于為annotation的成員賦值:清單3:@SuppressWarnings(value={'unchecked','fallthrough'})public void lintTrap() { /* sloppy method body omitted */ }在這個例子中SuppressWarnings annotation類型只定義了一個單一的成員,所以只有一個簡單的value={...}作為name=value對。又由于成員值是一個數組,故使用大括號來聲明數組值。注意:我們可以在下面的情況中縮寫annotation:當annotation只有單一成員,并成員命名為'value='。這時可以省去'value='。比如將上面的SuppressWarnings annotation進行縮寫:清單4:@SuppressWarnings({'unchecked','fallthrough'})如果SuppressWarnings所聲明的被禁止警告個數為一個時,可以省去大括號:@SuppressWarnings('unchecked')3。Annotation語法:在上一個章節中,我們看到書寫marker annotation和單一成員annotation的語法。下面本人來介紹一下完整的語法:annotation由“@+annotation類型名稱+(..逗號分割的name-value對...)組成。其中成員可以按照任何的順序。如果annotation類型定義了某個成員的默認值,則這個成員可以被省略。成員值必須為編譯時常量、內嵌的annotation或者數組。下面我們將定義一個annotation類型名為Reviews,它有一個由@Review annotation數組構成的成員。這個@Review annotation類型有三個成員:'reviewer'是一個字符串,'comment' 是一個具有默認值的可選的字符串,'grade'是一個Review.Grade枚舉類型值。清單5:@Reviews({ // Single-value annotation, so 'value=' is omitted here @Review(grade=Review.Grade.EXCELLENT, reviewer='df'), @Review(grade=Review.Grade.UNSATISFACTORY, reviewer='eg', comment='This method needs an @Override annotation')})annotation語法的另一個重要規則是沒有程序成員可以有多于一個的同一annotation實例。例如在一個類中簡單的放置多個@Review annotation。這也是在上面代碼中定義@Reviews annotation類型數組的原因。4。Annotation成員類型和值:annotation成員必須是非空的編譯時常量表達式。可用的成員類型為:primitive類型、, String, Class, enumerated類型, annotation類型, 和前面類型的數組。下面我們定義了一個名為UncheckedExceptions 的annotation類型,它的成員是一個擴展了RuntimeException類的類數組。清單6:@UncheckedExceptions({ IllegalArgumentException.class, StringIndexOutOfBoundsException.class})5。Annotation的目標:annotation通常被放在類型定義和成員定義的前面。然而它也出現在package、方法參數、本地變量的前面。下面,我們來討論一下這些不大常用的寫法:package annotation出現在package聲明的前面。下面的例子package-info.java中不包含任何的公共類型定義,卻包含一個可選的javadoc注釋。清單7:/** * This package holds my custom annotation types. */@com.davidflanagan.annotations.Author('David Flanagan')package com.davidflanagan.annotations;當package-info.java文件被編譯時,它將產生名為包含annotation(特殊的接口)聲明的package-info.class的類。這個接口沒有成員,它的名字package-info不是一個合法的java標識,所以它不能用在java源代碼中。這個接口的存在只是簡單的被看作一個為package annotation準備的占位符。用于修飾方法參數、catch參數、本地變量的annotation只是簡單的出現在這些程序成員的修飾符位置。java類文件格式沒有為本地變量或者catch參數存儲annotation作準備,所以這些annotation總是保留在源代碼級別(source retention);方法參數annotation能夠保存在類文件中,也可以在保留到運行時。最后,請注意,枚舉類型定義中不允許任何的修飾符修飾其枚舉值。6。Annotation和默認值:在Annotation中,沒有默認值的成員必須有一個成員值。而如何理解默認值是如何被處理就是一個很重要的細節:annotation類型所定義的成員默認值被存儲在class文件中,不被編譯到annotation里面。如果我們修改一個annotation類型使其成員的默認值發生了改變,這個改變對于所有此類型的annotation中沒有明確提供成員值的成員產生影響(即修改了該成員的成員值)。即使在annotation類型使其成員的默認值被改變后annotation從沒被重新編譯過,該類型的annotation(改變前已經被編譯的)也受到影響。三、Annotation工作原理:Annotation與反射在java5.0中Java.lang.reflect提供的反射API被擴充了讀取運行時annotation的能力。讓我們回顧一下前面所講的:一個annotation類型被定義為runtime retention后,它才是在運行時可見,當class文件被裝載時被保存在class文件中的annotation才會被虛擬機讀取。那么reflect是如何幫助我們訪問class中的annotation呢?下文將在java.lang.reflect用于annotation的新特性,其中java.lang.reflect.AnnotatedElement是重要的接口,它代表了提供查詢annotation能力的程序成員。這個接口被java.lang.Package、java.lang.Class實現,并間接地被Method類、Constructor類、java.lang.reflect的Field類實現。而annotation中的方法參數可以通過Method類、Constructor類的getParameterAnnotations()方法獲得。下面的代碼使用了AnnotatedElement類的isAnnotationPresent()方法判斷某個方法是否具有@Unstable annotation,從而斷言此方法是否穩定:清單8:import java.lang.reflect.*;Class c = WhizzBangClass.class; Method m = c.getMethod('whizzy', int.class, int.class); boolean unstable = m.isAnnotationPresent(Unstable.class);isAnnotationPresent()方法對于檢查marker annotation是十分有用的,因為marker annotation沒有成員變量,所以我們只要知道class的方法是否使用了annotation修飾就可以了。而當處理具有成員的annotation時,我們通過使用getAnnotation()方法來獲得annotation的成員信息(成員名稱、成員值)。這里我們看到了一套優美的java annotation系統:如果annotation存在,那么實現了相應的annotation類型接口的對象將被getAnnotation()方法返回,接著調用定義在annotation類型中的成員方法可以方便地獲得任何成員值。回想一下,前面介紹的@Reviews annotation,如果這個annotation類型被聲明為runtime retention的話,我們通過下面的代碼來訪問@Reviews annotation的成員值:清單9:AnnotatedElement target = WhizzBangClass.class; //獲得被查詢的AnnotatedElement// 查詢AnnotatedElement的@Reviews annotation信息Reviews annotation = target.getAnnotation(Reviews.class);// 因為@Reviews annotation類型的成員為@Review annotation類型的數組,// 所以下面聲明了Review[] reviews保存@Reviews annotation類型的value成員值。Review[] reviews = annotation.value();// 查詢每個@Review annotation的成員信息for(Review r : reviews) { Review.Grade grade = r.grade(); String reviewer = r.reviewer(); String comment = r.comment(); System.out.printf('%s assigned a grade of %s and comment '%s'%n', reviewer, grade, comment);}四、如何自定義Annotation?1.詳解annotation與接口的異同:因為annotation類型是一個非凡的接口,所以兩者之間存在著某些差異:A.Annotation類型使用關鍵字@interface而不是interface。這個關鍵字聲明隱含了一個信息:它是繼承了java.lang.annotation.Annotation接口,并非聲明了一個interface。B.Annotation類型、方法定義是獨特的、受限制的。Annotation類型的方法必須聲明為無參數、無異常拋出的。這些方法定義了annotation的成員:方法名成為了成員名,而方法返回值成為了成員的類型。而方法返回值類型必須為primitive類型、Class類型、枚舉類型、annotation類型或者由前面類型之一作為元素的一維數組。方法的后面可以使用default和一個默認數值來聲明成員的默認值,null不能作為成員默認值,這與我們在非annotation類型中定義方法有很大不同。Annotation類型和它的方法不能使用annotation類型的參數、成員不能是generic。只有返回值類型是Class的方法可以在annotation類型中使用generic,因為此方法能夠用類轉換將各種類型轉換為Class。C.Annotation類型又與接口有著近似之處。它們可以定義常量、靜態成員類型(比如枚舉類型定義)。Annotation類型也可以如接口一般被實現或者繼承。2.實例:下面,我們將看到如何定義annotation類型的example。它展示了annotation類型聲明以及@interface與interface之間的不同:清單10:package com.davidflanagan.annotations;import java.lang.annotation.*;/** * 使用annotation來描述那些被標注的成員是不穩定的,需要更改*/@Retention(RetentionPolicy.RUNTIME)public @interface Unstable {}下面的另一個example只定義了一個成員。并通過將這個成員命名為value,使我們可以方便的使用這種annotation的快捷聲明方式:清單11:/** * 使用Author這個annotation定義在程序中指出代碼的作者 */public @interface Author { /** 返回作者名 */ String value();}以下的example更加復雜。Reviews annotation類型只有一個成員,但是這個成員的類型是復雜的:由Review annotation組成的數組。Review annotation類型有3個成員:枚舉類型成員grade、表示Review名稱的字符串類型成員Reviewer、具有默認值的字符串類型成員Comment。清單12:import java.lang.annotation.*; /** * Reviews annotation類型只有一個成員, * 但是這個成員的類型是復雜的:由Review annotation組成的數組 */@Retention(RetentionPolicy.RUNTIME)public @interface Reviews { Review[] value();}/*** Review annotation類型有3個成員: * 枚舉類型成員grade、 * 表示Review名稱的字符串類型成員Reviewer、 * 具有默認值的字符串類型成員Comment。 */public @interface Review { // 內嵌的枚舉類型 public static enum Grade { EXCELLENT, SATISFACTORY, UNSATISFACTORY }; // 下面的方法定義了annotation的成員 Grade grade(); String reviewer(); String comment() default ''; }最后,我們來定義一個annotation方法用于羅列出類運行中所有的unchecked異常(上文已經提到這種情況不一定是錯誤)。這個annotation類型將一個數組作為了唯一的成員。數組中的每個元素都是異常類。為了加強對未檢查的異常(此類異常都是在運行時拋出)進行報告,我們可以在代碼中對異常的類型進行限制:清單13:public @interface UncheckedExceptions { Class<? extends RuntimeException>[] value();}五、Meta-AnnotationAnnotation類型可以被它們自己所標注。Java5.0定義了4個標準的meta-annotation類型,它們被用來提供對其它annotation類型作說明。這些類型和它們所支持的類在java.lang.annotation包中可以找到。如果需要更詳細的信息可以參考jdk5.0手冊。1.再談Target作為meta-annotation類型的Target,它描述了annotation所修飾的程序成員的類型。當一個annotation類型沒有Target時,它將被作為普通的annotation看待。當將它修飾一個特定的程序成員時,它將發揮其應用的作用,例如:Override用于修飾方法時,增加了@Target這個meta-annotation就使編譯器對annotation作檢查,從而去掉修飾錯誤類型的Override。Target meta-annotation類型有唯一的value作為成員。這個成員的類型是java.lang.annotation.ElementType[]類型的,ElementType類型是可以被標注的程序成員的枚舉類型。2.Retention的用法我們在文章的開頭曾經提到過Retention,但是沒有詳細講解。Retention描述了annotation是否被編譯器丟棄或者保留在class文件;如果保留在class文件中,是否在class文件被裝載時被虛擬機讀取。默認情況下,annotation被保存在class文件中,但在運行時并不能被反射訪問。Retention具有三個取值:source、class、runtime,這些取值來自java.lang.annotation.RetentionPolicy的枚舉類型值。Retention meta-annotation類型有唯一的value作為成員,它的取值來自java.lang.annotation.RetentionPolicy的枚舉類型值。3.DocumentedDocumented是一個meta-annotation類型,用于描述其它類型的annotation應該被作為被標注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化。Documented是一個marker annotation,沒有成員。4.Inherited@Inherited meta-annotation也是一個marker annotation,它闡述了某個被標注的類型是被繼承的。如果一個使用了@Inherited修飾的annotation類型被用于一個class,則這個annotation將被用于該class的子類。注意:@Inherited annotation類型是被標注過的class的子類所繼承。類并不從它所實現的接口繼承annotation,方法并不從它所重載的方法繼承annotation。值得思考的是,當@Inherited annotation類型標注的annotation的Retention是RetentionPolicy.RUNTIME,則反射API增強了這種繼承性。如果我們使用java.lang.reflect去查詢一個@Inherited annotation類型的annotation時,反射代碼檢查將展開工作:檢查class和其父類,直到發現指定的annotation類型被發現,或者到達類繼承結構的頂層。六、總結:本文幾乎覆蓋了所有的Annotation的概念和知識點,從annotation的定義、語法到工作原理、如何自定義annotation,直至meta-annotation。其中也具有一些配套的代碼片斷可參考,雖然不是很多,但是可謂言簡意賅、著其重點,本人認為用好annotation的關鍵還在于使用。希望本手冊能夠幫助大家用好annotation,這也是本人的最大快樂。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd Java Annotation手冊作者:cleverpig版權聲明:本文可以自由轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)原文:http://www.matrix.org.cn/resour
標簽: Java
相關文章:
主站蜘蛛池模板: 日本一卡二卡四卡无卡乱码视频免费 | 国产天堂网 | 开心五月激情综合婷婷 | 夜精品a片一区二区三区无码白浆 | 日韩欧美一区二区在线观看 | 大肉大捧一进一出视频 | 亚洲国产欧美精品 | 毛片黄片免费看 | 极品一区| 亚洲中文字幕aⅴ天堂 | 高潮久久久久久久久 | 国产精品污www在线观看17c | 综合久久精品 | 欧美在线a| 久久久久99精品成人片试看 | 国产免费无遮挡吸乳视频 | 国产精品9999久久久久 | 日本欧美一区二区免费视频 | 婷婷色九月 | 天天摸天天摸 | 国产精品嫩草影院桃色 | 精品精品国产毛片在线看 | 欧美色图11p | 日产精致一致六区麻豆 | 天天干夜夜做 | 国产黑丝高跟 | 国产精品久久久久久无毒不卡 | 香蕉国产999 | 亚洲国产va | 亚洲性欧美| 国产成人无码精品午夜福利a | 欧美videossex极品| 超碰人体| 国产精品久久成人 | 加勒比精品 | 四虎影院在线观看免费 | 五月天丁香社区 | 日本十八禁视频无遮挡 | 天天做天天爱 | 日韩一级特黄 | 日韩精品一区二区三区不卡 | 成人免费精品网站 | 一级做a爰| 欧美伦理一区二区 | 国产午夜精品一区二区三区 | 韩国三级欧美三级国产三级 | 丁香六月婷婷综合 | www久久撸撸网 | 亚洲一区二区三区乱码aⅴ 亚洲一区二区三区日本久久九 | 国产精品有限公司 | 欧洲黄色毛片 | 国产成人综合精品无码 | 久久久精品99久久精品36亚 | 日本三级午夜理伦三级三 | 国产乡下妇女做爰视频 | 成人传媒 | 国产男小鲜肉同志免费 | 婷婷色一区二区三区 | 国产欧美精品一区二区三区四区 | 日产亚洲一区二区三区 | 久久69av| 国产高潮国产高潮久久久 | 91精产品一区一区三区40p | 丰满少妇乱子伦精品看片 | 天天操天天曰 | 国产乱子经典视频在线观看 | 夜夜爽亚洲人成8888 | 亚洲区免费 | 欧美不卡一二三 | 亚洲综合首页 | 一级国产精品 | 麻豆传传媒久久久爱 | 777午夜福利理论电影网 | 久久婷婷五月综合97色直播 | 红桃17c视频永久免费入口 | 国产成人精品一区二区三区视频 | 亚洲成人黄色网 | 美国av毛片| 五月99久久婷婷国产综合亚洲 | 成人欧美一区二区三区黑人免费 | 亚洲一级二级三级 | 亚洲欧洲免费无码 | 日韩特一级 | 久久国产网 | 无码无遮挡又大又爽又黄的视频 | 欧美午夜视频在线观看 | 一级久久久久久久 | 日本在线免费播放 | 午夜av剧场| 97久久综合区小说区图片区 | 国产性网 | 日本一区二区在线免费观看 | 哪里可以看免费毛片 | 午夜精品久久久久久久99水蜜桃 | 国产美女久久 | 特黄特色免费视频 | 91热热| 97超碰在 | 国产日韩欧美中文 | 少妇高潮zzzzzzzy一avhd | 亚洲三级在线看 | 性国产xxxx乳高跟 | 中文高清av | 久久久精品视频网站 | 秋霞7777鲁丝伊人久久影院 | 久久精品亚洲一区二区三区浴池 | 老子午夜精品无码不卡 | 麻花传媒在线mv免费观看视频 | 欧美猛交ⅹxxx乱大交视频 | 亚洲国产精品成人va在线观看 | 欧美图片一区 | 永久免费观看av | 久久免费黄色 | 69中国xxxxxxxxx69 69中国xxxxxxxxx96 | 久久黄色网址 | 中文字幕 欧美日韩 | 女性无套免费网站在线看动漫 | 夜夜春夜夜爽 | 岳双腿间已经湿成一片视频 | 国产一二三区写真福利视频 | 欧美日韩在线视频观看 | 亚洲精品久久久蜜臀av站长工具 | 哺乳一区二区久久久免费 | 久久精品道一区二区三区 | 欧美精品日日鲁夜夜添 | 国产福利视频在线观看 | 91国产丝袜在线播放动漫 | 日韩aⅴ片| 日本在线三级 | 中文字幕av无码不卡 | 色窝| 久久97| 国产精品va在线观看无码不卡 | 国产亚洲精品久久久久5区 国产亚洲精品久久久久久 国产亚洲精品久久久久久国模美 | yw视频在线观看 | 青青草手机视频在线观看 | 综合三区后入内射国产馆 | 日韩欧美精品一区二区 | 亚洲精品入口a级 | 午夜精品久久久久久久蜜桃 | 精品视频区 | 色一情一乱一伦一区二区三欧美 | 国产av无码久久精品 | 久久久久成人精品免费播放动漫 | 国产精欧美一区二区三区久久久 | 亚洲欧美va天堂人熟伦 | 国产乱淫精品一区二区三区毛片 | 久久精品夜色噜噜亚洲a∨ 久久精品一二三 | 美丽的熟妇中文字幕 | 久久精品呦女 | 人妻无码不卡中文字幕系列 | 成人免费观看黄a大片夜月小说 | 日韩精品字幕 | 狠狠干狠狠色 | 夜夜夜网站 | a在线观看| 青青在线 | 婷婷夜夜躁天天躁人人躁 | 男女啪啪资源 | 特黄老太婆aa毛毛片 | 久久不见久久见免费影院www日本 | 亚洲成av人片一区二区梦乃 | 青青伊人影院 | 久草网在线观看 | 欧美激情视频一区二区 | 久久久综合网 | 五月丁香综合缴情六月小说 | 久久久妇女国产精品影视 | 很很射影院 | 国产黄色片免费在线观看 | 国产中文字字幕乱码无限 | 亚洲精品岛国片在线观看 | 97中文字幕在线观看 | 色爽爽一区二区三区 | 超碰在线小说 | 免费欧美大片 | 成人欧美一区二区 | 在线观看中文字幕av | 骚片av蜜桃精品一区 | 一区二区三区日本久久九 | 国产白嫩美女在线观看 | 亚洲精品一区二区三区四区五区 | 免费成人在线网站 | 国内少妇偷人精品视频免费 | 国产婷婷精品av在线 | 在线精品亚洲欧美日韩国产 | 国产精品久久久久久三级 | 精品国产乱码一区二区三区99 | 性色蜜桃臀x66av | 中文字幕中文在线 | 国产女人18毛片水真多 | 欧美v亚洲v综合ⅴ国产v | 欧美色精品 | 熟妇人妻av中文字幕老熟妇 | 黄色欧美在线观看 | 中日韩无砖码一线二线 | 美女考逼 | 久久网页 | 国产欧美日韩一区二区三区 | 国产网站av | 人人干在线 | 成人免费观看视频大全 | 国产群p | 国产精品原创 | 国产精品一二三四区 | 黄色综合 | 日本老熟欧美老熟妇 | mm131美女大尺度私密照尤果 | 99er在线| 哈利波特3在线观看免费版英文版 | 老司机成人永久免费视频 | 任你躁x7x7x7x7在线观看 | 污视频网站免费 | 精品国产一区二区三区日日嗨 | 日本黄色免费 | 成人片黄网站色大片免费观看 | 午夜一二三区 | 精品无人乱码一区二区三区 | 亚洲最大福利网站 | 黄站在线观看 | 男人亚洲天堂 | 国产一级中文字幕 | 精品在线视频一区二区 | 成人精品一区二区三区视频播放 | 国产在线拍偷自揄拍视频 | 91精品国自产拍天天拍 | 成人精品一区二区三区视频播放 | 先锋影音av最新资源 | 日韩欧美高清片 | 亚洲一区h | 欧美jizz19性欧美 | 尤物视频网站在线观看 | 大白屁股一区二区视频 | 天天在线综合 | 女裸全身无奶罩内裤内衣内裤 | 羞羞色视频 | 老妇女性较大毛片 | 国产网址| 99精品久久毛片a片 在线亚洲高清揄拍自拍一品区 | 欧美精品日韩精品 | 色综合久久久久综合99 | 在线视频精品中文无码 | 欧美黑人做爰爽爽爽 | 老色鬼a∨在线视频在线观看 | 二级黄色片 | 五月婷婷之综合缴情 | 无码av免费毛片一区二区 | 三级视频网站 | 少妇一级淫片免费视频 | 四虎播放| 九一福利视频 | 中国国语毛片免费观看视频 | 精品自拍视频 | 欧美日韩国产一区二区三区不卡 | 欧洲性猛交 | 国产又粗又黄又猛 | 亚洲一二三四区 | 91丝袜呻吟高潮美腿白嫩在线观看 | 最近中文字幕mv在线资源 | 午夜第一页 | 国产精品久久福利网站 | 91精品国产综合久久国产大片 | 熟妇人妻系列av无码一区二区 | 亚洲日本黄色片 | 久久久香蕉 | 欧美激情一区 | 国产精品视频不卡 | 国产精品久久久久久一二三四五 | 免费观看欧美猛交片 | 久草网址| 成人av一区二区兰花在线播放 | 蜜臀av午夜一区二区三区 | 国产亚洲一区二区在线观看 | 国产v亚洲| 蜜臀av性久久久久蜜臀aⅴ麻豆 | 亚洲日韩日本中文在线 | 日韩视频一区在线观看 | 95av成人女人啪啪 | 2022av在线| 精射女上司 | 国产精品高潮呻吟久久av郑州 | 色女生影院 | 最新版天堂资源在线 | 日韩欧美大片 | av一本在线| 在线观看日韩一区二区 | 欧美两根一起进3p做受视频 | 狠狠天堂 | 一级做a爰片久久毛片潮喷 一级做a爰片欧美激情床 | 10000部美女免费大片aaa | 欧美最猛性xxxx | av在线免费观看网站 | 国产亚洲精久久久久久蜜臀 | 欧美不卡一二三 | 深夜福利网站在线观看 | 十八女人国产毛毛片视频 | 一色一性一乱一交一视频 | 国产精品久久久久久影视 | 国产一级片免费在线观看 | 精国产品一区二区三区四季综 | 538任你躁精品视频网免费 | 国产chinese| 涩涩的视频网站 | 奇米精品一区二区三区四区 | 国产真实露脸乱子伦原著 | 交h粗暴调教91 | 大吊一区二区三区 | 亚洲国产精品久久一线不卡 | 日本aaaa大片免费观看入口 | 国产成人精品福利 | 人人爽久久涩噜噜噜蜜桃 | 91视频免费| 久热免费 | 偷妻h高h短篇 | 中文字幕av免费观看 | 五月婷在线 | 国产日产久久高清欧美 | 日韩avcom| 国产综合自拍 | 日韩在线无 | 欧美日韩亚洲在线 | 成–人–黄–色–网–站 | 久久的久久爽亚洲精品aⅴ 久久第一页 | 亚洲国产福利 | 国产精品三级 | 男女裸体影院高潮 | 成人女人看片免费视频放人 | 久久精品a亚洲国产v高清不卡 | 麻豆mv免费观看 | 久久青草免费视频 | www.在线视频| 成人免费小视频 | 巨乳校园h1v1 | 国内自拍一二三四2021 | 性欢交69精品久久久 | 狠狠婷婷综合久久久久久 | 色偷偷免费 | 成人一级大片 | 97国产在线播放 | 91视频安卓版 | 精品国产99高清一区二区三区 | 狠狠干影院 | 六月色丁香 | tube欧美巨大44| 韩国主播青草55部完整 | 深夜视频在线免费 | 欧美性猛交xxxx乱大交 | 亚洲一区二区精品视频 | 亚洲国产123 | 五月丁香综合缴情六月小说 | 色婷婷av一区二区三区影片 | 国产毛片又黄又爽 | 一级黄色毛片子 | 欧美大片高清免费看 | 久久久久国精品产熟女久色 | 少妇视频一区二区三区 | 少妇高潮流白浆9191 | 成人午夜免费在线观看 | 黑人添美女bbb添高潮了 | 网友真实露脸自拍10p | 国产在热线精品视频 | 男人吃奶摸下挵进去啪啪软件 | 99久久精品日本一区二区免费 | 日韩精品一区二区在线播放 | 大sao货你好浪好爽好舒服视频 | 国产一区二区三区免费看 | 在厨房拨开内裤进入毛片 | 国产特级全黄一级97毛片 | 亚洲综合91 | 欧美激情视频一区 | 国产精品v日韩精品v在线观看 | 四川一级毛毛片 | 噼里啪啦在线播放 | 中文人妻无码一区二区三区在线 | 国产婷婷色一区二区三区在线 | 国产免费一区二区三区网站免费 | 美女18网站| 少妇高潮一区二区三区99小说 | 日韩久久无码免费毛片软件 | 国产老妇伦国产熟女老妇高清 | 国产欧美一区二区三区免费看 | 日日夜夜网站 | 99久久综合狠狠综合久久止 | 小嫩批日出水视频 | 欧美日韩国语 | 国产极品尤物 | 国产特级全黄寡妇毛片 | 国产亚洲欧美在线视频 | 成人国内精品久久久久影院vr | 成人h动漫精品一区二区无码 | 男女下面进入的视频免费午夜 | 欧美成人aaaaⅴ片在线看 | 欧美日韩1区2区3区 欧美日韩3p | 91麻豆国产精品 | 欧美成人精品一级乱黄 | 看全色黄大色大片60岁 | 一本之道久 | 香蕉二区 | 朝鲜大乳女奶水奶水吃奶视频在线 | 欧美伊人久久大香线蕉综合 | 天天干天天色综合网 | 国产精品3区 | 久久免费国产 | 少妇被粗大猛进进出出 | 亚洲综合色丁香婷婷六月图片 | 国产亚洲第一页 | 日韩av无码社区一区二区三区 | 久久亚洲精品中文字幕冲田杏梨 | 引诱我的邻居少妇在线播放 | 超碰av在线 | 成年女人免费视频播放体验区 | 天堂网成人 | av影视天堂 | 亚洲一区二区三区 无码 | 中文字幕精品久久一二三区红杏 | 性xxx法国hd极品 | 狂野欧美激情性xxxx | 一本一道av无码中文字幕﹣百度 | 91探花福利精品国产自产在线 | 在线播放www | 性色av 一区二区三区 | 密桃成熟时在线观看 | 自拍偷拍亚洲视频 | 国产在线 | 中文 | 国产精品久久久久久久久久久久午夜片 | 国产天堂亚洲国产碰碰 | 激情内射亚洲一区二区三区爱妻 | 欧美福利视频 | 99国内精品久久久久久久 | 免费看成人哺乳视频 | 狠狠色婷婷狠狠狠亚洲综合 | 亚洲精品视频在线观看免费视频 | 九一自拍中文字幕 | 少妇被躁爽到高潮无码文 | 日韩在线观看你懂的 | 伊人影院av | 色偷偷欧美| 在线 丝袜 欧美 日韩 制服 | 国精产品一区二区三区黑人免费看 | 国产成人无码a区在线观看视频 | 精品国产一区二区三区色欲 | 天天草天天爽 | 国产日韩三级 | 五月婷婷六月丁香 | 黑丝一区 | 久久久久九九 | 91丝袜放荡丝袜脚交 | 性高爱久久久久久久久 | 香蕉免费在线视频 | 天堂网www中文在线 伊人久久大香线蕉综合网站 | 五月天国产在线 | 欧美狠狠爱| 国产乱码精品一区二区三区爽爽爽 | 国产精品一区二区免费 | 中文字幕亚洲精品日韩 | 伊人久久精品久久亚洲一区 | 欧美视频中文在线看 | 妹子干综合 | 又粗又猛又爽又黄少妇视频网站 | 综合网天天 | 日本一级中文字幕久久久久久 | 黄色大片免费在线观看 | 国内自拍视频一区二区三区 | 福利在线一区二区 | 天天夜夜操 | 久久精品国产99精品国产亚洲性色 | 日日躁夜夜躁狠狠躁aⅴ蜜 日日躁夜夜躁狠狠躁超爽2001 | 国产精品污www在线观看17c | 日韩毛片在线视频x | 国产欧美一区二区精品久久 | 日韩黄色短视频 | 久久综合噜噜激激的五月天 | 国偷自产中文字幕亚洲手机在线 | 国产精品美女一区二区三区四区 | 亚洲国产精品女人 | 波多野结衣av无码久久一区 | 亚洲理论视频 | 久青草影院| 人人玩人人弄人人曰 | 最新国自产拍小视频 | 97成人资源 | 在线观看欧美日韩视频 | 毛片一级免费 | 希岛爱理av免费一区二区 | 亚洲精品在线网站 | av不卡在线播放 | 天天狠狠色噜噜 | 一道本毛片 | 精品国产乱码一区二区三 | 成人mv在线观看 | 中文字幕欧美人妻精品一区 | 一区二区三区有限公司 | 黄网在线播放 | 激情内射亚洲一区二区三区 | 欧美大片在线看 | 精品国产一区二区三区四区vr | 天天爽天天色 | 亚洲蜜臀av乱码久久精品蜜桃 | 欧美性受ⅹ╳╳╳黑人a性爽 | 在线黄色大片 | 亚洲深夜视频 | 一本色综合 | 亚洲品牌自拍一品区9 | 精品国产免费久久久久久桃子图片 | 免费激情网站 | 国精产品一品二品国在线 | 九九久久精品视频 | 国产在线国偷精品产拍 | 亚洲中久无码永久在线观看同 | 亚洲色图网友自拍 | 欧美日韩资源 | 人妻熟女欲求不满在线 | 91l九色lporny | 亚洲人视频在线 | 国产一区二区四区 | www国产成人免费观看视频,深夜成人网 | 国产片av国语在线观看 | 欧美性娇小 | 夜夜躁狠狠躁日日躁2021日韩 | 亚洲国产成人久久精品大牛影视 | 韩国av在线免费观看 | 在线精品国产成人综合 | 国产在线一二区 | 国产精品视频在线观看 | 日韩亚洲国产欧美 | 国产一级淫片s片sss毛片s级 | 公妇乱淫真实生活 | 天天噜噜噜在线视频 | 日本在线观看免费 | 青青草原亚洲 | 中文字幕一区在线观看视频 | 国产精品激情av久久久青桔 | 无码精品视频一区二区三区 | 日韩精品免费播放 | 日韩美女乱淫aaa高清视频 | 污污视频在线观看网站 | 亚洲第一网站在线观看 | 国外亚洲成av人片在线观看 | 久久免费国产精品1 | 国产一区二区3区 | 视频一区欧美 | 国产偷抇久久精品a片69 | 亚洲视频 中文字幕 | 亚洲一区成人在线 | 日韩亚洲欧美中文在线 | 国产精品第一国产精品 | 成人免费网站在线 | www.成人免费 | 色吊丝网站 | 51自拍视频| 不卡视频一区 | 欧美精品hd | 偷拍视频一区 | 国产午夜福利短视频 | 91亚洲国产成人 | 特黄毛片杨钰莹 | 欧美巨猛xxxx猛交黑人97人 | 天天鲁一鲁摸一摸爽一爽 | 国产欧美精品aaaaaa片 | 国产91精品入口 | av基地网| 日韩视频免费在线 | 伊人久久精品无码二区麻豆 | 蜜臀av色欲a片无码精品一区 | 亚欧成人精品一区二区 | 在线精品免费视频 | 天天射天天干天天插 | 色哟哟国产精品免费观看 | 亚洲精品午夜aaa久久久 | 91久久婷婷国产一区二区 | 乱女伦露脸对白在线播放 | 欧美日韩亚洲综合 | 色www亚洲国产张柏芝 | 奇米婷婷 | 一级特黄特色的免费大片视频 | 欧美日韩久久久久久 | 狂野欧美性猛交xxxxhd | 国产精品久久亚洲7777 | 久久婷婷色 | 黄色av网站免费在线观看 | 久久乐国产精品亚洲综合 | 欧美黑人疯狂性受xxxxx喷水 | 亚洲成a∨人片在线观看不卡 | 日韩久久激情综合啪啪 | 老头老太吃奶xb视频 | 男女一边摸一边做爽视频 | 男女69式互吃动态图在线观看 | 男人天堂黄色 | 日韩国产成人在线 | 黄色国产一区 | 性工作者十日谈 | 新婚少妇无套内谢国语播放 | 欧美一性一乱一交一视频 | 可以免费在线观看的av | 超碰人人超 | 轻轻色在线观看 | 网站国产 | 欧美日韩国产成人 | 日韩少妇内射免费播放18禁裸乳 | 国产波霸爆乳一区二区 | 色女人av| 亚洲精品一区二区 | 免费的男女羞羞视频软件 | 91免费国产视频 | 色翁荡息又大又硬又粗视频 | 全黄性性激高免费视频 | 欧美又大又色又爽aaaa片 | 久久精品视频观看 | 另类专区亚洲 | 女人被狂躁60分钟视频 | 夜夜高潮天天爽欧美国产亚洲一区 | 久草视频在线资源 | 国产91在线播放九色000 | 久久精品免费看 | 日本免费一区二区三区中文字幕 |