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

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

詳解Java中的反射機制和動態代理

瀏覽:102日期:2022-08-10 18:41:11
目錄一、反射概述二、反射之Class類2.1、初識Class類2.2、Class有下面的幾個特點2.3、獲取Class類實例2.4、關于包裝類的靜態屬性2.5、通過Class類的其他方法獲取三、Class類的API3.1、創建實例對象3.2、獲取構造器3.3、獲取成員變量并使用Field對象的方法3.4、獲取方法并使用method3.5、獲得該類的所有接口3.6、獲取指定資源的輸入流四、反射的應用之動態代理4.1、靜態代理4.2、JDK中的動態代理五、動態代理與AOP簡單實現5.1、AOP是什么5.2、模擬實現AOP一、反射概述

反射機制指的是Java在運行時候有一種自觀的能力,能夠了解自身的情況為下一步做準備,其想表達的意思就是:在運行狀態中,對于任意一個類,都能夠獲取到這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意一個方法和屬性(包括私有的方法和屬性),這種動態獲取的信息以及動態調用對象的方法的功能就稱為java語言的反射機制。通俗點講,通過反射,該類對我們來說是完全透明的,想要獲取任何東西都可以,這是一種動態獲取類的信息以及動態調用對象方法的能力。

想要使用反射機制,就必須要先獲取到該類的字節碼文件對象(.class),通過該類的字節碼對象,就能夠通過該類中的方法獲取到我們想要的所有信息(方法,屬性,類名,父類名,實現的所有接口等等),每一個類對應著一個字節碼文件也就對應著一個Class類型的對象,也就是字節碼文件對象。

Java提供的反射機制,依賴于我們下面要講到的Class類和java.lang.reflect類庫。我們下面要學習使用的主要類有:①Class表示類或者接口;②java.lang.reflect.Field表示類中的成員變量;③java.lang.reflect.Method表示類中的方法;④java.lang.reflect.Constructor表示類的構造方法;⑤Array提供動態數組的創建和訪問數組的靜態方法。

二、反射之Class類2.1、初識Class類

在類Object下面提供了一個方法:

public final native Class<?> getClass()

此方法將會被所有的子類繼承,該方法的返回值為一個Class,這個Class類就是反射的源頭。那么Class類是什么呢?Class類是Java中用來表達運行時類型信息的對應類,我們剛剛也說過所有類都會繼承Object類的getClass()方法,那么也體現了著Java中的每個類都有一個Class對象,當我們編寫并編譯一個創建的類就會產生對應的class文件并將類的信息寫到該class文件中,當我們使用正常方式new一個對象或者使用類的靜態字段時候,JVM的累加器子系統就會將對應的Class對象加載到JVM中,然后JVM根據這個類型信息相關的Class對象創建我們需要的實例對象或者根據提供靜態變量的引用值。將Class類稱為類的類型,一個Class對象稱為類的類型對象。

2.2、Class有下面的幾個特點

①Class也是類的一種(不同于class,class是一個關鍵字);

②Class類只有一個私有的構造函數

private Class(ClassLoader loader)

只有JVM能夠創建Class類的實例;

③對于同一類的對象,在JVM中只存在唯一一個對應的Class類實例來描述其信息;

④每個類的實例都會記得自己是由哪個Class實例所生成;

⑤通過Class可以完整的得到一個類中的完整結構;

2.3、獲取Class類實例

剛剛說到過Class只有一個私有的構造函數,所以我們不能通過new創建Class實例,有下面這幾種獲取Class實例的方法:

①Class.forName('類的全限定名'),該方法只能獲取引用類型的類類型對象。該方法會拋出異常(a.l類加載器在類路徑中沒有找到該類 b.該類被某個類加載器加載到JVM內存中,另外一個類加載器有嘗試從同一個包中加載)

//Class<T> clazz = Class.forName('類的全限定名');這是通過Class類中的靜態方法forName直接獲取一個Class的對象Class<?> clazz1 = null;try { clazz1 = Class.forName('reflect.Person');} catch (ClassNotFoundException e) { e.printStackTrace();}System.out.println(clazz1); //class reflect.Person

②如果我們有一個類的對象實例,那么通過這個對象的getClass()方法可以獲得他的Class對象,如下所示

//Class<T> clazz = xxx.getClass(); //通過類的實例獲取類的Class對象Class<?> clazz3 = new Person().getClass();System.out.println(clazz3); //class reflect.PersonClass<?> stringClass = 'string'.getClass();System.out.println(stringClass); //class java.lang.String/** * [代表數組, * B代表byte; * I代表int; * Z代表boolean; * L代表引用類型 * 組合起來就是指定類型的一維數組,如果是[[就是二維數組 */Class<?> arrClass = new byte[20].getClass();System.out.println(arrClass); //class [BClass<?> arrClass1 = new int[20].getClass();System.out.println(arrClass1); //class [IClass<?> arrClass2 = new boolean[20].getClass();System.out.println(arrClass2); //class [ZClass<?> arrClass3 = new Person[20].getClass();System.out.println(arrClass3); //class [Lreflect.Person;Class<?> arrClass4 = new String[20].getClass();System.out.println(arrClass4); //class [Ljava.lang.String;

③通過類的class字節碼文件獲取,通過類名.class獲取該類的Class對象

//Class<T> clazz = XXXClass.class; 當類已經被加載為.class文件時候,Class<Person> clazz2 = Person.class;System.out.println(clazz2);System.out.println(int [][].class);//class [[ISystem.out.println(Integer.class);//class java.lang.Integer2.4、關于包裝類的靜態屬性

我們知道,在Java中對于基本類型和void都有對應的包裝類。在包裝類中有一個靜態屬性TYPE保存了該類的類類型。如下所示

/** * The {@code Class} instance representing the primitive type * {@code int}. * * @since JDK1.1 */ @SuppressWarnings('unchecked') public static final Class<Integer> TYPE = (Class<Integer>) Class.getPrimitiveClass('int');

我們使用這個靜態屬性來獲得Class實例,如下所示

Class c0 = Byte.TYPE; //byteClass c1 = Integer.TYPE; //intClass c2 = Character.TYPE; //charClass c3 = Boolean.TYPE; //booleanClass c4 = Short.TYPE; //shortClass c5 = Long.TYPE; //longClass c6 = Float.TYPE; //floatClass c7 = Double.TYPE; //doubleClass c8 = Void.TYPE; //void2.5、通過Class類的其他方法獲取

①public native Class<? super T> getSuperclass():獲取該類的父類

Class c1 = Integer.class;Class par = c1.getSuperclass();System.out.println(par); //class java.lang.Number

②public Class<?>[] getClasses():獲取該類的所有公共類、接口、枚舉組成的Class數組,包括繼承的;

③public Class<?>[] getDeclaredClasses():獲取該類的顯式聲明的所有類、接口、枚舉組成的Class數組;

④(Class/Field/Method/Constructor).getDeclaringClass():獲取該類/屬性/方法/構造器所在的類

三、Class類的API

這是下面測試用例中使用的Person類和實現的接口

package reflect;interface Test { String test = 'interface';}public class Person implements Test{ private String id; private String name; public void sing(String name) {System.out.println(getName() + '會唱' + name +'歌'); } private void dance(String name) {System.out.println(getName() + '會跳' + name + '舞'); } public void playBalls() {System.out.println(getName() + '會打籃球'); } public String getId() {return id; } public void setId(String id) {this.id = id; } public String getName() {return name; } public void setName(String name) {this.name = name; } public Person() { } public Person(String id, String name) {this.id = id;this.name = name; } public Person(String id) {this.id = id; } @Override public String toString() {return 'Person{' +'id=’' + id + ’’’ +', name=’' + name + ’’’ +’}’; }}//Person3.1、創建實例對象

public void test4() throws Exception{ Class clazz =Class.forName('reflect.Person'); Person person = (Person)clazz.newInstance(); System.out.println(person);}

創建運行時類的對象,使用newInstance(),實際上就是調用運行時指定類的無參構造方法。這里也說明要想創建成功,需要對應的類有無參構造器,并且構造器的權限要足夠,否則會拋出下面的異常。

①我們顯示聲明Person類一個帶參構造,并沒有無參構造,這種情況會拋出InstantiationException

詳解Java中的反射機制和動態代理

②更改無參構造器訪問權限為private

詳解Java中的反射機制和動態代理

3.2、獲取構造器

(1)獲取指定可訪問的構造器創建對象實例

上面我們所說的使用newInstance方法創建對象,如果不指定任何參數的話默認是調用指定類的無參構造器的。那么如果沒有無參構造器,又想創建對象實例怎么辦呢,就使用Class類提供的獲取構造器的方法,顯示指定我們需要調用哪一個無參構造器。

@Testpublic void test5() throws Exception { Class clazz = Class.forName('reflect.Person'); //獲取帶參構造器 Constructor constructor = clazz.getConstructor(String.class, String .class); //通過構造器來實例化對象 Person person = (Person) constructor.newInstance('p1', 'person'); System.out.println(person);}

當我們指定的構造器全部不夠(比如設置為private),我們在調用的時候就會拋出下面的異常

詳解Java中的反射機制和動態代理

(2)獲得全部構造器

@Testpublic void test6() throws Exception { Class clazz1 = Class.forName('reflect.Person'); Constructor[] constructors = clazz1.getConstructors(); for (Constructor constructor : constructors) {Class[] parameters = constructor.getParameterTypes();System.out.println('構造函數名:' + constructor + 'n' + '參數');for (Class c: parameters) { System.out.print(c.getName() + ' ');}System.out.println(); }}

運行結果如下

詳解Java中的反射機制和動態代理

3.3、獲取成員變量并使用Field對象的方法

(1)Class.getField(String)方法可以獲取類中的指定字段(可見的), 如果是私有的可以用getDeclaedField('name')方法獲取,通過set(對象引用,屬性值)方法可以設置指定對象上該字段的值, 如果是私有的需要先調用setAccessible(true)設置訪問權限,用獲取的指定的字段調用get(對象引用)可以獲取指定對象中該字段的值。

@Testpublic void test7() throws Exception { Class clazz1 = Class.forName('reflect.Person'); //獲得實例對象 Person person = (Person) clazz1.newInstance(); /** * 獲得類的屬性信息 * 使用getField(name),通過指定的屬性name獲得 * 如果屬性不是public的,使用getDeclaredField(name)獲得 */ Field field = clazz1.getDeclaredField('id'); //如果是private的,需要設置權限為可訪問 field.setAccessible(true); //設置成員變量的屬性值 field.set(person, 'person1'); //獲取成員變量的屬性值,使用get方法,其中第一個參數表示獲得字段的所屬對象,第二個參數表示設置的值 System.out.println(field.get(person)); //這里的field就是id屬性,打印person對象的id屬性的值}

(2)獲得全部成員變量

@Testpublic void test8() throws Exception{ Class clazz1 = Class.forName('reflect.Person'); //獲得實例對象 Person person = (Person) clazz1.newInstance(); person.setId('person1'); person.setName('person1_name'); Field[] fields = clazz1.getDeclaredFields(); for (Field f : fields) {//打開private成員變量的可訪問權限f.setAccessible(true);System.out.println(f+ ':' + f.get(person)); }}

詳解Java中的反射機制和動態代理

3.4、獲取方法并使用method

(1)使用Class.getMethod(String, Class...) 和 Class.getDeclaredMethod(String, Class...)方法可以獲取類中的指定方法,如果為私有方法,則需要打開一個權限。setAccessible(true);用invoke(Object, Object...)可以調用該方法。如果是私有方法而使用的是getMethod方法來獲得會拋出NoSuchMethodException

@Testpublic void test9() throws Exception{ Class clazz1 = Class.forName('reflect.Person'); //獲得實例對象 Person person = (Person) clazz1.newInstance(); person.setName('Person'); //①不帶參數的public方法 Method playBalls = clazz1.getMethod('playBalls'); //調用獲得的方法,需要指定是哪一個對象的 playBalls.invoke(person); //②帶參的public方法:第一個參數是方法名,后面的可變參數列表是參數類型的Class類型 Method sing = clazz1.getMethod('sing',String.class); //調用獲得的方法,調用時候傳遞參數 sing.invoke(person,'HaHaHa...'); //③帶參的private方法:使用getDeclaredMethod方法 Method dance = clazz1.getDeclaredMethod('dance', String.class); //調用獲得的方法,需要先設置權限為可訪問 dance.setAccessible(true); dance.invoke(person,'HaHaHa...');}

(2)獲得所有方法(不包括構造方法)

@Testpublic void test10() throws Exception{ Class clazz1 = Class.forName('reflect.Person'); //獲得實例對象 Person person = (Person) clazz1.newInstance(); person.setName('Person'); Method[] methods = clazz1.getDeclaredMethods(); for (Method method: methods) {System.out.print('方法名' + method.getName() + '的參數是:');//獲得方法參數Class[] params = method.getParameterTypes();for (Class c : params) { System.out.print(c.getName() + ' ');}System.out.println(); }}3.5、獲得該類的所有接口

Class[] getInterfaces():確定此對象所表示的類或接口實現的接口,返回值:接口的字節碼文件對象的數組

@Testpublic void test11() throws Exception{ Class clazz1 = Class.forName('reflect.Person'); Class[] interfaces = clazz1.getInterfaces(); for (Class inter : interfaces) {System.out.println(inter); }}3.6、獲取指定資源的輸入流

InputStreamgetResourceAsStream(String name),返回值:一個 InputStream 對象;如果找不到帶有該名稱的資源,則返回null;參數:所需資源的名稱,如果以'/'開始,則絕對資源名為'/'后面的一部分。

@Testpublic void test12() throws Exception { ClassLoader loader = this.getClass().getClassLoader(); System.out.println(loader);//sun.misc.Launcher$AppClassLoader@18b4aac2 ,應用程序類加載器 System.out.println(loader.getParent());//sun.misc.Launcher$ExtClassLoader@31befd9f ,擴展類加載器 System.out.println(loader.getParent().getParent());//null ,不能獲得啟動類加載器 Class clazz = Person.class;//自定義的類 ClassLoader loader2 = clazz.getClassLoader(); System.out.println(loader2);//sun.misc.Launcher$AppClassLoader@18b4aac2 //下面是獲得InputStream的例子 ClassLoader inputStreamLoader = this.getClass().getClassLoader(); InputStream inputStream = inputStreamLoader.getResourceAsStream('person.properties'); Properties properties = new Properties(); properties.load(inputStream); System.out.println('id:' + properties.get('id')); System.out.println('name:' + properties.get('name'));}

其中properties文件內容

id = person001

name = person-name1

四、反射的應用之動態代理

代理模式在Java中應用十分廣泛,它說的是使用一個代理將對象包裝起來然后用該代理對象取代原始對象,任何原始對象的調用都需要通過代理對象,代理對象決定是否以及何時將方法調用轉到原始對象上。這種模式可以這樣簡單理解:你自己想要做某件事情(被代理類),但是覺得自己做非常麻煩或者不方便,所以就叫一個另一個人(代理類)來幫你做這個事情,而你自己只需要告訴要做啥事就好了。上面我們講到了反射,在下面我們會說一說java中的代理

4.1、靜態代理

靜態代理其實就是程序運行之前,提前寫好被代理類的代理類,編譯之后直接運行即可起到代理的效果,下面會用簡單的例子來說明。在例子中,首先我們有一個頂級接口(ProductFactory),這個接口需要代理類(ProxyTeaProduct)和被代理類(TeaProduct)都去實現它,在被代理類中我們重寫需要實現的方法(action),該方法會交由代理類去選擇是否執行和在何處執行;被代理類中主要是提供頂級接口的的一個引用但是引用實際指向的對象則是實現了該接口的代理類(使用多態的特點,在代理類中提供構造器傳遞實際的對象引用)。分析之后,我們通過下面這個圖理解一下這個過程。

詳解Java中的反射機制和動態代理

package proxy;/** * 靜態代理 *///產品接口interface ProductFactory { void action();}//一個具體產品的實現類,作為一個被代理類class TeaProduct implements ProductFactory{ @Override public void action() {System.out.println('我是生產茶葉的......'); }}//TeaProduct的代理類class ProxyTeaProduct implements ProductFactory { //我們需要ProductFactory的一個實現類,去代理這個實現類中的方法(多態) ProductFactory productFactory; //通過構造器傳入實際被代理類的對象,這時候代理類調用action的時候就可以在其中執行被代理代理類的方法了 public ProxyTeaProduct(ProductFactory productFactory) {this.productFactory = productFactory; } @Override public void action() {System.out.println('我是代理類,我開始代理執行方法了......');productFactory.action(); }}public class TestProduct { public static void main(String[] args) {//創建代理類的對象ProxyTeaProduct proxyTeaProduct = new ProxyTeaProduct(new TeaProduct());//執行代理類代理的方法proxyTeaProduct.action(); }}

那么程序測試的輸出結果也很顯然了,代理類執行自己實現的方法,而在其中有調用了被代理類的方法

詳解Java中的反射機制和動態代理

那么我們想一下,上面這種稱為靜態代理的方式有什么缺點呢?因為每一個代理類只能為一個借口服務(因為這個代理類需要實現這個接口,然后去代理接口實現類的方法),這樣一來程序中就會產生過多的代理類。比如說我們現在又來一個接口,那么是不是也需要提供去被代理類去實現它然后交給代理類去代理執行呢,那這樣程序就不靈活了。那么如果有一種方式,就可以處理新添加接口的以及實現那不就更加靈活了嗎,在java中反射機制的存在為動態代理創造了機會

4.2、JDK中的動態代理

動態代理是指通過代理類來調用它對象的方法,并且是在程序運行使其根據需要創建目標類型的代理對象。它只提供一個代理類,我們只需要在運行時候動態傳遞給需要他代理的對象就可以完成對不同接口的服務了。看下面的例子。(JDK提供的代理正能針對接口做代理,也就是下面的newProxyInstance返回的必須要是一個接口)

package proxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;/** * JDK中的動態代理 *///第一個接口interface TargetOne { void action();}//第一個接口的被代理類class TargetOneImpl implements TargetOne{ @Override public void action() {System.out.println('我會實現父接口的方法...action'); }}//動態代理類class DynamicProxyHandler implements InvocationHandler { //接口的一個引用,多態的特性會使得在程序運行的時候,它實際指向的是實現它的子類對象 private TargetOne targetOne; //我們使用Proxy類的靜態方法newProxyInstance方法,將代理對象偽裝成那個被代理的對象 /** * ①這個方法會將targetOne指向實際實現接口的子類對象 * ②根據被代理類的信息返回一個代理類對象 */ public Object setObj(TargetOne targetOne) {this.targetOne = targetOne;// public static Object newProxyInstance(ClassLoader loader, //被代理類的類加載器// Class<?>[] interfaces, //被代理類實現的接口// InvocationHandler h) //實現InvocationHandler的代理類對象return Proxy.newProxyInstance(targetOne.getClass().getClassLoader(),targetOne.getClass().getInterfaces(),this); } //當通過代理類的對象發起對接口被重寫的方法的調用的時候,都會轉換為對invoke方法的調用 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println('這是我代理之前要準備的事情......');/** * 這里回想一下在靜態代理的時候,我們顯示指定代理類需要執行的是被代理類的哪些方法; * 而在這里的動態代理實現中,我們并不知道代理類會實現什么方法,他是根據運行時通過反射來 * 知道自己要去指定被代理類的什么方法的 */Object returnVal = method.invoke(this.targetOne,args);//這里的返回值,就相當于真正調用的被代理類方法的返回值System.out.println('這是我代理之后要處理的事情......');return returnVal; }}public class TestProxy { public static void main(String[] args) {//創建被代理類的對象TargetOneImpl targetOneImpl = new TargetOneImpl();//創建實現了InvocationHandler的代理類對象,然后調用其中的setObj方法完成兩項操作//①將被代理類對象傳入,運行時候調用的是被代理類重寫的方法//②返回一個類對象,通過代理類對象執行接口中的方法DynamicProxyHandler dynamicProxyHandler = new DynamicProxyHandler();TargetOne targetOne = (TargetOne) dynamicProxyHandler.setObj(targetOneImpl);targetOne.action(); //調用該方法運行時都會轉為對DynamicProxyHandler中的invoke方法的調用 }}

運行結果如下。現在我們對比jdk提供的動態代理和我們剛剛實現的靜態代理,剛剛說到靜態代理對于新添加的接口需要定義對應的代理類去代理接口的實現類。而上面的測試程序所使用的動態代理規避了這個問題,即我們不需要顯示的指定每個接口對應的代理類,有新的接口添加沒有關系,只需要在使用的時候傳入接口對應的實現類然后返回代理類對象(接口實現類型),然后調用被代理類的方法即可。

詳解Java中的反射機制和動態代理

五、動態代理與AOP簡單實現5.1、AOP是什么

AOP(Aspect Orient Programming)我們一般稱之為面向切面編程,作為一種面向對象的補充,用于處理系統中分布于各個模塊的橫切關注點,比如事務管理、日志記錄等。AOP實現的關鍵在于AOP的代理(實際實現上有靜態代理和動態代理),我們下面使用JDK的動態代理的方式模擬實現下面的場景。

5.2、模擬實現AOP

我們先考慮下面圖中的情況和說明。然后我們使用動態代理的思想模擬簡單實現一下這個場景

詳解Java中的反射機制和動態代理

package aop;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;//基于jdk的針對接口實現動態代理,要求的接口interface Target { void login(); void logout();}//被代理類class TargetImpl implements Target { @Override public void login() {System.out.println('log......'); } @Override public void logout() {System.out.println('logout......'); }}class Util { public void printLog() {System.out.println('我是記錄打印日志功能的方法......'); } public void getProperties() {System.out.println('我是獲取配置文件信息功能的方法......'); }}//實現了InvocationHandler的統一代理類class DynamicProxyHandler implements InvocationHandler { private Object object; /** * 參數為obj,是應對對不同的被代理類,都能綁定與該代理類的代理關系 * 這個方法會將targetOne指向實際實現接口的子類對象,即當前代理類實際要去代理的那個類 */ public void setObj(Object obj) {this.object = obj; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Util util = new Util();util.getProperties();Object object = method.invoke(this.object, args); //這個方法是個動態的方法,可以是login,可以是logout,具體在測試調用中調用不同方法util.printLog();return object; }}//該類的主要作用就是動態的創建一個代理類的對象,同時需要執行被代理類class MyDynamicProxyUtil { //參數obj表示動態的傳遞進來被代理類的對象 public static Object getProxyInstance(Object object) {//獲取代理類對象DynamicProxyHandler dynamicProxyHandler = new DynamicProxyHandler();dynamicProxyHandler.setObj(object);//設置好代理類與被代理類之間的關系后,返回一個代理類的對象return Proxy.newProxyInstance(object.getClass().getClassLoader(), object.getClass().getInterfaces(), dynamicProxyHandler); }}public class TestAop { public static void main(String[] args) {//獲得被代理類Target target = new TargetImpl();//通過代理類工具類,設置實際與代理類綁定的被代理類,并返回一個代理類對象執行實際的方法Target execute = (Target) MyDynamicProxyUtil.getProxyInstance(target);execute.login();execute.logout(); }}

詳解Java中的反射機制和動態代理

現在來分析一下上面的代碼,首先我們看一下下面的這個圖。在圖中動態代理增加的通用日志方法、配置文件方法就是增加的方法,他在執行用戶實際自己開發的方法之前、之后調用。對應于上面的程序就是Target接口的實現類實現的login、logout方法被代理類動態的調用,在他們執行之前會調用日志模塊和配置文件模塊的功能。

詳解Java中的反射機制和動態代理

以上就是詳解Java中的反射機制和動態代理的詳細內容,更多關于Java 反射機制 動態代理的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲免费观看视频 | 成人影院在线 | 日韩精品成人 | 激情自拍偷拍 | 91麻豆精品国产91久久久更新资源速度超快 | 精国产品一区二区三区 | 色网在线看 | 久久精品亚洲一区二区 | 亚洲欧美日韩在线 | 亚州综合| 国产人成精品一区二区三 | 欧美一级电影免费观看 | 精品1区 | 自拍在线 | 欧美性猛片aaaaaaa做受 | 欧美亚洲国产一区 | 第一色在线 | 美女张开腿视频网站免费 | 亚洲香蕉在线观看 | 欧美成人精品一区二区男人看 | 欧美精品欧美精品系列 | 国产精品国产精品国产专区不卡 | 国产免费一区二区三区最新不卡 | 成人精品视频一区二区三区 | 中文字幕天天操 | 国产a一三三四区电影 | 农村妇女毛片精品久久久 | 国产三级精品在线 | 国产麻豆乱码精品一区二区三区 | 日日爱夜夜爱 | 久久久久久久一区二区三区 | 五月婷婷综合激情网 | 欧美精品一二区 | 欧美一区二区三区在线视频 | 亚洲狠狠久久综合一区77777 | 亚洲一区中文字幕永久在线 | 在线日韩欧美 | 天天操天天干天天干 | 成人av网页 | 成人性大片免费观看网站 | 久久久精品久久久 | www.99热这里只有精品 | 久久久国产精品视频 | 福利在线播放 | 中文字幕在线观看2021 | 毛片免费看 | 日韩精品在线视频 | 特级淫片裸体免费看 | 日韩成人影院 | 99国产精品久久久久久久 | 国产精品成人一区二区三区夜夜夜 | 国产精品视频一区二区三区不卡 | 91免费国产 | 成人日韩 | 久久精品123 | 精品国产一区二区三区日日嗨 | 日韩视频中文字幕 | www视频在线观看 | 在线免费色视频 | 国产成人精品免高潮在线观看 | 国产一区二区三区高清 | 国产精品久久久久久久久久久久久久 | 亚洲福利一区 | 欧美高潮 | 成人午夜精品一区二区三区 | 黄色大片网站在线观看 | 国产成人精品综合 | 蜜桃精品久久久久久久免费影院 | 久久精品免费一区二区三区 | 犬夜叉在线观看 | 中文字幕在线视频第一页 | 在线观看中文字幕 | 天天色天天看 | 最新日韩av | 国产在线观看高清 | 欧美一区不卡 | 天天操夜夜拍 | 理论片87福利理论电影 | 久久福利 | 午夜精品久久久久久久久久久久 | 色综合88| 亚洲欧美日韩在线一区 | 国产精品丝袜一区二区 | 日韩av免费看 | 在线亚洲精品 | 久久精彩 | 红杏aⅴ成人免费视频 | 国产欧美精品一区二区色综合 | 久久精品一区二区国产 | 免费在线视频精品 | 国产色网站| 天天干夜夜爽 | 国产乱码精品一区二区三区忘忧草 | 亚洲欧洲视频在线 | 97精品国产97久久久久久免费 | 欧美三级视频 | a级性生活 | 91hd精品少妇 | 日本一区二区三区免费观看 | 成人午夜在线 | 99精品国产热久久91蜜凸 | 91佛爷在线观看 | 一区二区三区四区免费观看 | 国产二区视频 | 美女逼网站 | 交视频在线观看国产 | 欧美日韩中文字幕 | www.久久久.com | 天堂资源在线 | 国产高清免费视频 | 91视频免费观看 | 日韩一区欧美一区 | 国产精品成人品 | 日本精品在线播放 | 国产精品视频一区二区三区四 | 宅男lu666噜噜噜在线观看 | 亚洲一区二区三区中文字幕 | 中文字幕国产视频 | 国产高清一级毛片在线不卡 | 免费在线日韩 | 欧美日韩大片在线观看 | 天天爽夜夜爽夜夜爽精品视频 | 一级黄色片视频 | 国产农村妇女精品一二区 | 日韩国产在线播放 | 久久爱综合 | 国产综合视频 | 亚洲精品久久久久久久久久久 | 欧美xxxⅹ性欧美大片 | 久久久精品久久久久久 | 国产成人一区二区三区 | 99这里只有精品视频 | 国产成人精品免高潮在线观看 | 日本一区二区三区四区不卡视频 | 精品1区| 久久精品99 | 日日干天天干 | 色九九 | 精品久久一区二区三区 | 午夜私人影院 | 国产剧情一区二区 | 在线中文av | 91久久国产综合久久91精品网站 | 亚洲91 | 亚洲精品一区二区三区蜜桃久 | 又黄又爽的网站 | 国产精品精品视频 | 亚洲精品一区二区三区不 | 欧美精品一级二级 | 黄色精品网站 | 亚洲视频免费在线观看 | 欧美精品一区二区三区一线天视频 | 欧美成人一区二区三区 | 波多野结衣一区二 | 欧美全黄 | 欧美精品一区二区三区手机在线 | 国产日韩精品一区二区 | 欧美日韩毛片 | 天天亚洲 | 色站综合 | 国产欧美综合一区二区三区 | 美女国产精品 | 中文字幕在线视频免费播放 | 伊人网在线 | 国产精品日产欧美久久久久 | 亚洲a在线观看 | 欧美精品一区二区三区蜜桃视频 | 中文字幕在线观看第一页 | 国产欧美在线观看 | 一区二区在线不卡 | 久久精品在线视频 | 国产免费黄色 | 欧美1314| 久久男人的天堂 | 亚洲国产精品久久 | 久久女人网| 欧美1区| 国产wwwcom | 北条麻妃一区二区三区在线观看 | 亚洲二区在线播放 | zzzzyyyy精品国产 | 欧美日韩电影一区二区 | 日韩一区二区在线视频 | 国产精品久久a | 青楼18春一级毛片 | 国产精品99久久久久久动医院 | www.久久.com| 国产欧美综合一区二区三区 | 欧美日一区二区 | 日日夜夜一区二区 | 99久久精品免费看国产免费粉嫩 | 亚洲91| 成人在线免费观看 | 一区二区中文字幕 | 欧美亚洲一区二区三区 | 久久精品国产免费 | 五月天中文字幕 | 国产精品成人观看视频国产奇米 | 毛片网站大全 | 久久精品国产视频 | 久草在线在线精品观看 | 91久久久久久久久久久久久 | 久久精品亚洲欧美日韩精品中文字幕 | 久国产| 久久这里只有精品首页 | 韩国精品一区 | 日韩欧美大片在线观看 | 国产激情视频在线 | 日本久久精品一区二区 | 欧美福利视频 | 久久精品久久综合 | 亚洲精品9999 | 不卡视频一区 | 亚洲欧美成人影院 | 99热国产精品 | 成人在线精品视频 | 99国内精品久久久久久久 | 久久久精品免费观看 | 成人在线国产 | 久久国产精品首页 | 国产依人| 日韩中文一区 | 亚洲 欧美 日韩 精品 | 日韩在线免费观看网站 | www国产亚洲精品久久网站 | 亚洲精品一区二区另类图片 | 亚洲一区视频在线播放 | 欧美精品久久久 | 蜜桃视频网站在线观看 | 亚洲精品久久久久久久久久久 | 亚洲国产精品va在线看黑人 | 国产激情视频在线 | 日韩理伦片在线观看视频播放 | a成人在线 | 在线国产一区二区 | 91亚洲在线 | 成人精品一区 | 91久久91久久精品免观看 | 欧美日韩国产一区二区三区不卡 | 国产主播久久 | 日韩和的一区二在线 | 亚洲欧美v国产一区二区 | 国产精品久久久久久久久久久久午夜片 | 日产欧产va高清 | 亚洲国产高清在线 | 999久久久国产999久久久 | 日韩手机专区 | 毛片一区二区三区 | 精品国产一区二区三区久久影院 | 欧美一级全黄 | 欧日韩在线视频 | 国产在线不卡一区 | a免费在线 | 国内精品视频一区 | 国产在线视频xxx | 精品久久久久久久久久久久 | 国产剧情一区二区三区 | av影片在线| 精久视频 | 欧美精品一区二区三区蜜桃视频 | 亚洲视频一区在线 | 国产视频一区在线 | 精品国产一区二区三区在线观看 | 亚洲不卡| 91嫩草在线 | 北条麻妃一区二区三区在线观看 | 一级毛片网 | 久久99国产精一区二区三区 | 国产免费一区二区三区四区五区 | 国产精品日韩在线观看 | 黄网站色大毛片 | 亚洲成人精品 | 亚洲精品久久久一区二区三区 | 久久另类 | 91视频免费观看 | 久久久久久久久成人 | 日韩精品一区二区三区中文字幕 | 久久久999国产 | 91视频黄色 | 精品国产欧美一区二区 | 一片毛片 | 成人免费在线看片 | 国产精品精品视频一区二区三区 | 亚洲人免费视频 | 国产在线网 | 国产成人精品一区二区三区视频 | 成人在线视频一区 | 欧美日韩在线精品 | 久久男人天堂 | 中文av在线播放 | 暖暖视频日韩欧美在线观看 | 亚洲成人综合在线 | 国产精品久久久久久吹潮 | 欧美日韩一区二区在线 | 伊人青青久 | 久久a毛片 | 999久久久国产999久久久 | 午夜在线小视频 | 午夜av影院| 一级一片免费看 | 久久久久久久久一区二区 | 国产精品久久久久久久久晋中 | 一区二区在线免费观看 | 日韩在线国产 | 天天澡天天狠天天天做 | 在线观看日韩精品 | 日韩精品在线观看一区 | 一二三区在线 | 久久亚洲视频 | 一区二区三区在线免费观看 | 宅男lu666噜噜噜在线观看 | 亚洲乱码国产乱码精品精98午夜 | 午夜私人影院在线观看 | 自拍视频网站 | 天天宗合网 | 国产激情在线 | 国产在线一区二区三区 | 日本美女影院 | 羞羞视频网站在线免费观看 | 亚洲国产成人精品女人久久久 | 97碰碰碰免费公开在线视频 | 91精品久久久久久久久久小网站 | 在线观看国精产品二区1819 | 欧美精品成人一区二区三区四区 | 在线视频 亚洲 | 日本在线视频一区二区 | 久久综合九色综合欧美狠狠 | 人人爽在线观看 | sese综合| 黄色一级片免费 | 国产美女av在线 | 午夜视频网址 | 欧美成人激情视频 | 一区二区三区日韩 | 91亚洲免费 | 国产综合久久久 | 亚洲人免费视频 | 亚洲影视一区 | 国产一级一级特黄女人精品毛片 | 日韩欧美成人一区二区三区 | 亚洲一区二区 | 精品伦精品一区二区三区视频 | 成人午夜视频在线观看 | 婷婷网址 | 日韩视频在线视频 | 人人草人人干 | 久久噜噜噜精品国产亚洲综合 | 亚洲a精品| 久久精品中文字幕一区 | 国产乱码精品一区二区三区中文 | 亚洲欧美久久久 | 综合一区二区三区 | 精品国产欧美一区二区三区成人 | 91麻豆精品国产91久久久资源速度 | 91在线精品一区二区 | 精品久久久久久久久久久久久 | 四虎影院在线免费播放 | 91麻豆精品国产91久久久资源速度 | 成人午夜看片 | 欧美日韩精品一区二区 | 99精品视频在线 | 夜夜久久 | 国产精品极品美女在线观看免费 | 麻豆成人在线 | 亚洲精品久久久久久下一站 | 国产天堂网 | 日干夜操 | 97视频观看 | 成人毛片视频免费 | 国产欧美综合一区二区三区 | 国产成人在线播放 | 国产一区免费在线观看 | 亚洲免费在线视频 | 久久久久久久国产精品 | 91在线视频福利 | 欧美成人免费在线观看 | 久久精品1区2区 | chinese中国真实乱对白 | 国产精品日韩欧美一区二区三区 | 国产91视频一区二区 | 男女精品视频 | 久久精品小视频 | 欧美激情国产日韩精品一区18 | 一级黄色片欧美 | 男女午夜视频 | 久久99精品久久久久久久青青日本 | 99国产精品久久久久老师 | 欧美日韩高清在线一区 | 99免费在线视频 | 亚洲第一男人天堂 | 亚洲精品影院在线 | 久久综合久久综合久久 | 国产激情不卡 | 国产成人精品久久 | 欧洲一区在线 | 亚洲日韩欧美一区二区在线 | av观看在线 | 亚洲欧美成人网 | 在线播放国产视频 | 国产高清一区 | 青青草国产 | 青青草99 | 日本一区二区不卡 | 国产精品久久久久久久久 | 国产一区二区三区久久久久久久久 | 精品午夜久久久 | 亚洲欧洲一区二区 | www..99热| 欧美a级成人淫片免费看 | 少妇一区二区三区 | 欧美成人影院在线 | 毛片av片 | 欧美国产在线观看 | julia中文字幕久久一区二区 | 欧美精品一区在线发布 | 国产一区二区视频在线观看 | 日韩成人不卡 | 亚洲成人福利 | 特黄特色大片免费视频观看 | 日韩中文字幕免费在线播放 | 香蕉大人久久国产成人av | 九九色九九 | 91福利在线导航 | 欧美三级视频 | 欧美成年黄网站色视频 | 亚洲永久免费视频 | 国产丝袜视频 | 亚洲综合99| 欧美一级免费看 | 亚洲一区二区三区四区五区中文 | 免费成人在线观看 | 日韩在线观看毛片 | 蜜臀精品 | 亚洲精品1区2区 | 综合一区 | av大片| 精品久久久久久久久久 | 在线观看午夜免费视频 | 亚洲视频欧美视频 | 成人深夜福利 | 亚洲毛片在线观看 | 99在线精品视频 | 天天综合天天色 | 国产成人99 | 午夜私人影院在线观看 | av黄色在线 | 爱干视频| 免费看的黄网站 | av免费网站在线观看 | 国产成人综合网 | 日日干天天干 | 亚洲av毛片一级二级在线 | 操操操av | 日韩一区二区三区在线视频 | 日韩高清成人 | 黄视频网站免费观看 | 久久精品日产高清版的功能介绍 | 日韩欧美在线视频 | 日韩亚洲 | 成人影视网址 | 欧美精品二区中文乱码字幕高清 | 精品国产一区二区三区在线观看 | 午夜精品一区二区三区在线视频 | 中文字幕视频在线观看 | 亚洲综合99 | 欧美国产精品一区 | 2022天天操| 在线观看日韩 | caoporon| 中文字幕第十二页 | 午夜精品久久久久久99热软件 | 美女国产 | 国产一区二区三区四区视频 | 在线观看91视频 | 久久久久av| www.精品| 太平公主一级艳史播放高清 | 玖玖爱视频在线 | 热久久这里只有精品 | av网站免费观看 | 亚洲精品久久久一区二区三区 | 欧美激情在线狂野欧美精品 | 日韩精品1区| 国产精品看片 | 超碰激情| 亚洲精品久久久久午夜 | 97色在线视频 | 欧美日韩精品免费观看视频 | 欧美日韩中文字幕在线 | 亚洲一区二区三区在线播放 | 精品久久久久久久 | 姐姐在线观看动漫第二集免费 | 中文字幕高清 | 国产一区二区精品 | 噜噜噜视频在线观看 | 欧美国产精品一区二区 | 最新黄色网址在线播放 | 国产精品毛片无码 | 国产一区二区高潮 | 亚洲免费网站 | 国产精品久久久久久二区 | 国产成人精品免费视频大全 | 国产精品久久久久久久久久久久久 | 成人午夜免费网站 | 91免费国产 | 中文字幕在线不卡 | 欧洲另类交 | 亚洲天堂一区 | 黄色在线免费观看 | 91视频日韩 | 日韩www| 日本成年人免费网站 | 欧美日本亚洲 | 亚洲精品www | 日韩在线中文字幕 | 一区二区三区回区在观看免费视频 | 美女一区 | 亚洲国产精品视频 | 日韩高清中文字幕 | 男人视频网站 | 欧美日韩国产综合视频 | 黄色一级电影 | 国产精品久久久久久久久久久久久 | www.精品| 欧美一级毛片免费看 | 男女深夜视频 | 在线观看中文 | 99re6在线视频精品免费 | 99久久婷婷 | 天堂色网| av国产精品 | 色噜噜一区二区 | 国产999精品久久久久 | 国产在视频一区二区三区吞精 | 色婷婷亚洲国产女人的天堂 | 在线成人亚洲 | av国产精品 | 亚洲网站视频 | 99热在线观看免费 | 日韩中文字幕一区二区高清99 | 婷婷丁香六月天 | 欧美精品成人一区二区在线 | 精品亚洲区 | 午夜影院在线 | a级三四级黄大片 | 国产特一级黄色片 | 欧美日韩在线免费观看 | 91精品一区二区三区久久久久 | 国产日韩久久 | 伊人网伊人 | 九一视频在线观看 | 2020国产在线 | 欧美日韩国产一区二区 | 久久中文视频 | 欧美福利一区二区 | 久久夜视频 | 欧美a级成人淫片免费看 | 免费观看国产视频在线 | 亚洲精品一 | 成人欧美一区二区三区白人 | 91最新网站 | 亚洲一区二区三区在线免费观看 | 在线免费毛片 | 久久久91精品国产一区二区 | 二区在线观看 | 一区二区三区四区av | 精品无人乱码一区二区三区的优势 | 日韩大尺度电影在线观看 | 欧日韩在线视频 | 99精品欧美一区二区三区 | 国产精品久久久久久中文字 | 色吊丝在线永久观看最新版本 | 黄色小视频免费观看 | 天天干天天干天天干天天射 | 亚洲成人av | 欧美日韩一区在线 | 精品欧美一区二区三区久久久小说 | 久久综合九色综合欧美狠狠 | 亚洲视频在线播放 | 中文字幕亚洲一区二区va在线 | 国产日韩av在线 | 日韩中文在线 | 国产精品视频久久久 | 午夜一区二区三区在线观看 | 国产欧美一区二区三区在线看 | 欧洲成人午夜免费大片 | 特黄毛片 | 在线成人av | 国产区视频| 另类视频在线 | 成人福利网 | 国产精品99久久久久久久久久久久 | 午夜精品久久久久久久久 | 午夜精品久久久久久久久久久久久 | 日韩综合在线 | 日韩在线免费视频 | 不卡免费视频 | 久久久com| 欧洲毛片| 久久精品视频网 | 久久久999精品视频 欧美老妇交乱视频 | 亚洲大奶网 | 亚洲高清在线观看视频 | 狠狠天天 | 午夜影院a | 在线视频自拍 | 蜜桃精品久久久久久久免费影院 | 天天摸夜夜摸爽爽狠狠婷婷97 | 日韩中文字幕在线免费观看 | 欧美一区二区三区视频 | 三级免费网站 | 男女做爰高清无遮挡免费视频 | 亚洲免费国产视频 | 日韩成人免费中文字幕 | 婷婷午夜激情网 |