久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

Java Annotation手冊

瀏覽:128日期:2024-06-15 09:50:53
內(nèi)容: Java Annotation手冊作者:cleverpig版權(quán)聲明:本文可以自由轉(zhuǎn)載,轉(zhuǎn)載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)原文:http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html關(guān)鍵字:java,annotation,reflect前言:在上篇文章《Java Annotation入門》中概要性的介紹了Annotation的定義、使用,范圍涵蓋較廣,但是深度不夠。所以作者在《Java Annotation入門》后,繼續(xù)整理了Annotation的概念和知識點,與喜歡research的朋友們共享。閱讀提示:文中提到的程序成員或者程序元素是一個概念,指組成程序代碼的單元:如類、方法、成員變量。一、Annotation究竟是什么?Annotation提供了一條與程序元素關(guān)聯(lián)任何信息或者任何元數(shù)據(jù)(metadata)的途徑。從某些方面看,annotation就像修飾符一樣被使用,并應用于包、類型、構(gòu)造方法、方法、成員變量、參數(shù)、本地變量的聲明中。這些信息被存儲在annotation的“name=value結(jié)構(gòu)對中。annotation類型是一種接口,能夠通過java反射API的方式提供對其信息的訪問。annotation能被用來為某個程序元素(類、方法、成員變量等)關(guān)聯(lián)任何的信息。需要注意的是,這里存在著一個基本的潛規(guī)則:annotaion不能影響程序代碼的執(zhí)行,無論增加、刪除annotation,代碼都始終如一的執(zhí)行。另外,盡管一些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,并調(diào)用我們定義好的annotation處理器完成我們所要完成的工作(比如驗證前面例子中的斷言)。說到這里,annotation的強大功能似乎可以替代XDoclet這類的工具了,隨著我們的深入,大家會更加堅信這一點。注:詳細描述請參看jsr250規(guī)范:http://www.jcp.org/aboutJava/communityprocess/pfd/jsr250/二、Annotation的定義:這段文字開始介紹annotation相關(guān)技術(shù)。在此大家將看到j(luò)ava5.0的標準annotation類型,這種標準類型就是前文中所說的“內(nèi)建類型,它們可以直接被javac支持。可喜的是,在java6.0beta版中的javac已經(jīng)加入了對自定義annotation的支持。1。Annotation的概念和語法:首先,關(guān)鍵的概念是理解annotation是與一個程序元素相關(guān)聯(lián)信息或者元數(shù)據(jù)的標注。它從不影響java程序的執(zhí)行,但是對例如編譯器警告或者像文檔生成器等輔助工具產(chǎn)生影響。下面是常用的annotation列表,我們應該注意在annotation和annotation類型之間的不同:A.annotation:annotation使用了在java5.0所帶來的新語法,它的行為十分類似public、final這樣的修飾符。每個annotation具有一個名字和成員個數(shù)>=0。每個annotation的成員具有被稱為name=value對的名字和值(就像javabean一樣),name=value裝載了annotation的信息。B.annotation類型:annotation類型定義了annotation的名字、類型、成員默認值。一個annotation類型可以說是一個特殊的java接口,它的成員變量是受限制的,而聲明annotation類型時需要使用新語法。當我們通過java反射api訪問annotation時,返回值將是一個實現(xiàn)了該annotation類型接口的對象,通過訪問這個對象我們能方便的訪問到其annotation成員。后面的章節(jié)將提到在java5.0的java.lang包里包含的3個標準annotation類型。C.annotation成員:annotation的成員在annotation類型中以無參數(shù)的方法的形式被聲明。其方法名和返回值定義了該成員的名字和類型。在此有一個特定的默認語法:允許聲明任何annotation成員的默認值:一個annotation可以將name=value對作為沒有定義默認值的annotation成員的值,當然也可以使用name=value對來覆蓋其它成員默認值。這一點有些近似類的繼承特性,父類的構(gòu)造函數(shù)可以作為子類的默認構(gòu)造函數(shù),但是也可以被子類覆蓋。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類型)、類型成員(方法、構(gòu)造方法、成員變量、枚舉值)、方法參數(shù)和本地變量(如循環(huán)變量、catch參數(shù))。在annotation類型的聲明中使用了target可更加明晰其修飾的目標。G.retention:annotation的retention定義了該annotation被保留的時間長短:某些annotation僅出現(xiàn)在源代碼中,而被編譯器丟棄;而另一些卻被編譯在class文件中;編譯在class文件中的annotation可能會被虛擬機忽略,而另一些在class被裝載時將被讀取(請注意并不影響class的執(zhí)行,因為annotation與class在使用上是被分離的)。使用這個meta-annotation可以對annotation的“生命周期限制。H.metadata:由于metadata被廣泛使用于各種計算機開發(fā)過程中,所以當我們在這里談論的metadata即元數(shù)據(jù)通常指被annotation裝載的信息或者annotation本身。2。使用標準Annotation:java5.0在java.lang包中定義了3種標準的annotation類型:A.Override:java.lang.Override是一個marker annotation類型,它被用作標注方法。它說明了被標注的方法重載了父類的方法,起到了斷言的作用。如果我們使用了這種annotation在一個沒有覆蓋父類方法的方法時,java編譯器將以一個編譯錯誤來警示。這個annotaton常常在我們試圖覆蓋父類方法而確又寫錯了方法名時發(fā)揮威力。使用方法極其簡單:在使用此annotation時只要在被修飾的方法前面加上@Override。下面的代碼是一個使用@Override修飾一個企圖重載父類的toString方法,而又存在拼寫錯誤的sample:清單1:@Overridepublic String toSting() { // 注意方法名拼寫錯了 return '[' + super.toString() + ']';}B.Deprecated:同樣Deprecated也是一個marker annotation。當一個類型或者類型成員使用@Deprecated修飾的話,編譯器將不鼓勵使用這個被標注的程序元素。而且這種修飾具有一定的“延續(xù)性:如果我們在代碼中通過繼承或者覆蓋的方式使用了這個過時的類型或者成員,雖然繼承或者覆蓋后的類型或者成員并不是被聲明為@Deprecated,但編譯器仍然要報警。值得注意,@Deprecated這個annotation類型和javadoc中的@deprecated這個tag是有區(qū)別的:前者是java編譯器識別的,而后者是被javadoc工具所識別用來生成文檔(包含程序成員為什么已經(jīng)過時、它應當如何被禁止或者替代的描述)。在java5.0,java編譯器仍然象其從前版本那樣尋找@deprecated這個javadoc tag,并使用它們產(chǎn)生警告信息。但是這種狀況將在后續(xù)版本中改變,我們應在現(xiàn)在就開始使用@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被用于有選擇的關(guān)閉編譯器對類、方法、成員變量、變量初始化的警告。在java5.0,sun提供的javac編譯器為我們提供了-Xlint選項來使編譯器對合法的程序代碼提出警告,此種警告從某種程度上代表了程序錯誤。例如當我們使用一個generic collection類而又沒有提供它的類型時,編譯器將提示出'unchecked warning'的警告。通常當這種情況發(fā)生時,我們就需要查找引起警告的代碼。如果它真的表示錯誤,我們就需要糾正它。例如如果警告信息表明我們代碼中的switch語句沒有覆蓋所有可能的case,那么我們就應增加一個默認的case來避免這種警告。相仿,有時我們無法避免這種警告,例如,我們使用必須和非generic的舊代碼交互的generic collection類時,我們不能避免這個unchecked warning。此時@SuppressWarning就要派上用場了,在調(diào)用的方法前增加@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對。又由于成員值是一個數(shù)組,故使用大括號來聲明數(shù)組值。注意:我們可以在下面的情況中縮寫annotation:當annotation只有單一成員,并成員命名為'value='。這時可以省去'value='。比如將上面的SuppressWarnings annotation進行縮寫:清單4:@SuppressWarnings({'unchecked','fallthrough'})如果SuppressWarnings所聲明的被禁止警告?zhèn)€數(shù)為一個時,可以省去大括號:@SuppressWarnings('unchecked')3。Annotation語法:在上一個章節(jié)中,我們看到書寫marker annotation和單一成員annotation的語法。下面本人來介紹一下完整的語法:annotation由“@+annotation類型名稱+(..逗號分割的name-value對...)組成。其中成員可以按照任何的順序。如果annotation類型定義了某個成員的默認值,則這個成員可以被省略。成員值必須為編譯時常量、內(nèi)嵌的annotation或者數(shù)組。下面我們將定義一個annotation類型名為Reviews,它有一個由@Review annotation數(shù)組構(gòu)成的成員。這個@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語法的另一個重要規(guī)則是沒有程序成員可以有多于一個的同一annotation實例。例如在一個類中簡單的放置多個@Review annotation。這也是在上面代碼中定義@Reviews annotation類型數(shù)組的原因。4。Annotation成員類型和值:annotation成員必須是非空的編譯時常量表達式。可用的成員類型為:primitive類型、, String, Class, enumerated類型, annotation類型, 和前面類型的數(shù)組。下面我們定義了一個名為UncheckedExceptions 的annotation類型,它的成員是一個擴展了RuntimeException類的類數(shù)組。清單6:@UncheckedExceptions({ IllegalArgumentException.class, StringIndexOutOfBoundsException.class})5。Annotation的目標:annotation通常被放在類型定義和成員定義的前面。然而它也出現(xiàn)在package、方法參數(shù)、本地變量的前面。下面,我們來討論一下這些不大常用的寫法:package annotation出現(xiàn)在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文件被編譯時,它將產(chǎn)生名為包含annotation(特殊的接口)聲明的package-info.class的類。這個接口沒有成員,它的名字package-info不是一個合法的java標識,所以它不能用在java源代碼中。這個接口的存在只是簡單的被看作一個為package annotation準備的占位符。用于修飾方法參數(shù)、catch參數(shù)、本地變量的annotation只是簡單的出現(xiàn)在這些程序成員的修飾符位置。java類文件格式?jīng)]有為本地變量或者catch參數(shù)存儲annotation作準備,所以這些annotation總是保留在源代碼級別(source retention);方法參數(shù)annotation能夠保存在類文件中,也可以在保留到運行時。最后,請注意,枚舉類型定義中不允許任何的修飾符修飾其枚舉值。6。Annotation和默認值:在Annotation中,沒有默認值的成員必須有一個成員值。而如何理解默認值是如何被處理就是一個很重要的細節(jié):annotation類型所定義的成員默認值被存儲在class文件中,不被編譯到annotation里面。如果我們修改一個annotation類型使其成員的默認值發(fā)生了改變,這個改變對于所有此類型的annotation中沒有明確提供成員值的成員產(chǎn)生影響(即修改了該成員的成員值)。即使在annotation類型使其成員的默認值被改變后annotation從沒被重新編譯過,該類型的annotation(改變前已經(jīng)被編譯的)也受到影響。三、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實現(xiàn),并間接地被Method類、Constructor類、java.lang.reflect的Field類實現(xiàn)。而annotation中的方法參數(shù)可以通過Method類、Constructor類的getParameterAnnotations()方法獲得。下面的代碼使用了AnnotatedElement類的isAnnotationPresent()方法判斷某個方法是否具有@Unstable annotation,從而斷言此方法是否穩(wěn)定:清單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的成員信息(成員名稱、成員值)。這里我們看到了一套優(yōu)美的java annotation系統(tǒng):如果annotation存在,那么實現(xiàn)了相應的annotation類型接口的對象將被getAnnotation()方法返回,接著調(diào)用定義在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類型的數(shù)組,// 所以下面聲明了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類型使用關(guān)鍵字@interface而不是interface。這個關(guān)鍵字聲明隱含了一個信息:它是繼承了java.lang.annotation.Annotation接口,并非聲明了一個interface。B.Annotation類型、方法定義是獨特的、受限制的。Annotation類型的方法必須聲明為無參數(shù)、無異常拋出的。這些方法定義了annotation的成員:方法名成為了成員名,而方法返回值成為了成員的類型。而方法返回值類型必須為primitive類型、Class類型、枚舉類型、annotation類型或者由前面類型之一作為元素的一維數(shù)組。方法的后面可以使用default和一個默認數(shù)值來聲明成員的默認值,null不能作為成員默認值,這與我們在非annotation類型中定義方法有很大不同。Annotation類型和它的方法不能使用annotation類型的參數(shù)、成員不能是generic。只有返回值類型是Class的方法可以在annotation類型中使用generic,因為此方法能夠用類轉(zhuǎn)換將各種類型轉(zhuǎn)換為Class。C.Annotation類型又與接口有著近似之處。它們可以定義常量、靜態(tài)成員類型(比如枚舉類型定義)。Annotation類型也可以如接口一般被實現(xiàn)或者繼承。2.實例:下面,我們將看到如何定義annotation類型的example。它展示了annotation類型聲明以及@interface與interface之間的不同:清單10:package com.davidflanagan.annotations;import java.lang.annotation.*;/** * 使用annotation來描述那些被標注的成員是不穩(wěn)定的,需要更改*/@Retention(RetentionPolicy.RUNTIME)public @interface Unstable {}下面的另一個example只定義了一個成員。并通過將這個成員命名為value,使我們可以方便的使用這種annotation的快捷聲明方式:清單11:/** * 使用Author這個annotation定義在程序中指出代碼的作者 */public @interface Author { /** 返回作者名 */ String value();}以下的example更加復雜。Reviews annotation類型只有一個成員,但是這個成員的類型是復雜的:由Review annotation組成的數(shù)組。Review annotation類型有3個成員:枚舉類型成員grade、表示Review名稱的字符串類型成員Reviewer、具有默認值的字符串類型成員Comment。清單12:import java.lang.annotation.*; /** * Reviews annotation類型只有一個成員, * 但是這個成員的類型是復雜的:由Review annotation組成的數(shù)組 */@Retention(RetentionPolicy.RUNTIME)public @interface Reviews { Review[] value();}/*** Review annotation類型有3個成員: * 枚舉類型成員grade、 * 表示Review名稱的字符串類型成員Reviewer、 * 具有默認值的字符串類型成員Comment。 */public @interface Review { // 內(nèi)嵌的枚舉類型 public static enum Grade { EXCELLENT, SATISFACTORY, UNSATISFACTORY }; // 下面的方法定義了annotation的成員 Grade grade(); String reviewer(); String comment() default ''; }最后,我們來定義一個annotation方法用于羅列出類運行中所有的unchecked異常(上文已經(jīng)提到這種情況不一定是錯誤)。這個annotation類型將一個數(shù)組作為了唯一的成員。數(shù)組中的每個元素都是異常類。為了加強對未檢查的異常(此類異常都是在運行時拋出)進行報告,我們可以在代碼中對異常的類型進行限制:清單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看待。當將它修飾一個特定的程序成員時,它將發(fā)揮其應用的作用,例如:Override用于修飾方法時,增加了@Target這個meta-annotation就使編譯器對annotation作檢查,從而去掉修飾錯誤類型的Override。Target meta-annotation類型有唯一的value作為成員。這個成員的類型是java.lang.annotation.ElementType[]類型的,ElementType類型是可以被標注的程序成員的枚舉類型。2.Retention的用法我們在文章的開頭曾經(jīng)提到過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的子類所繼承。類并不從它所實現(xiàn)的接口繼承annotation,方法并不從它所重載的方法繼承annotation。值得思考的是,當@Inherited annotation類型標注的annotation的Retention是RetentionPolicy.RUNTIME,則反射API增強了這種繼承性。如果我們使用java.lang.reflect去查詢一個@Inherited annotation類型的annotation時,反射代碼檢查將展開工作:檢查class和其父類,直到發(fā)現(xiàn)指定的annotation類型被發(fā)現(xiàn),或者到達類繼承結(jié)構(gòu)的頂層。六、總結(jié):本文幾乎覆蓋了所有的Annotation的概念和知識點,從annotation的定義、語法到工作原理、如何自定義annotation,直至meta-annotation。其中也具有一些配套的代碼片斷可參考,雖然不是很多,但是可謂言簡意賅、著其重點,本人認為用好annotation的關(guān)鍵還在于使用。希望本手冊能夠幫助大家用好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版權(quán)聲明:本文可以自由轉(zhuǎn)載,轉(zhuǎn)載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig)原文:http://www.matrix.org.cn/resour
標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 亚洲国产一二区 | www.久久久.com | 成人一区二区三区 | 国产中文字幕在线 | 91精品久久久久久久久中文字幕 | 国产精品一区二区在线观看 | 免费看的av | 国产亚洲精品久久久久动 | 久久亚洲精品中文字幕 | 成人资源在线观看 | 久久av综合 | 亚洲成人伦理 | 91人人网| 欧美一区在线观看视频 | www.麻豆| 亚洲人成网亚洲欧洲无码 | 95香蕉视频 | 日韩在线视频观看 | 亚洲综合无码一区二区 | 欧美黑人狂躁日本寡妇 | 亚洲精品视频一区二区三区 | 亚洲国产成人av好男人在线观看 | 久久人人爽人人爽 | 999久久久久久久久 国产欧美在线观看 | 亚洲一区二区三区高清 | 亚洲一区综合 | 免费黄色小视频 | 天天干天天草 | 六月婷操 | 久久男女 | 欧美一区二区激情三区 | 亚洲第一视频 | 曰韩在线| а天堂中文最新一区二区三区 | 久久精品亚洲 | 少妇精品视频在线观看 | 精品电影| 日本久久久久久久久 | 中文在线视频 | 欧美老妇交乱视频 | 亚洲一区二区三区精品视频 | 欧美自拍一区 | 色综合免费 | 无毒黄网| 国产日韩精品一区 | 亚洲精品久久久 | 亚洲一区二区三区在线视频 | 91婷婷射 | 国产精品精品 | 四虎影视网址 | 久久久蜜桃 | 日韩成人影院 | 日韩在线免费观看网站 | 国产成人在线免费观看视频 | 91丨九色丨国产在线 | 色69av| 日日夜夜国产 | 欧美成人一区二区三区片免费 | 国产一区二区视频在线播放 | 99福利视频| 亚洲国产精品久久 | 美女黄网 | 国产成人片 | 黄色a视频 | 欧美精品国产精品 | 日本天天操 | 精品乱码一区二区 | 亚洲欧美国产毛片在线 | 日批免费视频 | 久久成人久久爱 | 久久久夜| 免费在线黄色电影 | 国产中文字幕一区 | 欧美精品久久一区 | 日韩在线视频一区 | 91成人在线视频 | 精品91久久久 | 韩国毛片在线观看 | 日本久久综合 | 欧美日韩中文在线 | 91亚洲国产亚洲国产 | 国产电影一区二区三区图片 | 男人的天堂久久 | 一区二区精品 | 久久亚洲一区 | 欧美成人精品激情在线观看 | 久久亚洲高清 | 亚洲国产精品一区二区三区 | 亚洲色图一区二区三区 | 中文字幕视频免费观看 | 国内精品久久精品 | 久久青青视频 | 久草久草久草 | 国产精品美女 | 日韩欧美一区二区三区久久婷婷 | 免费黄色在线观看 | 成年人综合网 | 国产日韩一区二区三区 | 秋霞a级毛片在线看 | 欧美日产国产成人免费图片 | 欧美日韩不卡合集视频 | 国产区福利 | 成人免费一区二区三区视频网站 | 亚洲男人的天堂在线播放 | 81精品国产乱码久久久久久 | 久久成人国产 | 国产中文字幕一区 | 色婷婷网 | 国产精品色 | 久草热8精品视频在线观看 黄色片网站视频 | 精品日韩在线 | 青草久操| 国产精品久久九九 | 99久久99久久精品 | 日日综合 | 精品国产乱码久久久久久1区2区 | 国产精品久久久久久二区 | 不卡一区二区三区四区 | 黑人巨大精品欧美一区二区小视频 | 中文在线一区二区 | 亚洲成人精品久久久 | 国产精品三级久久久久久电影 | 毛片91 | 国产婷婷综合 | 日韩有码在线播放 | 91成人区 | 三级黄色片在线播放 | 91精品久久久久久久久中文字幕 | 欧美视频三区 | 成人精品在线视频 | 国产综合精品 | 在线成人av | 91精品国产一区二区 | 久久亚洲二区 | 韩国精品 | 精品国产欧美一区二区三区成人 | 国产精品日本欧美一区二区三区 | 日韩在线观看视频一区 | 亚洲午夜精品一区二区三区他趣 | 成人av高清在线观看 | 精品亚洲一区二区三区 | 日韩一区在线视频 | 成人欧美一区二区三区在线播放 | 国产人免费人成免费视频 | 国产精品亚洲精品 | 成人日批 | 久久精品免费国产 | a视频在线 | 日日天天| 亚洲黄色片免费 | 97碰碰碰免费公开在线视频 | 麻豆沈芯语在线观看 | 欧美在线观看一区 | 三级在线观看 | 蜜桃中文字幕 | 国产在线一区二区 | 在线观看黄色大片 | 视频在线一区二区三区 | 国产精品美乳一区二区免费 | 免费成人av在线 | 国产免费久久 | 宅男lu666噜噜噜在线观看 | 亚洲国产精品一区二区久久 | 久久精品久久综合 | 2019中文字幕视频 | 日韩国伦理久久一区 | 操操操操操操操操操操操操操操 | 自拍一区视频 | 亚洲国产精品一区二区第一页 | 久久久久久毛片免费观看 | 欧美簧片在线 | 国产v日产∨综合v精品视频 | 精品亚洲国产成av人片传媒 | 免费成人激情视频 | 日本一区二区高清视频 | av片免费 | 国产成人综合一区 | 一级黄色片子看看 | 美女一级 | 久久高清毛片 | av在线成人 | 中文字幕在线观看网站 | 日韩欧美中文在线 | 精品日韩一区二区三区 | 欧美一区二区三区电影 | 色视频网站在线观看一=区 日韩一二三区 | 午夜影视 | 国产综合精品一区二区三区 | 久久久久国产精品 | 视频一区二区三区中文字幕 | 国产精品第一国产精品 | 亚洲成人三区 | 97久久久国产精品 | 午夜精品久久久 | 龙珠z国语291集普通话 | 伊人精品视频 | 日本福利视频免费观看 | 国产一区二区精品在线观看 | 精品一区视频 | 国产精品视频播放 | 欧美久久免费观看 | 韩国电影久久 | av动漫一区二区 | 欧美日韩不卡合集视频 | 精品国产精品三级精品av网址 | 久久久日韩精品一区二区三区 | 四影虎影www4hu23cmo | 日本在线观看一区 | 久久一区二区三区四区 | 日日天天| 日韩色区 | 成人男女激情免费视频 | 久久久久久国产精品高清 | 亚洲精品久久久狠狠狠爱 | 毛片一区二区三区 | www国产亚洲精品 | 日韩一| 国产丝袜视频 | 影音先锋久久 | 国产视频一区二区 | 亚洲高清在线视频 | 欧美日韩在线第一页 | 国产91精品在线 | 嫩草懂你 | 黄网站在线播放 | 成人精品一区二区 | 81精品国产乱码久久久久久 | 91精品福利 | 精品一二区 | 国产日韩欧美一区 | 精品一区二区三区久久 | 青青草国产成人av片免费 | 亚洲毛片网站 | 91中文在线观看 | 成人黄页在线观看 | www日本高清 | 欧美激情一区二区三级高清视频 | 久久久99日产 | 99精品国产高清一区二区麻豆 | 日韩污视频在线观看 | 久久99精品久久久久婷婷暖91 | 天天亚洲综合 | 亚洲午夜精品 | a∨色狠狠一区二区三区 | 日本a视频 | 欧美激情小视频 | 亚洲国产精品一区二区第一页 | 婷婷午夜激情网 | 久久视频在线 | 亚洲福利在线观看 | 中文字幕一区二区三区精彩视频 | 最新免费av网站 | 可以免费看黄的网站 | 中文字幕国产视频 | 天天操夜夜操免费视频 | 涩涩天堂 | 中文字幕高清av | 成人夜晚看av | 亚洲一区二区免费视频 | 81精品国产乱码久久久久久 | 99re在线 | 中文字幕在线三区 | 国产不卡视频 | 中文字幕在线精品 | 国产男女爽爽爽免费视频 | 99精品久久久 | 午夜亚洲一区 | 婷婷网址 | 久久国产综合 | 国产精品久久久久久久久 | 国产精品久久久久久久久 | 久久精品国产99国产精品 | 99视频精品 | 欧美一区二区三 | 久国产精品视频 | 日韩一级 | 91精品一区二区三区久久久久久 | 日产精品久久 | 成人不卡视频 | 国产成人精品一区二区 | 日比视频网站 | 国产精品毛片无码 | 黄色一级在线观看 | 97成人在线免费视频 | 韩国精品视频在线观看 | 天天操天天舔天天爽 | 精品视频一区二区在线 | 一级毛片大全免费播放 | 娇妻被朋友调教成玩物 | 欧美久久一区二区三区 | 日韩国产 | 伊人久久爱 | 日韩欧美中文字幕在线视频 | 久草成人网 | 偷拍自拍网站 | 日韩毛片 | 久久xxx | 国产精品久久久久久久久久久久久久 | 一区二区三区的视频 | 天天干人人| 国产在线一区二区 | 国产成人午夜精品影院游乐网 | 99re在线观看 | 91精品国产欧美一区二区成人 | 天天操网 | 四虎成人永久 | 国产中文视频 | 天天澡天天狠天天天做 | 国产精品久久久久9999赢消 | 亚洲精品成人av | 免费看91| 日本久久久久久久久久久久 | 国产欧美一区二区精品性色 | 9久久婷婷国产综合精品性色 | 欧美1区 | 操网| 日本一级中文字幕久久久久久 | 久久激情网站 | 青青草亚洲 | 欧美日韩在线观看中文字幕 | 国产精品揄拍一区二区久久国内亚洲精 | 91亚洲日本aⅴ精品一区二区 | 欧洲毛片 | 成人性视频在线 | 欧美精品在线免费观看 | 国产精品久久久av | 亚洲成人伦理 | 毛片在线免费 | 欧美久久视频 | av中文字幕在线播放 | 国产成人一区 | 成人亚洲一区二区 | www久久久久久久 | 午夜高清视频 | 91精品国产综合久久久久久丝袜 | 精品国产一区二区三区久久久 | 欧美一a一片一级一片 | 欧美日韩在线免费观看 | 97伦理在线 | 美女超碰在线 | 成人精品鲁一区一区二区 | 羞羞视频在线免费观看 | 日韩一区二区三区av | 成人亚洲免费 | 天堂一区 | 成人亚洲精品 | 毛片免费看 | 日韩精品一区二区三区中文在线 | 美女超碰在线 | 一区二区三区无码高清视频 | 伊人热久久婷婷 | 高清一区二区三区 | 六月丁香在线观看 | 国产丝袜一区 | 日韩在线成人 | 九九天堂| 黄色一级电影免费观看 | 欧美综合视频在线观看 | 精品久久网 | 毛片在线网站 | 在线久 | 日韩一二三区 | 国产精品手机在线 | 最新高清无码专区 | 成人在线免费视频 | 毛片一区 | 国产在线一二三区 | 精品影院 | 高清一区二区三区视频 | 91佛爷在线观看 | 一区二区三区国产 | 亚洲 成人 av | 一级片在线观看 | 免费毛片一区二区三区久久久 | 欧美区国产区 | 日本一本在线 | 欧美成人精品一区二区三区 | 欧美亚洲综合久久 | 欧美国产日韩一区 | 国产精品无码专区在线观看 | 免费视频爱爱太爽了 | 国产精品久久久久久久免费大片 | 青青久视频 | 最新国产毛片 | 国产精品视频一 | www.国产精品.com | 免费国产网站 | 欧美一级片在线 | 欧美精品欧美精品系列 | 中文字幕欧美激情 | 欧美午夜精品久久久久免费视 | 国产精品二区一区二区aⅴ污介绍 | 在线日韩中文字幕 | 午夜影院普通用户体验区 | 国产浪潮av色综合久久超碰 | 91精品久久久久久久久久久久久久久 | 亚洲午夜精品一区二区三区 | 九九久久精品 | 久久人人爽人人爽人人片av不 | 久久99精品久久久久国产越南 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品一二区 | 亚州av| 欧美一区二区大片 | 国内精品一区二区三区 | 欧美日本高清视频 | 中文字幕一区二区三区精彩视频 | 一级毛片免费在线 | 欧美精品福利视频 | 亚洲一区在线视频 | 亚洲免费精品 | 精品国产高清一区二区三区 | 欧美三级视频 | 国产91在线播放精品 | 欧美一区二区三区电影 | 嫩呦国产一区二区三区av | 国产精品久久久久久久久岛 | 国产精品国产三级国产aⅴ无密码 | 做视频免费观看网站 | 日韩国产| 国产xnxx| 日韩av福利| 欧美日韩综合精品 | 曰批免费视频播放免费 | 亚洲一区二区中文字幕 | 精品久久久久久久久福利 | 亚洲欧美日韩在线一区 | 在线成人av | 亚洲一区二区在线免费观看 | 精品美女在线观看视频在线观看 | 久久综合热 | 一级毛片,一级毛片 | 国产精品久久av | 欧美精品一区二区三区蜜臀 | 欧美日韩一区在线观看 | 国产九九在线观看 | 在线观看视频一区 | 久久精品免费视频播放 | 国产精品久久免费观看spa | 亚洲精品福利 | 日韩素人在线 | 最新中文字幕 | 精品成人免费一区二区在线播放 | 成人综合社区 | 免费观看一级特黄欧美大片 | 亚洲精品国产精品国自产 | 日韩一二三区 | 荡女妇边被c边呻吟视频 | 国产精品日韩一区二区 | 欧洲一区二区在线观看 | 91男女视频 | 91免费看片网站 | 国产伦精品一区二区三区高清 | 毛片链接 | 欧美日韩国产精品 | 米奇狠狠操 | 综合久久国产九一剧情麻豆 | 97伦理片 | 不卡一区 | 久久伊人免费视频 | 欧美精品一区二区三区在线 | 国产精品ssss在线亚洲 | 青青草精品 | 久久久精品一区二区三区 | 成人精品在线视频 | 国产99一区 | 精品免费国产 | 精品乱子伦一区二区三区 | 亚洲精品乱码久久久久久蜜桃91 | 波多野结衣一区二区三区中文字幕 | 久热在线视频 | 99成人| 手机久久看片 | 国产欧美日韩成人 | 成人国产精品视频 | 日韩一区中文字幕 | 色鲁97精品国产亚洲 | 久久国产精品久久久久久久久久 | 看片wwwwwwwwwww | 久久欧美精品一区 | 天天舔日日干 | 欧美精品91 | 国产精品无码久久久久 | 在线视频一区二区三区 | 龙珠z普通话国语版在线观看 | 国产精品亚洲综合 | 国产h片在线观看 | 国产精品大片 | 亚洲精品色 | 中文字幕国产日韩 | 99小视频 | 日韩xxxbbb| 中文av网站 | 亚洲精品三级 | 日韩一区二区在线观看 | 亚洲一区二区三区免费 | 在线亚洲不卡 | 日韩福利在线 | 狠狠人人| 亚洲色图偷拍视频 | 99爱在线观看 | 操一草| 久久久久国产 | 欧美激情视频一区二区三区 | 国产精品久久久久久久一区探花 | 欧美精品一区在线发布 | 第四色影音先锋 | 国产伦精品一区二区三区在线 | 久久久久久亚洲 | 丁香久久| 久久久综合网 | 四虎永久在线 | 欧美色成人 | 国产精品视频一区二区三区四蜜臂 | 亚洲日日操 | 最新日韩欧美 | 久久成人av | 91一区 | 国产一区二区三区精品久久久 | 国产精品久久久久久网站 | 久热官网 | 天天舔天天干天天操 | 一级毛片免费看 | 国产探花在线精品一区二区 | 最近的中文字幕在线看视频 | 欧美精产国品一二三区 | 日日夜夜精品网站 | 狠狠做深爱婷婷综合一区 | 久久久久久久久久国产精品 | 久久51| 91极品视频在线观看 | 九色av| 91久久精品国产91久久 | 欧美日韩一区二区三区在线观看 | 在线视频亚洲 | 日韩一区二区三区在线播放 | 亚洲一区二区三区免费视频 | 成人在线播放网站 | 黄色av网站在线免费观看 | 亚洲久草在线 | 欧美性猛交一区二区三区精品 | 毛片视频播放 | 国产精品99在线观看 | 亚洲狠狠爱一区二区三区 | 亚洲人成网站999久久久综合 | 99精品国产在热久久 | 一区二区三区在线免费播放 | 天天碰天天操 | 国产美女永久免费无遮挡 | 欧美精品tv | 亚洲成年片 | 在线观看成人网 | 国产精品日韩 | 日本精品二区 | 国产夜夜夜 | 播放一级黄色片 | 欧美在线一区二区三区 | 青娱乐国产精品视频 | 欧美日韩综合精品 | 夜夜av| 亚洲精品免费视频 | 韩国三级中文字幕hd久久精品 | 精品香蕉一区二区三区 | 亚洲久悠悠色悠在线播放 | 国产成人精品一区二 | 黄色免费网址大全 | 男女羞羞视频免费在线观看 | 精品一区二区三区在线观看视频 | 亚洲精品日韩综合观看成人91 | 久久免费精品视频 | 成人激情在线 | 国产精品久久 | 久久精品高清 | 国产成人精品一区二区在线 | 欧美日韩成人在线 | 特级做a爰片毛片免费看108 | 亚洲 中文 欧美 日韩在线观看 | 亚洲一区视频在线 | 狠狠综合久久av一区二区小说 | 成人在线三级 | 一区中文字幕 | 北条麻妃一区二区免费播放 | 国产精品一区二区无线 | 亚洲欧美成人影院 | 最新国产成人 | 成人精品一区二区三区 | 欧美色图亚洲自拍 | 亚洲欧美日韩在线一区二区三区 | 26uuu成人免费毛片 | 国产视频一区二区三区四区 | 国产精品久久久久久久午夜 | 成人在线观 | 国产小视频在线 | 精品久久99 | 亚洲毛片在线 | 亚洲成人精品 | 桃色视频在线播放 | 成人免费一区二区三区视频网站 | 91亚洲国产精品 | 国产成人精品一区二区在线 | 午夜av电影 | 羞羞视频免费观看 | 黄色毛片av | 一区二区三区精品 | 日韩素人一区二区三区 | 午夜精品久久久久久久久 | 黄色网址大全在线观看 | 精品久久久久香蕉网 | 日本一区二区三区中文字幕 | 天天干狠狠干 | 欧美亚洲日本 | 国产xxxx精品 | 日韩国产欧美视频 | 亚洲午夜电影 | 国产精品久久久久国产a级 欧美日本韩国一区二区 |