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

超全MyBatis動態代理詳解!

開發 前端
眾所周知哈,Mybatis 底層封裝使用的 JDK 動態代理。說 Mybatis 動態代理之前,先來看一下平常我們寫的動態代理 Demo,拋磚引玉.

[[375755]]

本文轉載自微信公眾號「源碼興趣圈」,作者龍臺  。轉載本文請聯系源碼興趣圈公眾號。 

前言

假如有人問你這么幾個問題,看能不能答上來

  1. Mybatis Mapper 接口沒有實現類,怎么實現的動態代理
  2. JDK 動態代理為什么不能對類進行代理(充話費送的問題)
  3. 抽象類可不可以進行 JDK 動態代理(附加問題)

答不上來的鐵汁,證明 Proxy、Mybatis 源碼還沒看到位。不過沒有關系,繼續往下看就明白了

動態代理實戰

眾所周知哈,Mybatis 底層封裝使用的 JDK 動態代理。說 Mybatis 動態代理之前,先來看一下平常我們寫的動態代理 Demo,拋磚引玉

一般來說定義 JDK 動態代理分為三個步驟,如下所示

  1. 定義代理接口
  2. 定義代理接口實現類
  3. 定義動態代理調用處理器

三步代碼如下所示,玩過動態代理的小伙伴看過就能明白

  1. public interface Subject { // 定義代理接口 
  2.     String sayHello(); 
  3.  
  4. public class SubjectImpl implements Subject {  // 定義代理接口實現類 
  5.     @Override 
  6.     public String sayHello() { 
  7.         System.out.println(" Hello World"); 
  8.         return "success"
  9.     } 
  10.  
  11. public class ProxyInvocationHandler implements InvocationHandler {  // 定義動態代理調用處理器 
  12.     private Object target; 
  13.  
  14.     public ProxyInvocationHandler(Object target) { 
  15.         this.target = target; 
  16.     } 
  17.  
  18.     @Override 
  19.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
  20.         System.out.println(" 🧱 🧱 🧱 進入代理調用處理器 "); 
  21.         return method.invoke(target, args); 
  22.     } 

1.寫個測試程序,運行一下看看效果,同樣是分三步

2.創建被代理接口的實現類

  • 創建動態代理類,說一下三個參數
  • 類加載器
  • 被代理類所實現的接口數組

3.用處理器(調用被代理類方法,每次都經過它)

被代理實現類調用方法

  1. public class ProxyTest { 
  2.     public static void main(String[] args) { 
  3.         Subject subject = new SubjectImpl(); 
  4.         Subject proxy = (Subject) Proxy 
  5.                 .newProxyInstance( 
  6.                         subject.getClass().getClassLoader(), 
  7.                         subject.getClass().getInterfaces(), 
  8.                         new ProxyInvocationHandler(subject)); 
  9.  
  10.         proxy.sayHello(); 
  11.         /** 
  12.          * 打印輸出如下 
  13.          * 調用處理器:🧱 🧱 🧱 進入代理調用處理器 
  14.          * 被代理實現類:Hello World 
  15.          */ 
  16.     } 

Demo 功能實現了,大致運行流程也清楚了,下面要針對原理實現展開分析

動態代理原理分析

從原理的角度上解析一下,上面動態代理測試程序是如何執行的

第一步簡單明了,創建了 Subject 接口的實現類,也是我們常規的實現

第二步是創建被代理對象的動態代理對象。這里有朋友就問了,怎么證明這是個動態代理對象?如圖所示

JDK 動態代理對象名稱是有規則的,凡是經過 Proxy 類生成的動態代理對象,前綴必然是 $Proxy,后面的數字也是名稱組成部分

如果有小伙伴想要一探究竟,關注 Proxy 內部類 ProxyClassFactory,這里會有想要的答案

回歸正題,繼續看一下 ProxyInvocationHandler,內部保持了被代理接口實現類的引用,invoke 方法內部使用反射調用被代理接口實現類方法

可以看出生成的動態代理類,繼承了 Proxy 類,然后對 Subject 接口進行了實現,而實現方法 sayHello 中實際調用的是 ProxyInvocationHandler 的 invoke 方法

一不小心發現了 JDK 動態代理不能對類進行代理的原因 ^ ^

也就是說,當我們調用 Subject#sayHello 時,方法調用鏈是這樣的

但是,Demo 里有被代理接口的實現類,Mybatis Mapper 沒有,這要怎么玩

不知道不要緊,知道了估計也看不到這了,一起看下 mybatis 源碼是怎么玩的

mybatis version:3.4.x

Mybatis 源碼實現

不知道大家考沒考慮過這么一個問題,Mybatis Mapper 為什么不需要實現類?

假如說,我們項目使用的三層設計,Controller 控制請求接收,Service 負責業務處理,Mapper 負責數據庫交互

Mapper 層也就是我們常說的數據庫映射層,負責對數據庫的操作,比如對數據的查詢或者新增、刪除等

大膽設想下,項目沒有使用 Mybatis,需要在 Mapper 實現層寫數據庫交互,會寫一些什么內容?

會寫一些常規的 JDBC 操作,比如:

  1. // 裝載Mysql驅動 
  2. Class.forName(driveName); 
  3. // 獲取連接 
  4. con = DriverManager.getConnection(url, user, pass); 
  5. // 創建Statement 
  6. Statement state = con.createStatement(); 
  7. // 構建SQL語句 
  8. String stuQuerySqlStr = "SELECT * FROM STUDENT"
  9. // 執行SQL返回結果 
  10. ResultSet result = state.executeQuery(stuQuerySqlStr); 
  11. ... 

如果項目中所有 Mapper 實現層都要這么玩,那豈不是很想打人...

所以 Mybatis 結合項目痛點,應運而生,怎么做的呢

將所有和 JDBC 交互的操作,底層采用 JDK 動態代理封裝,使用者只需要自定義 Mapper 和 .xml 文件

SQL 語句定義在 .xml 文件或者 Mapper 中,項目啟動時通過解析器解析 SQL 語句組裝為 Java 中的對象

解析器分為多種,因為 Mybatis 中不僅有靜態語句,同時也包含動態 SQL 語句

這也就是為什么 Mapper 接口不需要實現類,因為都已經被 Mybatis 通過動態代理封裝了,如果每個 Mapper 都來一個實現類,臃腫且無用。經過這一頓操作,展示給我們的就是項目里用到的 Mybatis 框架

上面鋪墊這么久,終于要到主角了,為什么 Mybatis Mapper 接口沒有實現類也可以實現動態代理

想要嚴格按照先后順序介紹 Mybatis 動態代理流程,而不超前引用未介紹過的術語,這幾乎是不可能的,筆者盡量說的通俗易懂

無實現類完成動態代理

核心點來了,拿起小本本坐板正了

我們先來看下普通動態代理有沒有可能不用實現類,僅靠接口完成

  1. public interface Subject { 
  2.     String sayHello(); 
  3.  
  4. public class ProxyInvocationHandler implements InvocationHandler { 
  5.  
  6.     @Override 
  7.     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 
  8.         System.out.println(" 🧱 🧱 🧱 進入代理調用處理器 "); 
  9.         return "success"
  10.     } 

根據代碼可以看到,我們并沒有實現接口 Subject,繼續看一下怎么實現動態代理

  1. public class ProxyTest { 
  2.     public static void main(String[] args) { 
  3.         Subject proxy = (Subject) Proxy 
  4.                 .newProxyInstance( 
  5.                         subject.getClass().getClassLoader(), 
  6.                         new Class[]{Subject.class}, 
  7.                         new ProxyInvocationHandler()); 
  8.  
  9.         proxy.sayHello(); 
  10.         /** 
  11.          * 打印輸出如下 
  12.          * 調用處理器:🧱 🧱 🧱 進入代理調用處理器 
  13.          */ 
  14.     } 

可以看到,對比文初的 Demo,這里對 Proxy.newProxyInstance 方法的參數作出了變化

之前是通過實現類獲取所實現接口的 Class 數組,而這里是把接口本身放到 Class 數組中,殊歸同途

有實現類接口和無實現類接口產生的動態代理類有什么區別

  1. 有實現類接口是對 InvocationHandler#invoke 方法調用,invoke 方法通過反射調用被代理對象(SubjectImpl)方法(sayHello)
  2. 無實現類接口則是僅對 InvocationHandler#invoke 產生調用。所以有實現類接口返回的是被代理對象接口返回值,而無實現類接口返回的僅是 invoke 方法返回值

InvocationHandler#invoke 方法返回值是 success 字符串,定義個字符串變量,是否能成功返回

現在第一個問題答案已經浮現,Mapper 沒有實現類,所有調用 JDBC 等操作都是在 Mybatis InvocationHandler 實現的

問題既然已經得到了解決,給人一種感覺,好像沒那么難,但是你不好奇,Mybatis 底層怎么做的么?

先拋出一個問題,然后帶著問題去看源碼,可能讓你記憶 Double 倍深刻

咱們 Demo 里的接口是固定的,Mybatis Mapper 可是不固定的,怎么搞?

Mybatis 是這么說的

看看 Mybatis 底層它怎么實現的動態接口代理,小伙伴只需要關注標記處的代碼即可

和我們的 Demo 代碼很像,核心點在于 mapperInterface 它是怎么賦值的

先來說一下 Mybatis 代理工廠中具體生成動態代理類具體邏輯

  1. 根據 .xml 上關聯的 namespace, 通過 Class#forName 反射的方式返回 Class 對象(不止 .xml namespace 一種方式)
  2. 將得到的 Class 對象(實際就是接口對象)傳遞給 Mybatis 代理工廠生成代理對象,也就是剛才 mapperInterface 屬性

謎底揭曉,Mybatis 使用接口全限定名通過 Class#forName 生成 Class 對象,這個 Class 對象類型就是接口

為了方便大家理解,通過 Mybatis 源碼提供的測試類舉例。假設已有接口 AutoConstructorMapper 以及對應的 .xml 如下

執行第一步,根據 .xml namespace 得到 Class 對象

首先第一步獲取 .xml 上 mapper 標簽 namespace 屬性,得到 mapper 接口全限定信息

根據 mapper 全限定信息獲取 Class 對象

添加到對應的映射器容器中,等待生成動態代理對象

如果此時調用生成動態代理對象,代理工廠 newInstance 方法如下:

至此,文初提的 Proxy、Mybatis 動態代理相關問題已全部答疑

抽象類能否 JDK 動態代理

說代碼前結論先行,不能!

  1. public abstract class AbstractProxy { 
  2.     abstract void sayHello(); 
  3.  
  4. AbstractProxy proxyInterface = (AbstractProxy) Proxy 
  5.         .newProxyInstance( 
  6.                 ProxyTest.class.getClassLoader(), 
  7.                 new Class[]{AbstractProxy.class}, 
  8.                 new ProxyInvocationHandler()); 
  9. proxyInterface.sayHello(); 

毫無疑問,報錯是必然的,JDK 是不能對類進行代理的

帶著小疑惑我們看一下 Proxy 源碼報錯位置,JDK 動態代理在生成代理類的過程代碼中,會有是否接口驗證

抽象類終歸是類,加個 abstract 也成不了接口(就像我,雖然胖了 60 斤,但依然是帥哥)

下次面試官如果有問這問題的,斬釘截鐵一點,就是不能

結言

結合 Mybatis 使用 JDK 動態代理相關的問題,展開了文章的講述,這里總結如下

Q:JDK 動態代理能否對類代理?

因為 JDK 動態代理生成的代理類,會繼承 Proxy 類,由于 Java 無法多繼承,所以無法對類進行代理

Q:抽象類是否可以 JDK 動態代理?

不可以,抽象類本質上也是類,Proxy 生成代理類過程中,會校驗傳入 Class 是否接口

Q:Mybatis Mapper 接口沒有實現類,怎么實現的動態代理?

Mybatis 會通過 Class#forname 得到 Mapper 接口 Class 對象,生成對應的動態代理對象,核心業務處理都會在 InvocationHandler#invoke 進行處理

希望讀過的小伙伴都能有所收獲,如果對于文章內容有所疑惑,可以通過留言或者添加作者好友的方式溝通,祝好!

 

責任編輯:武曉燕 來源: 源碼興趣圈
相關推薦

2023-12-06 08:23:44

代理模式設計模式

2021-07-06 06:39:22

Java靜態代理動態代理

2021-03-23 09:52:39

鴻蒙HarmonyOS應用開發

2017-05-11 21:30:01

Android動態代理ServiceHook

2011-03-07 17:15:52

ProFTPD配置

2011-03-07 17:25:33

ProFTPD啟動

2011-04-06 11:41:25

Java動態代理

2011-03-07 17:24:33

ProFTPD安裝

2015-08-26 16:38:37

mybatissql

2012-08-28 10:59:26

JavaJava動態代理Proxy

2025-07-29 07:30:23

Spring動態代理代碼

2015-09-22 11:09:47

Java 8動態代理

2011-03-23 10:40:51

java代理模式

2022-01-26 00:05:00

AOPRPC遠程調用

2020-12-28 07:47:35

動態代理AOP

2017-10-12 14:56:11

2024-11-07 16:39:42

SpringBoo常用注解Bean

2020-12-28 09:41:40

MySQL數據庫函數

2015-09-28 15:59:00

Java動態代理機制
點贊
收藏

51CTO技術棧公眾號

一本色道综合久久欧美日韩精品| 亚洲一区在线直播| xxxx.国产| 成人在线丰满少妇av| 欧美丝袜丝nylons| 九一免费在线观看| 久久久久国产精品嫩草影院| 久久国产三级精品| 孩xxxx性bbbb欧美| 亚洲第一视频区| 人人九九精品视频| 色素色在线综合| 97精品国产97久久久久久粉红| 欧美一级淫片aaaaaa| 首页国产欧美久久| 欧美激情a∨在线视频播放| 无码精品一区二区三区在线播放 | 国产乱人伦丫前精品视频| 狠狠做深爱婷婷久久综合一区| 亚洲va久久久噜噜噜久久狠狠| va视频在线观看| 视频一区欧美日韩| 欧美丰满老妇厨房牲生活| 三级网站在线免费观看| 林ゆな中文字幕一区二区| 欧美日韩高清在线| 男人亚洲天堂网| 欧美日韩色网| 国产精品久久久久aaaa| 精品久久久久久乱码天堂| 国产三级自拍视频| 秋霞av亚洲一区二区三| 2019av中文字幕| 黄色片在线观看网站| 欧美精品一区二区三区精品| 亚洲精品不卡在线| 欧美一区二区三区精品| 国产精品永久免费在线| 日产精品久久久| 极品中文字幕一区| 久久国产精彩视频| 老司机精品免费视频| 国产剧情日韩欧美| 欧美老女人另类| 精品国产一区二区三区久久久蜜月 | 久久久久成人网| 来吧亚洲综合网| 禁断一区二区三区在线| 日韩精品极品视频免费观看| 91精品人妻一区二区三区蜜桃2| 日韩成人一区| 欧美浪妇xxxx高跟鞋交| 手机看片福利盒子久久| 免费成人动漫| 日本韩国欧美一区二区三区| 精品人妻一区二区三区四区在线 | 日本不卡免费一区| 亚洲视频在线观看免费| 一区二区三区久久久久| 国产乱码精品一区二区亚洲| 亚洲欧美中文日韩在线| 久久精品国产亚洲av久| 欧美日韩性在线观看| 一区二区三区四区精品| 91av手机在线| 亚洲精品国产首次亮相| 久久久久国产视频| 日韩精品久久久久久久| 美女国产精品| 国产精品免费视频xxxx| 6—12呦国产精品| 国内精品久久久久影院色| 亚洲最大的av网站| 成人久久久精品国产乱码一区二区| 国产激情一区二区三区| 国产麻豆一区二区三区在线观看| 无码国产精品一区二区色情男同 | 久久精品综合一区| 六十路在线观看| 中文字幕精品一区| 中文字幕在线亚洲三区| 天堂av中文在线| 欧美日韩国产精品一区| www.99av.com| 免费一级欧美在线大片| 亚洲国产精品va在线看黑人动漫| 亚洲一区二区三区蜜桃| 日韩理论电影| 欧美第一页在线| 无码人妻一区二区三区免费| 精品在线免费观看| 国产精品一区二区不卡视频| 你懂的在线观看视频网站| 综合中文字幕亚洲| 欧美三级在线观看视频| 成人h在线观看| 日韩精品在线一区二区| 精品人妻互换一区二区三区| 综合视频在线| 欧洲成人免费aa| 国产精品久久久久久久久久久久久久久久久久| 国产精品911| 日本免费高清一区二区| 在线视频国产区| 色琪琪一区二区三区亚洲区| 樱花草www在线| 加勒比久久高清| 日韩中文字幕在线免费观看| 国产对白videos麻豆高潮| 蜜桃视频在线观看一区二区| 国产偷国产偷亚洲高清97cao| 在线观看免费黄视频| 香蕉影视欧美成人| 国内自拍第二页| 狠狠操综合网| 韩国视频理论视频久久| 国产精品欧美激情在线| 2021中文字幕一区亚洲| 2022中文字幕| 九七电影院97理论片久久tvb| 亚洲电影免费观看| 日韩视频中文字幕在线观看| 日韩精品福利网| 国产在线资源一区| 成人在线视频亚洲| 在线观看日韩国产| 在线 丝袜 欧美 日韩 制服| 欧美日韩亚洲一区三区| 成人免费网视频| 黄色av网站在线免费观看| 天天综合网 天天综合色| 国产精品探花在线播放| 97视频精品| 国产精品高潮呻吟久久av野狼| 蜜桃91麻豆精品一二三区| 中文字幕一区二区三区在线播放 | 天天干天天色综合| 成+人+亚洲+综合天堂| 欧美日韩午夜爽爽| 图片一区二区| 久久精品视频免费播放| 中文字幕 日韩有码| 欧美激情一区二区三区蜜桃视频 | 色8久久影院午夜场| 日韩av资源在线播放| 国产精品18p| 丰满少妇久久久久久久| 狠狠精品干练久久久无码中文字幕| 欧美男女视频| 久久国内精品一国内精品| 中文字幕一区二区三区四区免费看| 久久精品日产第一区二区三区高清版 | 国产综合精品一区| 国产精华一区| √最新版天堂资源网在线| 精品国产99国产精品| 日韩乱码一区二区| 99国产欧美久久久精品| 成年人观看网站| 精品国产一区探花在线观看| 国产成人亚洲综合| 97视频在线观看网站| 欧美日韩视频在线观看一区二区三区| 精品一区二区三孕妇视频| 免费观看一级特黄欧美大片| 一区二区三区不卡在线| 久久中文字幕一区二区| 欧美日韩国产成人在线观看| 乱精品一区字幕二区| 欧美性猛交丰臀xxxxx网站| 亚洲国产无码精品| 美女视频黄 久久| av电影一区二区三区| 大伊香蕉精品在线品播放| 国产69久久精品成人| 丁香婷婷在线| 日韩亚洲欧美在线| 欧美精品亚洲精品日韩精品| 久久久久久毛片| 毛片毛片毛片毛| 国产一区二区中文| 鲁丝一区二区三区免费| 国产精品蜜月aⅴ在线| 欧美精品制服第一页| 天天干天天插天天操| 日本国产一区二区| 爱爱视频免费在线观看| 99国产精品久| www亚洲成人| 黄色工厂这里只有精品| 日本不卡一区二区三区在线观看| 99精品在线免费观看| 国内偷自视频区视频综合| 国产亚洲依依| 欧美一区二区网站| 免费在线不卡视频| 国产精品久久久久婷婷二区次| 无码人妻久久一区二区三区蜜桃| 久久人人精品| 99久久99久久精品| 国产99精品| 成人影片在线播放| 香蕉成人av| 欧美国产精品va在线观看| 免费黄色片在线观看| 日韩欧美国产综合在线一区二区三区| 国产又大又黄又粗| 一区二区三区在线观看欧美 | 亚洲免费观看高清| 波多野结衣 在线| 国产sm精品调教视频网站| 国产超碰在线播放| 亚洲每日在线| 蜜臀av.com| 成人综合专区| 国产在线一区二区三区四区| 国产一区二区三区精品在线观看| 国产成人精品免费视频| 成年人黄色大片在线| 久久99国产综合精品女同| 99中文字幕一区| 亚洲毛片在线免费观看| 欧美 中文字幕| 日韩亚洲国产中文字幕欧美| 中文字幕资源网| 欧美中文字幕一二三区视频| 日韩精品一区二区av| 亚洲激情成人在线| 三级黄色片在线观看| 国产亚洲欧美在线| 免费在线观看你懂的| 99精品热视频| 亚洲自拍偷拍精品| 国产成人鲁色资源国产91色综| 五月激情五月婷婷| 理论电影国产精品| 欧美性猛交久久久乱大交小说 | 国产高潮免费视频| 性久久久久久| 久久国产成人精品国产成人亚洲| 伊人久久婷婷| 无码熟妇人妻av在线电影| 中文字幕一区二区三区乱码图片 | 欧美一区二区三区四区视频| 在线免费观看高清视频| 欧洲另类一二三四区| 四虎成人在线观看| 欧美日韩亚洲成人| www.国产com| 欧美性生交大片免费| 丁香六月婷婷综合| 色噜噜夜夜夜综合网| 亚洲高清视频免费观看| 欧美性欧美巨大黑白大战| 国语对白做受69按摩| 欧美在线|欧美| 亚洲最新av网站| 欧美一区二区三区在线看| www.成人精品| 亚洲成av人片在线观看香蕉| 天天操天天干天天爽| 亚洲另类图片色| 91官网在线| 久久亚洲精品网站| 日本动漫同人动漫在线观看| 国模视频一区二区| 中文在线最新版地址| 国产精品福利观看| 99久久这里有精品| 官网99热精品| 国产成人影院| 一区二区在线不卡| 韩国在线视频一区| 激情综合在线观看| 免费成人av在线| 国产精品偷伦视频免费观看了| 成人av一区二区三区| 国产精品毛片一区二区| 最新欧美精品一区二区三区| 久久久香蕉视频| 日韩欧美在线免费| 97人妻精品一区二区三区软件 | 久久久久久久毛片| 自拍偷拍亚洲激情| 尤物视频在线观看国产| 欧洲精品视频在线观看| 99在线观看免费| 国产丝袜视频一区| 瑟瑟视频在线| 久久久久这里只有精品| 日韩精品三区| yellow视频在线观看一区二区| 日韩黄色网络| 女同性恋一区二区| 久久国产主播| 宇都宫紫苑在线播放| 久久久久久免费毛片精品| 69夜色精品国产69乱| 日韩欧美aaa| 亚洲成人77777| 在线观看国产精品淫| 国产探花在线观看| 国产一区二区色| 亚洲最好看的视频| 久久久天堂国产精品| 日本成人在线视频网站| 手机在线成人av| 有码一区二区三区| 中文字幕一区二区三区人妻四季| 亚洲精品www久久久久久广东| 国产超级va在线视频| 国产精品69久久久久| 欧美亚洲大陆| 真人做人试看60分钟免费| 麻豆成人久久精品二区三区红| 国产精品第七页| 一区二区三区国产精品| 夜夜爽8888| 亚洲天堂av综合网| 日韩在线伦理| 国产日韩在线一区二区三区| 在线中文一区| 天天操天天干天天做| 久久久久99精品一区| 国产精品500部| 精品精品欲导航| 成人无遮挡免费网站视频在线观看| 国产精品v片在线观看不卡| 日韩超碰人人爽人人做人人添| 黄色一级大片免费| 狠狠色丁香婷婷综合久久片| 手机看片日韩av| 在线亚洲一区观看| 你懂的在线免费观看| 日韩av免费看网站| 四虎影视精品| 欧美视频在线免费播放| 成人黄色在线视频| 九热这里只有精品| 精品国产制服丝袜高跟| 操你啦视频在线| 92国产精品久久久久首页| 91av精品| 中文字幕一区二区三区四| 亚洲色图欧美激情| 国产乱子伦精品无码码专区| 久久久999成人| 激情五月综合婷婷| 成人在线观看毛片| 国产白丝精品91爽爽久久 | 婷婷免费在线视频| 国产拍精品一二三| 99国内精品久久久久久久| 欧美一级视频在线| 亚洲免费看黄网站| 精品人妻一区二区三区日产乱码| 欧美激情亚洲自拍| 都市激情亚洲| 久久久久久久久久久视频| 91在线精品一区二区| 成人毛片一区二区三区| 中文字幕在线观看亚洲| 亚洲一区二区小说| 白白操在线视频| 91亚洲午夜精品久久久久久| 日本中文字幕久久| 日韩亚洲精品视频| 欧美黄色一级| 国产深夜男女无套内射| 国产亚洲人成网站| 国产男男gay体育生白袜| 欧美激情videos| 国产va免费精品观看精品视频| 我要看一级黄色大片| 一区二区三区精密机械公司| 天堂资源中文在线| 国产精品香蕉在线观看| 亚洲欧美一区在线| 四虎影成人精品a片| 91精品啪在线观看国产60岁| 韩国日本一区| 日韩精品久久久毛片一区二区| 国产在线精品不卡| 中文在线观看免费网站| 正在播放国产一区| 亚洲国产高清在线观看| 97国产精东麻豆人妻电影| 国产精品视频麻豆| 少妇av在线播放| 国产精品一区专区欧美日韩| 在线播放日韩| 三级黄色片在线观看| 日韩成人在线播放| 动漫一区二区三区| 92看片淫黄大片一级| 亚洲丝袜美腿综合| 欧美午夜黄色| 97久久精品午夜一区二区| 日韩经典一区二区| 日本在线小视频|