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

What?天天用Spring你竟然不知道事務的傳播性?

開發 架構
在我們日常的開發中Spring是必備的技能,在面試的時候,這一塊的知識也會著重地問,雖然每天都在使用,但是稍不注意就會出問題,今天這篇文章我們來詳細的聊聊Spring的事務傳播性,助力金三銀四面試季。

[[410717]]

本文轉載自微信公眾號「故里學Java」,作者故里。轉載本文請聯系故里學Java公眾號。

在我們日常的開發中Spring是必備的技能,在面試的時候,這一塊的知識也會著重地問,雖然每天都在使用,但是稍不注意就會出問題,今天這篇文章我們來詳細的聊聊Spring的事務傳播性,助力金三銀四面試季。

什么是Spring事務傳播性?Spring事務傳播性是當多個包含事務的方法嵌套調用的時候,處理事務的規則。例如:兩個事務方法A、B,當方法A調用方法B的時候,方法B是合并到方法A的事務中還是開啟一個新的事務。如果是合并到方法A的事務中,那么當方法B回滾之后,方法A會不會回滾等等。Spring有幾種處理這種嵌套事務的方式?通過源碼我們發現有7種,定義在Propagation這個枚舉類中,接下來我們講詳細說一下每一種傳播行為都可以幫助我們處理什么樣的問題。

1、Propagation.REQUIRED

這種傳播行為是Spring默認的,當我們使用@Transactional注解且不指定傳播行為的時候就是使用這個,它指的是外層的調用方法如果開啟了事務,那么當前方法就合并到外層的事務中執行,如果外層調用方法沒有開啟事務,就開啟一個事務執行當前方法。

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.      
  7.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) 
  8.     public void methodA() { 
  9.         //methodA 的業務操作 
  10.         System.out.println("methodA執行業務"); 
  11.         //調用服務B的methodB方法 
  12.         serviceB.methodB(); 
  13.     } 
  14.  
  15. //服務B 
  16. @Service 
  17. public class ServiceB { 
  18.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) 
  19.     public void methodB() { 
  20.         System.out.println("methodB執行業務"); 
  21.     } 

我們的實例代碼,服務A的methodA方法調用了服務B的methodB方法,并且我們給methodA通過注解@Transactional加了一個事務,并定義了傳播性為REQUIRED。

methodA本身開啟了事務,methodB也開啟了事務,且事務的傳播性為REQUIRED,所以當methodA調用methodB的時候,methodB會合并到methodA開啟的事務中執行。這個時候兩個方法是在一個事務中執行的,當兩個方法都執行成功后提交事務。

這個地方很多人就會犯迷糊啦,如果methodB在執行過程中拋出了異常,那么methodB會回滾,那么methodA執行的操作會回滾嗎?這里其實只要記住一點,這兩個操作是在同一個事務中,事務是原子性操作的,所以methodA也會回滾。

面試的時候還會進一步挖坑!如果methodA中使用try-catch捕獲了異常,那么methodA執行的操作還會回滾嗎?

這里還是要牢記事務本身具有原子性,所以無論有沒有catch異常,都會回滾的。

2、Propagation.SUPPORTED

這個傳播行為是說,如果當前方法的調用方開啟了事務,那么當前方法就合并到外層事務中執行,如果外層事務沒有開啟事務,那么當前方法也不會創建事務,就不開啟事務執行。

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.  
  7.     public void methodA() { 
  8.         //methodA 的業務操作 
  9.         System.out.println("methodA執行業務"); 
  10.         //調用服務B的methodB方法 
  11.         serviceB.methodB(); 
  12.     } 
  13.  
  14. //服務B 
  15. @Service 
  16. public class ServiceB { 
  17.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.SUPPORTED) 
  18.     public void methodB() { 
  19.         System.out.println("methodB執行業務"); 
  20.     } 

我們看到,methodB開啟了事務,傳播性為SUPPORTED,methodA沒有開啟事務,那么methodA執行的時候不會開啟事務,在調用methodB的時候,由于methodB開啟了事務,但傳播性為SUPPORTED,所以methodB也不會開啟事務,以非事務的方式運行。

如果methodA開啟了事務,那么methodB會合并到methodA的事務中執行。

3、Propagation.MANDATORY

這個傳播行為是指,傳播性為MANDATORY的方法只能被開啟事務的方法調用,如果調用方沒有開啟事務就會拋出異常。

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.  
  7.     public void methodA() { 
  8.         //methodA 的業務操作 
  9.         System.out.println("methodA執行業務"); 
  10.         //調用服務B的methodB方法 
  11.         serviceB.methodB(); 
  12.     } 
  13.  
  14. //服務B 
  15. @Service 
  16. public class ServiceB { 
  17.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.MANDATORY) 
  18.     public void methodB() { 
  19.         System.out.println("methodB執行業務"); 
  20.     } 

我們的示例中,methodA沒有開啟事務,調用了開啟事務并且傳播性為MANDATORY的methodB,這時,執行methodA的業務操作時不開啟事務,在調用服務B的methodB方法的時候,就會拋出異常:

  1. IllegalTransactionStateException( 
  2.                     "No existing transaction found for transaction marked with propagation 'mandatory'"

4、Propagation.REQUIRES_NEW

這個傳播行為是指,每次都會開啟一個新的事務來執行當前方法。比如調用放methodA開啟了事務,在methodA中調用開啟了事務且傳播性為REQUIRES_NEW的方法methodB,那么在methodA會開啟一個事務執行自己的業務代碼,在調用methodB的時候的時候會先掛起methodA的事務,然后開啟一個新的事務執行methodB,在methodB的事務提交后,會恢復methodA的事務繼續執行。

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.  @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) 
  7.     public void methodA() { 
  8.         //methodA 的業務操作 
  9.         System.out.println("methodA執行業務"); 
  10.         //調用服務B的methodB方法 
  11.         try{ 
  12.             serviceB.methodB(); 
  13.         } catch (Exception e){ 
  14.              
  15.         } 
  16.     } 
  17.  
  18. //服務B 
  19. @Service 
  20. public class ServiceB { 
  21.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW) 
  22.     public void methodB() { 
  23.         System.out.println("methodB執行業務"); 
  24.     } 

我們的實例代碼中,methodA開啟了事務,傳播性為REQUIRED,所以在執行的時候,methodA會開啟一個事務A,然后執行methodA的業務,在調用methodB的時候,由于methodB開啟了事務,且事務傳播性為REQUIRES_NEW,,所以這個時候就先掛起事務A,重新開啟一個事務B來執行methodB,在methodB執行完提交事務后,會恢復事務A的執行,最后再提交事務A。

這個地方面試的時候可能會問到,methodB在執行的過程中出現了異常整個過程會發生什么變化?

我們根據上邊的調用圖分析,在methodB執行過程中拋出異常,事務B會回滾,如果methodA中調用methodB的時候catch住了異常,并沒有向外排除,那么methodA不會回滾,如果methodA中沒有處理異常,那么methodA也會回滾。

5、Propagation.NOT_SUPPORTED

這個傳播性就是不支持事務,如果調用方開啟了事務,那么在執行的時候會先掛起調用方的事務,以非事務的方式執行當前的業務,在執行完之后,再恢復調用方的事務繼續執行。

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.  @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) 
  7.     public void methodA() { 
  8.         //methodA 的業務操作 
  9.         System.out.println("methodA執行業務"); 
  10.         //調用服務B的methodB方法 
  11.         serviceB.methodB(); 
  12.     } 
  13.  
  14. //服務B 
  15. @Service 
  16. public class ServiceB { 
  17.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.NOT_SUPPORTED) 
  18.     public void methodB() { 
  19.         System.out.println("methodB執行業務"); 
  20.     } 

在我們的實例代碼中,methodA開啟了事務,傳播性為REQUIRED,methodB的傳播性為NOT_SUPPORTED,在執行的過程中,methodA會開啟一個事務A,在調用methodB的時候,會先掛起methodA的事務A,然后以非事務的方式執行methodB的業務,在methodB執行完之后,恢復事務A,最后提交事務A。整個過程如下圖:

6、Propagation.NEVER

這個傳播性和前一種傳播性都是不支持事務,但是不同的是這種傳播性是調用方如果開啟了事務,那么在執行當前方法的時候就會拋出異常。下邊還是通過一個示例來看:

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.  @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) 
  7.     public void methodA() { 
  8.         //methodA 的業務操作 
  9.         System.out.println("methodA執行業務"); 
  10.         //調用服務B的methodB方法 
  11.         serviceB.methodB(); 
  12.     } 
  13.  
  14. //服務B 
  15. @Service 
  16. public class ServiceB { 
  17.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.NEVER) 
  18.     public void methodB() { 
  19.         System.out.println("methodB執行業務"); 
  20.     } 

示例中我們看到,methodA開啟了事務,傳播性為REQUIRED,methodB的傳播性為NEVER,那么在methodA調用methodB的時候,就會拋出如下異常:

  1. IllegalTransactionStateException( 
  2.                     "Existing transaction found for transaction marked with propagation 'never'"

7、Propagation.NESTED

這個傳播性和REQUIRED很相似,都是當調用方沒有開啟事務時,就開啟一個新的事務,如果調用方開啟了事務就合并到調用方的事務中執行,不同的地方就是NESTED這種傳播行為可以保存狀態點,當事務回滾的時候,可以回滾到某一個地方,從而避免了嵌套事務全部回滾的情況。

  1. //服務A 
  2. @Service 
  3. public class ServiceA { 
  4.     @Autowired 
  5.     private ServiceB serviceB; 
  6.  @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) 
  7.     public void methodA() { 
  8.         //methodA 的業務操作 
  9.         System.out.println("methodA執行業務"); 
  10.         // 
  11.         try{ 
  12.             serviceB.methodB(); 
  13.         }catch(Exception e) { 
  14.              
  15.         } 
  16.         //methodA在methodB之后的業務操作... 
  17.         update(); 
  18.     } 
  19.  
  20. //服務B 
  21. @Service 
  22. public class ServiceB { 
  23.     @Transactional(rollbackFor = Exception.class, propagation = Propagation.NESTED) 
  24.     public void methodB() { 
  25.         System.out.println("methodB執行業務"); 
  26.     } 

在這個示例中,我們可以看到,在methodA執行的時候,如果沒有開啟事務,會先開啟一個事務,然后執行methodA的業務操作;在實行調用服務B的methodB的時候,由于其傳播行為NESTED,所以會創建一個savepoint,用于標記methodA執行的業務操作。

然后methodB的業務操作是在methodA的事務中進行的,當methodB拋出異常時,methodB中的業務操作會回滾掉,methodA執行的業務操作并不會回滾,因為在執行methodB之前創建了savepoint,methodB只會回滾到這個savepoint點之前。

這個地方注意的是,methodB回滾以后,對于methodA在methodB之后的業務操作是會被提交的,并不受methodB回滾的影響。

最后

 

我們常用的事務傳播行為其實只有兩種,分別是REQUIRED和REQUIRED_NEW。其余五種傳播行為只需要了解即可,可以在面試的時候展示一下知識面。

 

責任編輯:武曉燕 來源: 故里學Java
相關推薦

2019-10-28 08:44:29

Code Review代碼團隊

2018-10-17 09:25:22

2020-06-12 09:20:33

前端Blob字符串

2020-07-28 08:26:34

WebSocket瀏覽器

2022-07-17 06:53:24

微服務架構

2009-12-10 09:37:43

2022-10-13 11:48:37

Web共享機制操作系統

2021-02-01 23:23:39

FiddlerCharlesWeb

2011-09-15 17:10:41

2010-08-23 09:56:09

Java性能監控

2019-05-20 08:11:02

淘寶個性化推薦

2019-07-23 15:56:56

Spring Boot部署servlet

2022-06-18 23:03:05

Seata分布式事務

2021-06-27 21:37:27

緩存雪崩穿透

2019-07-23 17:52:59

Spring BootJava開發

2022-11-04 08:19:18

gRPC框架項目

2020-09-15 08:35:57

TypeScript JavaScript類型

2021-10-17 13:10:56

函數TypeScript泛型

2015-06-19 13:54:49

2020-08-11 11:20:49

Linux命令使用技巧
點贊
收藏

51CTO技術棧公眾號

国产v片在线观看| 高h视频免费观看| 电影亚洲精品噜噜在线观看| 久久久久久久国产精品影院| 国产精品h片在线播放| 国产精品suv一区二区88| 成人在线分类| 欧美日韩国产在线| 一区二区三区欧美在线| 亚洲第九十九页| 久久综合影视| 欧美成人h版在线观看| 中国黄色a级片| 99久久99九九99九九九| 偷偷要91色婷婷| 一区二区三区欧美成人| 欧美一区二区三区成人片在线| 久久永久免费| 久久久久国产视频| 日本美女xxx| 国产美女撒尿一区二区| 欧美日韩五月天| 免费av手机在线观看| 最新电影电视剧在线观看免费观看 | 精品视频在线播放| 亚洲精品永久视频| 老司机成人影院| 亚洲一区中文日韩| 在线观看日韩羞羞视频| 欧美日本韩国一区二区| 国产精品亚洲午夜一区二区三区| 国产成人91久久精品| 国产在线观看你懂的| 四虎成人av| 亚洲美女中文字幕| 男人的天堂免费| 激情欧美一区二区三区黑长吊| 五月开心婷婷久久| av片在线免费| 国产精品久久久久久福利| 久久综合视频网| 国产三区精品| 超碰福利在线观看| 国产成人自拍网| 91精品视频在线免费观看| 国产精品成人无码| 日韩电影在线看| 日韩av免费网站| 日韩av大片在线观看| 91久久综合| 久久久女人电视剧免费播放下载| 青青青在线免费观看| 国产精品久久久久久久| 最近更新的2019中文字幕| 一卡二卡三卡四卡| 在线成人动漫av| 精品亚洲夜色av98在线观看| 懂色av粉嫩av蜜乳av| 国产色噜噜噜91在线精品| 日韩美女视频一区二区在线观看| 在线播放黄色av| 国产亚洲字幕| 日韩丝袜情趣美女图片| 久久久久亚洲av片无码v| 精品国产亚洲一区二区在线观看| 欧美高清精品3d| 99九九精品视频| 日韩三级网址| 亚洲第一色在线| 国产黑丝一区二区| 亚洲另类春色校园小说| 亚洲人成网在线播放| 久久久久久久毛片| 国产探花在线精品一区二区| 国产一区二区三区四区福利| 亚洲午夜久久久久久久国产| 日韩欧美网站| 久久久黄色av| 国产亚洲精品av| 日韩视频三区| 国产精品高潮在线| 99久久精品日本一区二区免费| 国模娜娜一区二区三区| 成人av资源| 日韩一区二区三区在线观看视频| 97se狠狠狠综合亚洲狠狠| 精品综合久久| 98在线视频| 一区二区三区精品| 激情六月丁香婷婷| 欧美男女视频| 欧美精品一区二区三区高清aⅴ | 麻豆成人免费视频| 免播放器亚洲一区| 成人av资源网| 成人高清免费观看mv| 亚洲欧美日韩一区| 黄色影院一级片| 久久电影天堂| 亚洲国模精品私拍| 免费一级suv好看的国产网站 | 久久综合成人精品亚洲另类欧美 | 九色91porny| 女厕嘘嘘一区二区在线播放| 久久久91精品国产| 国内自拍视频在线播放| 国内成+人亚洲+欧美+综合在线| 精品国产乱码久久久久久108| 成人网视频在线观看| 夜夜操天天操亚洲| 无码内射中文字幕岛国片| 亚洲日本va| 伊人久久免费视频| 国产污视频在线看| 九一九一国产精品| 农村寡妇一区二区三区| 欧美性猛片xxxxx免费中国| 色婷婷综合久久久久中文一区二区| 亚洲午夜激情影院| 你懂的一区二区三区| 久久久在线视频| 国产片在线播放| 日本一区二区视频在线| 成年人午夜免费视频| 国产aa精品| 亚洲色图日韩av| 日韩免费在线视频观看| 国产乱码字幕精品高清av| 日韩欧美一区二区三区四区五区| 麻豆福利在线观看| 91精品国产91综合久久蜜臀| 欧美熟妇激情一区二区三区| 亚洲免费激情| 国产精品久久国产三级国电话系列| 免费人成在线观看播放视频| 色欧美片视频在线观看| 人妻丰满熟妇av无码久久洗澡| 欧美激情性爽国产精品17p| 国产精品美女久久久久久免费| 四虎影视精品成人| 亚洲高清视频中文字幕| 中文字幕人妻无码系列第三区| 久久人人88| 国产精品久久网| 国外av在线| 色老头在线一区二区三区| 91l九色lporny| 老司机凹凸av亚洲导航| 欧美巨大黑人极品精男| 亚洲综合精品视频| 欧美极品少妇xxxxⅹ高跟鞋| 日韩精品一区二区三区久久| 蜜桃一区av| 久久久久国产精品免费| 人妻少妇精品无码专区久久| 亚洲va韩国va欧美va| av免费观看不卡| 亚洲精品美女| 久久人人爽爽人人爽人人片av| www.51av欧美视频| 日韩精品免费在线视频| 麻豆精品久久久久久久99蜜桃| 91视频观看视频| 欧美日韩怡红院| 99久精品视频在线观看视频| 91在线免费视频| 美女网站视频在线| 日韩精品视频在线观看网址| 人人干人人干人人干| 91网站在线播放| 日韩福利视频在线| 97视频精品| 成人xxxxx色| 亚洲校园激情春色| 一区二区三区www| 国产精品自产拍| 亚洲一区二区黄色| 亚洲国产无码精品| 激情深爱一区二区| 国产v片免费观看| 国产99久久精品一区二区300| 国产精品免费一区豆花| 91精品久久久| 亚洲精品www久久久久久广东| 日本免费精品视频| 国产精品久久久久天堂| 四虎成人免费视频| 噜噜噜在线观看免费视频日韩 | 久激情内射婷内射蜜桃| 亚洲v天堂v手机在线| 国产精品一区二区久久精品| 色呦呦在线观看视频| 精品在线观看国产| 国产露脸国语对白在线| 天天操天天色综合| 亚洲一区电影在线观看| a级精品国产片在线观看| 亚洲成色www.777999| 亚洲私拍自拍| 亚洲午夜高清视频| 国产毛片久久久| 国产专区欧美专区| 亚洲最大成人| 欧美伦理91i| 成人77777| 亚洲第一国产精品| 国产一区二区三区中文字幕| 欧美日韩色婷婷| 欧美视频www| 久久精品亚洲乱码伦伦中文| 国产女主播在线播放| 老司机免费视频一区二区| 六月婷婷在线视频| 欧美成人tv| 一区二区三区在线观看www| 欧美交a欧美精品喷水| 亚洲aⅴ男人的天堂在线观看| 欧美18av| 午夜精品福利在线观看| 成人高清免费在线| 在线亚洲午夜片av大片| 深夜福利视频在线免费观看| 日韩精品一区二区三区视频| 一区二区三区免费观看视频| 一本色道亚洲精品aⅴ| 日本少妇xxxx动漫| 亚洲欧美另类小说| 国产日韩精品中文字无码| 91免费国产视频网站| 黄色激情在线观看| 国产电影一区二区三区| 久久久久xxxx| 老司机免费视频一区二区三区| www黄色av| 国产日韩综合| 国产特级黄色大片| 一本色道久久| 国产96在线 | 亚洲| 亚洲国产第一| 久久综合久久网| 亚洲黄色在线| 人妻av中文系列| 亚洲国产免费| 国产中文字幕二区| 宅男噜噜噜66一区二区| av高清在线免费观看| 一本色道久久综合亚洲精品不| 欧洲精品在线播放| 亚洲视频一区| 18禁免费观看网站| 美女精品一区| 激情综合网俺也去| 日韩av高清在线观看| 少妇一级淫免费放| 麻豆91精品视频| 国产又黄又猛的视频| 国产在线一区二区综合免费视频| 97超碰人人爽| 国产麻豆精品theporn| 91精品国产高清91久久久久久| 国产成人高清视频| 久久久午夜精品福利内容| av亚洲产国偷v产偷v自拍| 日本黄色免费观看| 久久久亚洲欧洲日产国码αv| 这里只有久久精品| 中文无字幕一区二区三区| fc2ppv在线播放| 一区二区三区四区激情 | 国产理论电影在线观看| 中文字幕日本欧美| 免费av毛片在线看| 欧美激情乱人伦一区| 在线看片国产福利你懂的| 秋霞成人午夜鲁丝一区二区三区| 日韩三区免费| 91精品视频免费| 国产精品美女在线观看直播| 久久综合九色99| 久久一级电影| 成年女人18级毛片毛片免费| 老司机午夜免费精品视频| 男生操女生视频在线观看| 高清国产一区二区| 熟女俱乐部一区二区| 国产精品久久久久一区二区三区 | 欧美一区亚洲一区| 99久久综合国产精品二区| 成人中文字幕在线观看| 国产精品对白| 无遮挡亚洲一区| 欧美欧美全黄| 欧美日韩怡红院| 成人免费高清视频在线观看| 五月天精品视频| 亚洲免费三区一区二区| 久久久久女人精品毛片九一| 欧美人与禽zozo性伦| 天天综合网在线观看| 丝袜亚洲另类欧美重口| 97人人爽人人澡人人精品| 国产精品永久免费视频| 欧美日韩破处| 中文字幕免费高| 校园春色综合网| 久久无码专区国产精品s| 欧美激情一区二区三区全黄| 激情视频在线播放| 欧美无砖砖区免费| 亚洲色大成网站www| 久热精品视频在线免费观看| 天堂av在线网| 国产99在线免费| 91综合在线| 久久久久久香蕉| 成人激情免费电影网址| 欧美成人777| 欧美怡红院视频| 国产精品国产高清国产| 欧美成人午夜激情视频| 国产原创一区| 日本中文不卡| 国产精品一二| 成人区人妻精品一区二| 最新国产精品久久精品| www.久久视频| 亚洲精品一二区| av影视在线看| 国产精品视频500部| 91精品高清| 性生生活大片免费看视频| 中文字幕av一区 二区| 无码人妻一区二区三区免费| 日韩国产高清视频在线| av资源在线看片| 国产精品有限公司| 欧美欧美全黄| 美女流白浆视频| 一区二区三区中文免费| 国产日韩在线观看一区| 久久精品视频中文字幕| 成人免费91| 久久久成人精品一区二区三区 | 97超碰人人看| 亚洲视频一区二区在线| 国产巨乳在线观看| 久久久久999| 九九99久久精品在免费线bt| 免费观看黄色大片| 免费观看日韩电影| 国产精品一区二区亚洲| 欧美精品一二三区| 黄色成人在线| 91精品黄色| 亚洲午夜黄色| 亚洲av无码一区二区三区观看| 午夜国产不卡在线观看视频| 五月色婷婷综合| 亲爱的老师9免费观看全集电视剧| 亚洲盗摄视频| 日韩一级片播放| 中文字幕制服丝袜成人av| 国产三级三级在线观看| 欧美日本中文字幕| 久久久久高潮毛片免费全部播放| www.av片| 国产午夜精品久久久久久久| 国产偷人爽久久久久久老妇app| 中文字幕免费精品一区高清| 羞羞视频在线观看一区二区| 日韩中文在线字幕| 不卡的av网站| 91视频久久久| 久热精品视频在线| 欧美色图五月天| 亚洲精品一二三四五区| 1024亚洲合集| 色欲av伊人久久大香线蕉影院| 欧美一区二区影院| 97精品国产| 国产a级片视频| 欧美性生交xxxxx久久久| 在线免费观看的av网站| 99视频免费观看| 久久久久久一区二区| 国产3级在线观看| 亚洲成人久久网| 免费在线观看一区| 国产精品videossex国产高清 | 非洲一级黄色片| 91精品综合久久久久久| 蜜桃视频在线观看免费视频| 午夜精品一区二区三区四区| 国产美女av一区二区三区| 精品欧美一区二区三区免费观看| 自拍亚洲一区欧美另类| 狼人精品一区二区三区在线 | 国产成人精品免费在线| 中文字幕日韩免费| 欧美国产日韩一区二区三区|