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

深入理解JDK動態代理

開發 項目管理
動態代理的優勢是實現無侵入式的代碼擴展,做方法的增強;讓你可以在不用修改源碼的情況下,增強一些方法;在方法的前后你可以做你任何想做的事情(甚至不去執行這個方法就可以)。

代理模式的目的是在不修改原有類方法設計的基礎上,對方法行為進行增強。

為了好理解,舉個實際場景,我們業務場景中經常有限流的需求,常規操作是在需要限流的接口代碼前加入調用次數判斷的代碼,但是這樣每個需要限流的方法都需要加,工作量大不說,一方面不好維護,不能很清晰的知道每個接口限流值,另一方面,限流代碼和業務代碼堆疊在一起,也影響代碼閱讀。解法是做一套統一限流,一般好點的會有專門的接口限流平臺,配置對應的接口名,設置限流值,直接就可以限流,實現方式就可以用動態代理。不修改原接口的實現,對接口進行增強。

動態代理的優勢是實現無侵入式的代碼擴展,做方法的增強;讓你可以在不用修改源碼的情況下,增強一些方法;在方法的前后你可以做你任何想做的事情(甚至不去執行這個方法就可以)。

靜態代理

既然有動態,那一定有靜態,說下區別吧,

靜態:最大的區別是靜態是編譯期就決定了,在程序運行之前,代理類的.class文件已經存在了。被代理類是什么,代理類實現方式。

舉個栗子:

我現在有個接口,是把Json字符串解析成Object 對象,接口如下:

  1. public interface IProvider { 
  2.     
  3.   Object getData(String json); 
  4.    

接口的實現類如下:

  1. public class SimpleProvider implements IProvider { 
  2.     @Override 
  3.     public Object getData(String json) { 
  4.         //解析json 拿到數據 
  5.         return parseJson(json); 
  6.     } 

那現在有個需求,需要對 getData 方法做限流,指定用靜態代理的方式。

需要很簡單,我就直接貼了:

  1. public class ProviderProxy implements IProvider{ 
  2.  
  3.     //持有一個被代理對象的引用(在這里是SimpleProvider) 
  4.     IProvider iProvider; 
  5.  
  6.     public StaticProviderProxy(IProvider iProvider){ 
  7.         this.iProvider = iProvider; 
  8.     } 
  9.  
  10.     @Override 
  11.     public Object getData(String json) { 
  12.         //做限流檢查 
  13.         if(callSpeed > flowLimt) { 
  14.           //流量超限 
  15.            throw FlowLimitException(); 
  16.         } 
  17.         Object object = iProvider.getData(json); 
  18.         return object; 
  19.     } 
  20. //main  
  21. public static void main(String[] args) { 
  22.   IProvider provider = new ProviderProxy(new SimpleProvider()); 
  23.     provider.getData("{\"data\":{}}"); 

這就是靜態代理,代理類(ProviderProxy)實現和需要做方法增強的被代理類(SimpleProvider)實現同一個接口(IProvider),方法具體實現上做增強,這里是限流檢查。

動態代理

Java 動態代理

  • 動態代理類:在程序運行時,通過反射機制動態生成。
  • 動態代理類通常代理接口下的所有類。靜態一般指定某個類代理。
  • 動態代理事先不知道要代理的是什么,只有在運行的時候才能確定。靜態是編譯期確定的。

還是以IProvider 接口為例,同樣是要對 SimpleProvider 做增強,如下:

  1. public class ProviderHandler implements InvocationHandler { 
  2.     Object target; 
  3.  
  4.     public Object bind(Object target){ 
  5.         this.target = target; 
  6.         //這里生成了代理對象 
  7.         return Proxy.newProxyInstance(target.getClass().getClassLoader(), 
  8.                 target.getClass().getInterfaces(), this); 
  9.     } 
  10.  
  11.     @Override 
  12.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
  13.         //限流 
  14.         flowLimit(args); 
  15.         Object obj = method.invoke(target, args); 
  16.         //打印日志 
  17.         logger.info("print log..."); 
  18.         return obj; 
  19.     } 
  20. //main 
  21. public static void main(String[] args) { 
  22.    ProviderHandler providerHandler = new ProviderHandler(); 
  23.    IProvider iProvider = (IProvider) providerHandler.bind(new SimpleProvider()); 
  24.    iProvider.getData("weibo.data"); 

這里有三個對象:

SimpleProvider 對象 , 我們稱之為被代理對象

ProviderHandler 對象,我們稱之為執行者對象

Proxy對象 (通過在ProviderHandler bind方法中使用Proxy.newProxyInstance生成的對象) 我們稱之為代理對象

這三個對象是什么關系呢?

Proxy是真正的代理類,SimpleProvider是被代理類,ProviderHandler是執行方法增強的執行者。

我們是為了增強SimpleProvider (被代理對象)的getData方法,就Proxy對象來代理被代理對象的執行,Proxy不親自來做這件事,而是交給執行者對象ProviderHandler 來實現增加的目錄,執行調用前的限流校驗。

實際怎么實現的呢?

newProxyInstance源碼

  1. public static Object newProxyInstance(ClassLoader loader, 
  2.                                           Class<?>[] interfaces, 
  3.                                           InvocationHandler h) 
  4.         throws IllegalArgumentException 
  5.     { 
  6.         //對 Invocationhandler做判空處理 
  7.         Objects.requireNonNull(h); 
  8.         //復制[IProvider接口] 
  9.         final Class<?>[] intfs = interfaces.clone(); 
  10.  
  11.        //根據IProvider的類加載器IProvider接口生成了Proxy類,關鍵:根據類加載器和接口對象在JVM緩存中生成一個類對象 
  12.         Class<?> cl = getProxyClass0(loader, intfs); 
  13.         //獲取構造器 
  14.         final Constructor<?> cons = cl.getConstructor(constructorParams); 
  15.         //保存InvocationHandler的引用 
  16.         final InvocationHandler ih = h; 
  17.         //通過構造器實例化Proxy代理對象 
  18.         return cons.newInstance(new Object[]{h}); 
  19.     } 

代碼注釋寫的很清晰。

可能這個地方大家都會疑惑,生成的Proxy對象是怎樣調用執行者的invoke函數的。

這個地方通過這段代碼將Proxy0的class字節碼輸出到文件。

  1. byte[] classFile = ProxyGenerator.generateProxyClass("$Proxy0", WeiboProvider.class.getInterfaces()); 
  2. String path = "C:**/IdeaProjects/study/out/production/study/SimpleProxy.class"
  3. try(FileOutputStream fos = new FileOutputStream(path)) { 
  4.     fos.write(classFile); 
  5.     fos.flush(); 
  6.     System.out.println("代理類class文件寫入成功"); 
  7.    } catch (Exception e) { 
  8.      System.out.println("寫文件錯誤"); 
  9.  } 

反編譯Proxy0如下:

  1. //Proxy0 是動態生成的類,繼承自Proxy,實現了IProvider接口 
  2. public final class $Proxy0 extends Proxy implements IProvider { 
  3.     private static Method m1; 
  4.     private static Method m2; 
  5.     private static Method m3; 
  6.     private static Method m0; 
  7.  
  8.     public $Proxy0(InvocationHandler var1) throws  { 
  9.         super(var1); 
  10.     } 
  11.  
  12.     public final boolean equals(Object var1) throws  { 
  13.         try { 
  14.             return ((Boolean)super.h.invoke(this, m1, new Object[]{var1})).booleanValue(); 
  15.         } catch (RuntimeException | Error var3) { 
  16.             throw var3; 
  17.         } catch (Throwable var4) { 
  18.             throw new UndeclaredThrowableException(var4); 
  19.         } 
  20.     } 
  21.  
  22.     public final String toString() throws  { 
  23.         try { 
  24.             return (String)super.h.invoke(this, m2, (Object[])null); 
  25.         } catch (RuntimeException | Error var2) { 
  26.             throw var2; 
  27.         } catch (Throwable var3) { 
  28.             throw new UndeclaredThrowableException(var3); 
  29.         } 
  30.     } 
  31.  
  32.     public final String getData(String var1) throws  { 
  33.         try { 
  34.             //m3就是IProvider 接口的getData方法  
  35.             //super.h 是父類java.lang.reflect.Proxy的屬性 InvocationHandler 
  36.             return (String)super.h.invoke(this, m3, new Object[]{var1}); 
  37.         } catch (RuntimeException | Error var3) { 
  38.             throw var3; 
  39.         } catch (Throwable var4) { 
  40.             throw new UndeclaredThrowableException(var4); 
  41.         } 
  42.     } 
  43.  
  44.     public final int hashCode() throws  { 
  45.         try { 
  46.             return ((Integer)super.h.invoke(this, m0, (Object[])null)).intValue(); 
  47.         } catch (RuntimeException | Error var2) { 
  48.             throw var2; 
  49.         } catch (Throwable var3) { 
  50.             throw new UndeclaredThrowableException(var3); 
  51.         } 
  52.     } 
  53.  
  54.     static { 
  55.         try { 
  56.             m1 = Class.forName("java.lang.Object").getMethod("equals", new Class[]{Class.forName("java.lang.Object")}); 
  57.             m2 = Class.forName("java.lang.Object").getMethod("toString", new Class[0]); 
  58.             //m3就是IProvider 接口的getData方法 
  59.             m3 = Class.forName("aop.IProvider").getMethod("getData", new Class[]{Class.forName("java.lang.String")}); 
  60.             m0 = Class.forName("java.lang.Object").getMethod("hashCode", new Class[0]); 
  61.         } catch (NoSuchMethodException var2) { 
  62.             throw new NoSuchMethodError(var2.getMessage()); 
  63.         } catch (ClassNotFoundException var3) { 
  64.             throw new NoClassDefFoundError(var3.getMessage()); 
  65.         } 
  66.     } 

重點在 return (String)super.h.invoke(this, m3, new Object[]{var1});代碼。

$Proxy0繼承Proxy類,實現了IProvider接口,所以也有getData()函數,而getData函數調用的是執行者InvocationHandler的invoke方法,m3是通過反射拿到的Method對象,所以看getData調用invoke傳遞的。三個參數,第一個是Proxy對象,第二個是getData方法對象,第三個是參數。

總結一下:

  • 動態代理的本質就是,生成一個繼承自Proxy,實現被代理接口(IProvider)的類 - Proxy0。
  • Proxy0 持有InvocationHandler實例,InvocationHandler 持有SimpleProvider實例。Proxy0調用接口 getData方法時,先傳遞給InvocationHandler,InvocationHandler再傳遞給SimpleProvider實例。

動態代理實際上就是幫我們在JVM內存中直接重新生成了代理類class和對應類對象,然后通過執行者InvocationHandler調用被代理對象SimpleProvider。

Spring AOP中的代理

Spring代理其實是對JDK動態代理和CGLIB代理進行了封裝,并且引入了AOP的概念,同時引入了AspectJ中的一些注解:@pointCut @After 等。

  1. public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { 
  2.            if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) { 
  3.    Class<?> targetClass = config.getTargetClass(); 
  4.    if (targetClass == null) { 
  5.     throw new AopConfigException("TargetSource cannot determine target class: " + 
  6.       "Either an interface or a target is required for proxy creation."); 
  7.    } 
  8.       // 如果是接口,使用jdk代理  
  9.    if (targetClass.isInterface() || Proxy.isProxyClass(targetClass)) { 
  10.     return new JdkDynamicAopProxy(config); 
  11.    } 
  12.       //否則使用cglib 
  13.    return new ObjenesisCglibAopProxy(config); 
  14.   } 
  15.   else { 
  16.    return new JdkDynamicAopProxy(config); 
  17.   } 
  18.  } 

 

責任編輯:武曉燕 來源: 安琪拉的博客
相關推薦

2016-12-08 15:36:59

HashMap數據結構hash函數

2010-06-01 15:25:27

JavaCLASSPATH

2020-07-21 08:26:08

SpringSecurity過濾器

2023-12-06 08:23:44

代理模式設計模式

2023-10-19 11:12:15

Netty代碼

2009-09-25 09:14:35

Hibernate日志

2013-09-22 14:57:19

AtWood

2021-02-17 11:25:33

前端JavaScriptthis

2017-08-15 13:05:58

Serverless架構開發運維

2025-05-06 00:43:00

MySQL日志文件MIXED 3

2017-01-10 08:48:21

2020-09-23 10:00:26

Redis數據庫命令

2019-06-25 10:32:19

UDP編程通信

2025-06-05 05:51:33

2024-02-21 21:14:20

編程語言開發Golang

2022-11-04 09:43:05

Java線程

2022-09-05 08:39:04

kubernetesk8s

2017-01-13 22:42:15

iosswift

2021-04-20 23:25:16

執行函數變量

2024-03-12 00:00:00

Sora技術數據
點贊
收藏

51CTO技術棧公眾號

牛夜精品久久久久久久| 91系列在线观看| 国产精品扒开腿做爽爽| 日韩色淫视频| 综合久久久久久| 动漫一区二区在线| 伊人手机在线视频| 91精品秘密在线观看| 亚洲第一级黄色片| 国内外免费激情视频| 顶级网黄在线播放| 精品国产123| 精品久久久久久久免费人妻| 在线看黄色av| gogogo免费视频观看亚洲一| 国产精品国产自产拍高清av水多| 久久免费看少妇高潮v片特黄| 老汉色老汉首页av亚洲| 欧美精品黑人性xxxx| 日本少妇高潮喷水视频| 黄色网在线看| 国产老女人乱淫免费| 久久av偷拍| 日本久久精品电影| 成品人视频ww入口| 国产午夜精品久久久久免费视| 久久亚洲私人国产精品va媚药| 亚洲综合中文字幕在线| 黄色一级视频免费看| 欧美日韩p片| 久久精品久久久久久| 日韩乱码人妻无码中文字幕久久 | 午夜精品蜜臀一区二区三区免费| 免费一级黄色录像| 国产成人精品999在线观看| 日韩欧美的一区| 一二三级黄色片| 草民电影神马电影一区二区| 欧美日韩一区免费| 欧美视频在线免费播放| 天堂av最新在线| 1000精品久久久久久久久| 五月天色一区| 国产人成在线视频| 久久久亚洲欧洲日产国码αv| 国产精品手机视频| 人人妻人人澡人人爽精品日本| 国产在线精品一区二区夜色| 国产精品中文字幕在线观看| www.av88| 美女视频网站黄色亚洲| 国产精品久久久久久久久影视 | 在线免费观看日韩欧美| 国产免费黄视频| 成人欧美大片| 欧美亚一区二区| 亚洲欧洲日本精品| 91成人在线| 欧美成人xxx| 国产精品免费网站在线观看| 中文字幕在线一区| 国产成人精品优优av| av大全在线观看| 香蕉久久国产| 国产精品大陆在线观看| 中文资源在线播放| 精品亚洲欧美一区| 999在线观看免费大全电视剧| www日本在线| 成年人国产精品| 欧美18视频| 中文字幕在线观看日本| 日韩久久一区二区| 97碰在线视频| 88xx成人永久免费观看| 欧洲精品一区二区| 成人高清在线观看视频| 激情小说亚洲图片| 在线播放国产一区二区三区| 亚洲黄色网址大全| 欧美黄色一级视频| 91av在线播放| 一级黄色大片免费观看| 国产精品系列在线观看| 狠狠干一区二区| 成人精品一区二区| 亚洲精品国久久99热| www.中文字幕在线| 伊人久久大香伊蕉在人线观看热v 伊人久久大香线蕉综合影院首页 伊人久久大香 | 九九在线视频| 亚洲特级片在线| 无码人妻少妇伦在线电影| 欧美自拍电影| 91精品免费观看| 影音先锋黄色资源| 欧美激情偷拍自拍| 55夜色66夜色国产精品视频| 在线观看亚洲国产| 99久久免费精品| 在线视频不卡一区二区三区| 超清av在线| 欧美色图天堂网| 久久人妻少妇嫩草av无码专区| 成人精品影院| 91精品国产91久久久久久不卡 | 激情六月婷婷久久| 欧美日韩中文国产一区发布| 26uuu亚洲电影在线观看| 日韩欧美精品中文字幕| 在线播放黄色av| 国产一区二区欧美| 国内外成人免费激情在线视频网站 | 日本高清视频一区二区| 欧美图片自拍偷拍| 色婷婷色综合| 热re91久久精品国99热蜜臀| 国产精品视频a| 亚洲国产成人自拍| 播放灌醉水嫩大学生国内精品| 欧美黄色一级| 中文字幕日韩精品在线| 久久精品视频5| 成人av电影在线网| 91成人综合网| 成人日韩视频| 日韩视频在线观看免费| 五月婷婷激情五月| wwww国产精品欧美| 激情深爱综合网| 精品无人区一区二区| 美女av一区二区三区| 中文字幕a级片| 国产欧美在线观看一区| 亚洲人成色77777| 欧美aaaaaaaa牛牛影院| 欧美激情一区二区三区久久久| 国产精品国产一区二区三区四区 | 蜜桃av久久久亚洲精品| 超碰在线97国产| 精品毛片乱码1区2区3区| 国产福利在线导航| 麻豆精品在线看| 午夜精品福利一区二区| 亚洲综合av一区二区三区| 亚洲精品一区久久久久久| 国产成人在线观看网站| 日本韩国一区二区| 久久亚洲国产成人精品无码区| jizz亚洲女人高潮大叫| 亚洲品质视频自拍网| 亚洲久久在线观看| 91精品国产91久久久久福利| 亚洲免费成人网| 亚洲综合色区另类av| 亚洲天堂av一区二区| 国产刺激高潮av| 亚洲欧美另类一区| 精品理论电影| 国产精品久久久久久搜索 | 欧美一级片免费看| 欧美成欧美va| 国产成人亚洲综合色影视| 天天在线免费视频| 91精品尤物| 97视频在线观看视频免费视频| 日日夜夜精品免费| 欧美日韩在线免费观看| 日韩中文字幕有码| 久久成人av少妇免费| 四虎免费在线观看视频| 97久久亚洲| 日本91av在线播放| 北条麻妃在线| 日韩一区二区三区在线| 国产无遮挡裸体免费视频| 久久综合久久综合久久| 国产男女激情视频| 99久久.com| 高清不卡日本v二区在线| 天堂电影一区| 色婷婷**av毛片一区| wwwav网站| 欧美性色视频在线| 久久国产高清视频| 97久久久精品综合88久久| 亚洲高清在线免费观看| 中文字幕乱码亚洲无线精品一区 | 亚洲精品久久久蜜桃动漫 | 国产精品乱码一区二三区小蝌蚪| 免费欧美一级片| 丝袜美腿亚洲色图| wwwwww欧美| 成人免费在线播放| 国产精品一 二 三| 亚洲成a人片777777久久| 国语自产在线不卡| 精产国品自在线www| 亚洲精品狠狠操| 国产免费无遮挡| 日韩欧美在线观看| 国产精品九九九九九九| 中文字幕高清一区| 日韩片在线观看| 国产成人av在线影院| 蜜桃免费在线视频| 亚洲美女少妇无套啪啪呻吟| 尤物一区二区三区| 国产精品最新| 久久青青草原| 视频在线一区| 成人午夜在线影院| 日本在线中文字幕一区二区三区| 久久99热精品| 黄网站视频在线观看| 正在播放亚洲1区| 欧美少妇另类| 日韩经典中文字幕| 亚洲欧美强伦一区二区| 欧美精品一级二级三级| 日批视频免费在线观看| 午夜精品影院在线观看| 久久免费视频99| 国产精品二区一区二区aⅴ污介绍| xxxx黄色片| 免费人成在线不卡| 免费av网址在线| 伊人精品在线| 丝袜人妻一区二区三区| 91精品久久久久久久久久不卡| 欧美一区二区三区在线播放| 欧美综合影院| 国产精品露脸自拍| 天堂√8在线中文| 久久久久久有精品国产| 日本伦理一区二区| 久久久国产精品免费| 成人午夜电影在线观看| 在线观看中文字幕亚洲| 国模吧精品人体gogo| 亚洲精品按摩视频| 国产女无套免费视频| 欧美日韩国产欧美日美国产精品| 欧美日韩乱国产| 亚洲第一久久影院| 国产又大又黑又粗免费视频| 亚洲综合色视频| 久久久久久国产精品免费播放| 亚洲久本草在线中文字幕| 美国一级片在线观看| 国产精品无码永久免费888| 无码h肉动漫在线观看| 久久精品视频在线免费观看| 精品无码在线视频| 91网站在线观看视频| 在线不卡av电影| www成人在线观看| 人妻少妇无码精品视频区| 99久久婷婷国产精品综合| yy1111111| 99在线精品一区二区三区| chinese麻豆新拍video| 国产视频一区二区三区在线观看| 亚洲熟妇无码av| 久久久久久久一区| 乱老熟女一区二区三区| 国产精品久久看| 久久成人小视频| 亚洲午夜电影在线观看| 五月天丁香激情| 亚洲午夜精品网| 久久久久久免费观看| 午夜精品一区二区三区电影天堂| 国产精品国产三级国产专区52| 红桃视频成人在线观看| 久久精品国产亚洲av麻豆蜜芽| 欧美系列一区二区| 亚洲怡红院av| 亚洲激情在线观看| 精品无吗乱吗av国产爱色| 夜夜嗨av一区二区三区免费区 | 久精品免费视频| sis001亚洲原创区| 69久久夜色精品国产69乱青草| 成人免费黄色| 国产精品自产拍高潮在线观看| a一区二区三区亚洲| www日韩av| 久久久久久毛片免费看| 欧美日韩在线观看一区| 婷婷综合视频| 国产精品免费入口| 狠狠色丁香婷婷综合| 蜜臀aⅴ国产精品久久久国产老师| 国产亚洲欧美色| 538精品在线视频| 欧美日韩亚洲激情| 亚洲AV无码乱码国产精品牛牛| 日韩精品欧美激情| 国产原厂视频在线观看| 国产精彩精品视频| 麻豆一区在线| 久久久久久久久久码影片| 永久91嫩草亚洲精品人人| 大j8黑人w巨大888a片| 蜜臀av一级做a爰片久久| 一级国产黄色片| 自拍偷自拍亚洲精品播放| 国产成人免费看| 欧美成人精品1314www| 欧美男男同志| 色综合久久悠悠| 综合欧美精品| 欧美精品123| 欧美特黄a级高清免费大片a级| 亚洲欧美久久久久| 91免费精品国自产拍在线不卡| 亚洲不卡的av| 色欧美片视频在线观看在线视频| 99视频免费看| 亚洲丝袜一区在线| 小h片在线观看| 成人9ⅰ免费影视网站| 亚洲人成网亚洲欧洲无码| 国产中文字幕二区| 国产乱人伦偷精品视频不卡| 成人免费无遮挡无码黄漫视频| 午夜婷婷国产麻豆精品| 国产又爽又黄又嫩又猛又粗| 精品亚洲国产视频| 天堂√中文最新版在线| 国产精品夜夜夜一区二区三区尤| 午夜久久美女| 五月激情五月婷婷| 久久久精品国产免费观看同学| 日产电影一区二区三区| 日韩欧美一级片| а√天堂中文在线资源bt在线| 97成人精品视频在线观看| 国产激情综合| 97精品国产97久久久久久粉红| 日本不卡中文字幕| 婷婷色一区二区三区| 在线观看亚洲精品| 九色视频在线播放| 日本a级片电影一区二区| 九九久久电影| 日本精品免费在线观看| 高清久久久久久| 国产在线观看99| 精品国产乱码久久| 91九色在线播放| 精品999在线观看| 亚洲电影成人| 女同毛片一区二区三区| 红桃av永久久久| 香蕉av在线播放| 奇门遁甲1982国语版免费观看高清 | 亚洲一区在线观看网站| 免费看av毛片| **欧美日韩vr在线| 欧美人妖视频| 日本成人在线免费视频| 国产午夜一区二区三区| www.久久视频| 中文字幕国产精品| 国产日韩欧美中文在线| 9色视频在线观看| 国产裸体歌舞团一区二区| 日韩a级片在线观看| 日韩视频一区二区三区在线播放| 僵尸再翻生在线观看| 欧美精品一区二区三区久久| 久久性色av| 黑人巨大精品一区二区在线| 欧美一区二区三区日韩| 国产精品69xx| 激情小说网站亚洲综合网| 国产日韩欧美高清免费| 99热6这里只有精品| 日韩欧美国产小视频| 91国内在线| 欧美视频小说| 麻豆91在线观看| 日韩三级一区二区三区| 亚洲男女性事视频| 亚洲欧洲专区| 黄色动漫网站入口| 亚洲国产精品成人综合色在线婷婷| 国产成人av免费看| 91wwwcom在线观看| 久久综合99| 熟女人妻在线视频| 精品视频色一区| 蜜桃视频在线观看免费视频| 日本一区高清不卡| 国产成人免费在线视频| 亚洲乱码国产乱码精品| 欧美成人在线网站| 欧洲毛片在线视频免费观看| 在线免费黄色小视频|