精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

干日本少妇视频| 91老司机在线| 九九热久久免费视频| 国产精品成人**免费视频| 亚洲一区av在线| 日本三级中国三级99人妇网站| 一级做a爰片久久毛片16| 国产一区日韩一区| 国产一区二区三区日韩欧美| 久久发布国产伦子伦精品| a欧美人片人妖| 亚洲激情中文1区| 日本午夜精品一区二区| 亚洲精品综合久久| 蜜臀av性久久久久蜜臀aⅴ| 欧美黄色片在线观看| 日本理论中文字幕| 久久精品色播| 日韩欧美中文字幕公布| 亚洲无吗一区二区三区| 51漫画成人app入口| 国产精品国产三级国产aⅴ中文 | 全黄性性激高免费视频| 最新97超碰在线| 久久麻豆一区二区| 国产精品一 二 三| 国产成人精品一区二三区四区五区| 老鸭窝亚洲一区二区三区| 欧美高清在线播放| 色婷婷粉嫩av| 欧美综合一区| 亚洲人成电影在线播放| 97香蕉碰碰人妻国产欧美| 日韩一区二区三区精品| 欧美日韩激情在线| 99视频在线免费| 国产精品专区免费| 精品久久中文字幕久久av| 97中文字幕在线| 性网站在线观看| 亚洲美女淫视频| 宅男噜噜99国产精品观看免费| 国产精品ⅴa有声小说| 91麻豆蜜桃一区二区三区| 国产精品免费一区二区三区观看| 国产福利小视频| 激情五月播播久久久精品| 国产在线精品成人一区二区三区| 老熟妇一区二区三区| 99亚洲视频| 97精品视频在线播放| 久久97人妻无码一区二区三区| 91精品国产调教在线观看| 久久夜色撩人精品| 青娱乐国产在线| 欧美日韩免费观看一区=区三区| 久久影视电视剧免费网站清宫辞电视 | 99精品久久免费看蜜臀剧情介绍| 国产乱码精品一区二区三区中文| 蜜桃视频污在线观看| 风间由美一区二区三区在线观看| 国产精品久久波多野结衣| 成人午夜精品福利免费| av电影天堂一区二区在线| 久久狠狠久久综合桃花| 激情在线视频| 中文字幕亚洲一区二区av在线 | 精产国品自在线www| 亚洲欧洲精品成人久久奇米网| 一区二区免费电影| 中文字幕中文字幕在线中高清免费版 | 国产**成人网毛片九色 | 91久久精品美女高潮| 国产99对白在线播放| 成人一区在线看| 欧美大香线蕉线伊人久久国产精品| 国产网站在线播放| 成人免费小视频| 欧美国产日韩激情| 欧美aaa视频| 欧美一区二区视频网站| 国产精品一区二区在线免费观看| 亚洲黄页网站| 久久中文字幕在线| 国产视频91在线| 免费观看日韩av| 国产经品一区二区| 理论在线观看| 亚洲精品日产精品乱码不卡| 丝袜老师办公室里做好紧好爽| 九七影院97影院理论片久久| 欧美videos大乳护士334| 成年人网站免费看| 亚洲一区欧美| 青草青草久热精品视频在线观看| 一级黄色免费看| va亚洲va日韩不卡在线观看| 亚洲欧美精品在线观看| av影片在线| 69av一区二区三区| 亚洲调教欧美在线| 欧美顶级大胆免费视频| 69久久夜色精品国产69| 怡红院男人天堂| 成人精品在线视频观看| 亚洲精品在线免费看| 成人短视频在线| 色婷婷亚洲一区二区三区| 在线免费黄色小视频| 怕怕欧美视频免费大全| 欧美高跟鞋交xxxxhd| 久久久精品毛片| 成人av影院在线| 美国av在线播放| 日本.亚洲电影| 亚洲国产精品一区二区三区| 欧美三级免费看| 日本不卡的三区四区五区| 国内精品视频在线播放| 91黄色在线| 777xxx欧美| 免费一级特黄3大片视频| 国产精品最新自拍| 国产精品theporn88| 日韩在线资源| 色哟哟精品一区| 中文字幕乱码一区| 在线成人h网| 国产福利一区二区三区在线观看| 精品自拍一区| 在线成人免费观看| 东京热无码av男人的天堂| 久久亚洲综合| 欧美精品一区二区视频| 亚洲一区资源| 亚洲欧美日韩精品久久| 国产又黄又爽又色| 99久久久无码国产精品| 91丨porny丨探花| 99国产精品久久一区二区三区| 欧美剧在线观看| jlzzjlzzjlzz亚洲人| 亚洲激情中文1区| 日本天堂在线播放| 国产精品a久久久久| 91久久极品少妇xxxxⅹ软件| 曰本三级在线| 精品国产一区二区三区不卡| 久久久无码精品亚洲国产| 国产精品亚洲综合一区在线观看| 四虎4hu永久免费入口| 涩爱av色老久久精品偷偷鲁| 久久综合亚洲社区| 亚洲国产福利视频| 午夜视频一区在线观看| 污污内射在线观看一区二区少妇| 日韩视频精品在线观看| 欧美成人免费在线| 78精品国产综合久久香蕉| 在线观看久久av| 夜夜躁狠狠躁日日躁av| 成人免费在线视频| 无码人妻丰满熟妇区毛片蜜桃精品| 欧美日本不卡| 蜜桃精品久久久久久久免费影院 | 国产一区自拍视频| 成人av免费电影网站| 亚洲人成电影在线观看天堂色| 中文字幕在线播放av| 亚洲免费大片在线观看| 深田咏美中文字幕| 久久精品午夜| 日本成人性视频| 成人香蕉社区| 国产精品xxxxx| 日韩影视在线| 亚洲一区二区久久久| 国产乱淫a∨片免费视频| 亚洲一区二区美女| 久久久久久国产精品无码| 久久国产精品第一页| 欧洲精品在线播放| 精品久久久久中文字幕小说| 99久久免费国| 精品网站在线| 久久久久久国产精品久久| 邻家有女韩剧在线观看国语| 日韩一卡二卡三卡四卡| 天天干天天干天天| 亚洲美女区一区| 黄色正能量网站| 国产原创一区二区| 国模杨依粉嫩蝴蝶150p| 亚洲女同中文字幕| 欧美日韩亚洲免费| 视频国产精品| 日本精品一区二区三区在线| 天堂av最新在线| 最近更新的2019中文字幕| 日韩一区免费视频| 欧美精品国产精品| 五月天激情国产综合婷婷婷| 一区二区三区四区亚洲| 黄色av免费播放| 91天堂素人约啪| 黑森林av导航| 韩国精品在线观看| 任你操这里只有精品| 亚洲经典自拍| 国产大尺度在线观看| 狠狠操综合网| 九九九九九九精品| 亚洲va欧美va人人爽成人影院| 国产精品美女无圣光视频| 国产伦久视频在线观看| 欧美成人精品在线视频| 3d成人动漫在线| 亚洲视频在线观看网站| 色香蕉在线视频| 欧美va日韩va| 国产免费高清视频| 欧美性大战久久久久久久| 在线观看国产亚洲| 亚洲午夜视频在线观看| 日韩三级在线观看视频| 中文幕一区二区三区久久蜜桃| 野外性满足hd| 久久亚洲影视婷婷| xxxxxx黄色| 99麻豆久久久国产精品免费 | 97国产在线视频| 秋霞在线午夜| 欧美激情网友自拍| 91黄色在线| 欧美激情一级欧美精品| 2020国产在线视频| 欧美精品在线极品| 国产在线观看a视频| 精品国产网站地址| 一广人看www在线观看免费视频| 国产一区二区激情| 超碰国产在线| 日韩在线观看av| 激情视频在线观看| 免费成人高清视频| 日本伦理一区二区| 久久久久亚洲精品| 老司机深夜福利在线观看| 97**国产露脸精品国产| 成人美女视频| 国产精品老女人视频| 国产精品99| 91中文字幕在线观看| 国产精品亚洲一区二区在线观看| 亚洲a成v人在线观看| 综合激情五月婷婷| 国产精成人品localhost| 老司机aⅴ在线精品导航| 久草一区二区| 国产欧美日韩一区二区三区四区| 日韩国产精品一区二区| 欧美国产一区二区三区激情无套| 一区二区三区久久网| 永久亚洲成a人片777777| 日韩精品久久一区二区| 亚洲一区一卡| 自拍偷拍21p| 国产精品99久| 在线 丝袜 欧美 日韩 制服| 中文一区在线播放| 久久久久久久久久一区二区三区| 亚洲va欧美va人人爽| av手机天堂网| 91精品国产综合久久久蜜臀图片| 丰满人妻一区二区| 亚洲欧美色图片| 黄色免费在线网站| 97在线看福利| 欧美黄页在线免费观看| 成人综合色站| 欧洲三级视频| 日韩一级性生活片| 男人的j进女人的j一区| 国产精久久久久| 国产人久久人人人人爽| 欧美人妻一区二区| 色婷婷国产精品综合在线观看| 国产精品国产av| 精品香蕉一区二区三区| 久久99精品久久| 91av在线精品| 久久av网站| 欧美日韩精品久久久免费观看| 911精品美国片911久久久| 精品国产一二三四区| 国产在线一区观看| 亚洲做受高潮无遮挡| 亚洲激情中文1区| 中文天堂在线视频| 亚洲精品久久久久久久久久久久 | 男人操女人下面视频| 26uuu另类欧美| 久久免费公开视频| 欧美日韩卡一卡二| 你懂的在线播放| 久久理论片午夜琪琪电影网| 全球中文成人在线| 欧美精品123| 黄色av成人| 三级黄色片播放| 国产精品福利影院| 手机看片久久久| 亚洲精品一区二区精华| a级片国产精品自在拍在线播放| 国产精品第二页| 欧美18免费视频| 和岳每晚弄的高潮嗷嗷叫视频| 精品中文字幕一区二区| 小早川怜子久久精品中文字幕| 欧美日韩国产一区二区三区| 亚洲AV无码精品国产| 久久国产色av| 欧美高清xxx| 色综合影院在线观看| 玖玖精品视频| 熟女丰满老熟女熟妇| 亚洲第一在线综合网站| av高清一区二区| 伦理中文字幕亚洲| 国产高清亚洲| 欧美日韩一区二区三区电影| 久久精品国产亚洲aⅴ| 日本美女xxx| 在线欧美日韩国产| 国产精品视频一区二区久久| 欧美做受高潮电影o| 曰本一区二区三区视频| 成人免费观看毛片| 久久久影视传媒| 国产精品久免费的黄网站| 亚洲女人被黑人巨大进入| 成人短视频app| 日本一区视频在线观看| 视频一区二区中文字幕| 欧美黄色高清视频| 欧美日韩精品一区二区天天拍小说 | 亚洲老妇xxxxxx| www.av网站| 韩国三级日本三级少妇99| 丝袜久久网站| 成年人在线看片| 日本一区二区三区国色天香| 亚洲字幕av一区二区三区四区| 丝袜美腿亚洲一区二区| www 久久久| 国产夫妻自拍一区| 99久久精品国产导航| 秋霞精品一区二区三区| 亚洲天堂色网站| 日韩欧美专区| 精品国产av无码一区二区三区| av成人老司机| 综合久久中文字幕| 久久成人18免费网站| 国产精品白浆| 久久久久久三级| 亚洲精品自拍动漫在线| 天堂中文网在线| 国产精品黄视频| 欧美jizzhd精品欧美巨大免费| 日本护士做爰视频| 欧美亚洲动漫制服丝袜| 成人免费网站在线观看视频| 精品国产乱码久久久久| 视频一区欧美日韩| 欧美成人一二三区| 亚洲乱码一区二区| 91精品在线免费视频| 国产自产在线视频| 国产精品美女久久久久久久久久久| 99热这里只有精品在线观看| 亚洲91av视频| 亚洲澳门在线| 一级国产黄色片| 欧美高清hd18日本| 51av在线| 中文字幕中文字幕一区三区| 成人国产精品免费网站| 亚洲精品毛片一区二区三区| 欧美日韩成人在线观看| 国产亚洲第一伦理第一区| 欧美专区第二页| 色综合久久中文综合久久牛| 亚洲资源一区| 日本一区二区三区视频在线观看| 狠狠色丁香婷婷综合久久片| 久久精品无码av| 欧美激情小视频| 国产精品久久久久久| 人妻丰满熟妇aⅴ无码|