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

Spring聲明式事務在哪些情況下會失效?

開發 架構
在Spring中事務管理的方式有兩種,編程式事務和聲明式事務。先詳細介紹一下兩種事務的實現方式

[[393241]]

編程式事務

在Spring中事務管理的方式有兩種,編程式事務和聲明式事務。先詳細介紹一下兩種事務的實現方式.

配置類

  1. @Configuration 
  2. @EnableTransactionManagement 
  3. @ComponentScan("com.javashitang"
  4. public class AppConfig { 
  5.  
  6.     @Bean 
  7.     public DruidDataSource dataSource() { 
  8.         DruidDataSource ds = new DruidDataSource(); 
  9.         ds.setDriverClassName("com.mysql.jdbc.Driver"); 
  10.         ds.setUrl("jdbc:mysql://localhost:3306/test?characterEncoding=utf8&useSSL=true"); 
  11.         ds.setUsername("test"); 
  12.         ds.setPassword("test"); 
  13.         ds.setInitialSize(5); 
  14.         return ds; 
  15.     } 
  16.  
  17.     @Bean 
  18.     public DataSourceTransactionManager dataSourceTransactionManager() { 
  19.         return new DataSourceTransactionManager(dataSource()); 
  20.     } 
  21.  
  22.     @Bean 
  23.     public JdbcTemplate jdbcTemplate(DataSource dataSource) { 
  24.         return new JdbcTemplate(dataSource); 
  25.     } 
  26.  
  27.     @Bean 
  28.     public TransactionTemplate transactionTemplate() { 
  29.         return new TransactionTemplate(dataSourceTransactionManager()); 
  30.     } 
  1. public interface UserService { 
  2.     void addUser(String name, String location); 
  3.     default void doAdd(String name) {}; 
  1. @Service 
  2. public class UserServiceV1Impl implements UserService { 
  3.  
  4.     @Autowired 
  5.     private JdbcTemplate jdbcTemplate; 
  6.     @Autowired 
  7.     private TransactionTemplate transactionTemplate; 
  8.  
  9.     @Override 
  10.     public void addUser(String name, String location) { 
  11.         transactionTemplate.execute(new TransactionCallbackWithoutResult() { 
  12.  
  13.             @Override 
  14.             protected void doInTransactionWithoutResult(TransactionStatus status) { 
  15.                 try { 
  16.                     String sql = "insert into user (`name`) values (?)"
  17.                     jdbcTemplate.update(sql, new Object[]{name}); 
  18.                     throw new RuntimeException("保存用戶信息失敗"); 
  19.                 } catch (Exception e) { 
  20.                     e.printStackTrace(); 
  21.                     status.setRollbackOnly(); 
  22.                 } 
  23.             } 
  24.         }); 
  25.     } 

可以看到編程式事務的方式并不優雅,因為業務代碼和事務代碼耦合到一塊,當發生異常的時候還得需要手動回滾事務(比使用JDBC方便多類,JDBC得先關閉自動自動提交,然后根據情況手動提交或者回滾事務)

如果讓你優化事務方法的執行?你會如何做?

「其實我們完全可以用AOP來優化這種代碼,設置好切點,當方法執行成功時提交事務,當方法發生異常時回滾事務,這就是聲明式事務的實現原理」

使用AOP后,當我們調用事務方法時,會調用到生成的代理對象,代理對象中加入了事務提交和回滾的邏輯。

聲明式事務

Spring aop動態代理的方式有如下幾種方法

JDK動態代理實現(基于接口)(JdkDynamicAopProxy)

CGLIB動態代理實現(動態生成子類的方式)(CglibAopProxy)

AspectJ適配實現

spring aop默認只會使用JDK和CGLIB來生成代理對象

@Transactional可以用在哪里?

@Transactional可以用在類,方法,接口上

用在類上,該類的所有public方法都具有事務

用在方法上,方法具有事務。當類和方法同時配置事務的時候,方法的屬性會覆蓋類的屬性

用在接口上,一般不建議這樣使用,因為只有基于接口的代理會生效,如果Spring AOP使用cglib來實現動態代理,會導致事務失效(因為注解不能被繼承)

@Transactional失效的場景

@Transactional注解應用到非public方法(除非特殊配置,例如使用AspectJ 靜態織入實現 AOP)

自調用,因為@Transactional是基于動態代理實現的

異常在代碼中被你自己try catch了

異常類型不正確,默認只支持RuntimeException和Error,不支持檢查異常

事務傳播配置不符合業務邏輯

@Transactional注解應用到非public方法

「為什么只有public方法上的@Transactional注解才會生效?」

首相JDK動態代理肯定只能是public,因為接口的權限修飾符只能是public。cglib代理的方式是可以代理protected方法的(private不行哈,子類訪問不了父類的private方法)如果支持protected,可能會造成當切換代理的實現方式時表現不同,增大出現bug的可能醒,所以統一一下。

「如果想讓非public方法也生效,你可以考慮使用AspectJ」

自調用,因為@Transactional是基于動態代理實現的

當自調用時,方法執行不會經過代理對象,所以會導致事務失效。例如通過如下方式調用addUser方法時,事務會失效

  1. // 事務失效 
  2. @Service 
  3. public class UserServiceV2Impl implements UserService { 
  4.  
  5.     @Autowired 
  6.     private JdbcTemplate jdbcTemplate; 
  7.  
  8.     @Override 
  9.     public void addUser(String name, String location) { 
  10.         doAdd(name); 
  11.     } 
  12.  
  13.     @Transactional 
  14.     public void doAdd(String name) { 
  15.         String sql = "insert into user (`name`) values (?)"
  16.         jdbcTemplate.update(sql, new Object[]{name}); 
  17.         throw new RuntimeException("保存用戶失敗"); 
  18.     } 

可以通過如下方式解決

  1. @Autowired注入自己,假如為self,然后通過self調用方法
  2. @Autowired ApplicationContext,從ApplicationContext通過getBean獲取自己,然后再調用
  1. // 事務生效 
  2. @Service 
  3. public class UserServiceV2Impl implements UserService { 
  4.  
  5.     @Autowired 
  6.     private JdbcTemplate jdbcTemplate; 
  7.     @Autowired 
  8.     private UserService userService; 
  9.  
  10.     @Override 
  11.     public void addUser(String name, String location) { 
  12.         userService.doAdd(name); 
  13.     } 
  14.  
  15.     @Override 
  16.     @Transactional 
  17.     public void doAdd(String name) { 
  18.         String sql = "insert into user (`name`) values (?)"
  19.         jdbcTemplate.update(sql, new Object[]{name}); 
  20.         throw new RuntimeException("保存用戶失敗"); 
  21.     } 

異常在代碼中被你自己try catch了

這個邏輯從源碼理解比較清晰,只有當執行事務拋出異常才能進入completeTransactionAfterThrowing方法,這個方法里面有回滾的邏輯,如果事務方法都沒拋出異常就只會正常提交

  1. // org.springframework.transaction.interceptor.TransactionAspectSupport#invokeWithinTransaction 
  2.  
  3. try { 
  4.   // This is an around advice: Invoke the next interceptor in the chain. 
  5.   // This will normally result in a target object being invoked. 
  6.   // 執行事務方法 
  7.   retVal = invocation.proceedWithInvocation(); 
  8. catch (Throwable ex) { 
  9.   // target invocation exception 
  10.   completeTransactionAfterThrowing(txInfo, ex); 
  11.   throw ex; 
  12. finally { 
  13.   cleanupTransactionInfo(txInfo); 

異常類型不正確,默認只支持RuntimeException和Error,不支持檢查異常

異常體系圖如下。當拋出檢查異常時,spring事務不會回滾。如果拋出任何異常都回滾,可以配置rollbackFor為Exception

  1. @Transactional(rollbackFor = Exception.class) 

事務傳播配置不符合業務邏輯

假如說有這樣一個場景,用戶注冊,依次保存用戶基本信息到user表中,用戶住址信息到地址表中,當保存用戶住址信息失敗時,我們也要保證用戶信息注冊成功。

  1. public interface LocationService { 
  2.     void addLocation(String location); 
  1. @Service 
  2. public class LocationServiceImpl implements LocationService { 
  3.  
  4.     @Autowired 
  5.     private JdbcTemplate jdbcTemplate; 
  6.  
  7.     @Override 
  8.     @Transactional 
  9.     public void addLocation(String location) { 
  10.         String sql = "insert into location (`name`) values (?)"
  11.         jdbcTemplate.update(sql, new Object[]{location}); 
  12.         throw new RuntimeException("保存地址異常"); 
  13.     } 
  1. @Service 
  2. public class UserServiceV3Impl implements UserService { 
  3.  
  4.     @Autowired 
  5.     private JdbcTemplate jdbcTemplate; 
  6.     @Autowired 
  7.     private LocationService locationService; 
  8.  
  9.     @Override 
  10.     @Transactional 
  11.     public void addUser(String name, String location) { 
  12.         String sql = "insert into user (`name`) values (?)"
  13.         jdbcTemplate.update(sql, new Object[]{name}); 
  14.         locationService.addLocation(location); 
  15.     } 

調用發現user表和location表都沒有插入數據,并不符合我們期望,你可能會說拋出異常了,事務當然回滾了。好,我們把調用locationService的部分加上try catch

  1. @Service 
  2. public class UserServiceV3Impl implements UserService { 
  3.  
  4.     @Autowired 
  5.     private JdbcTemplate jdbcTemplate; 
  6.     @Autowired 
  7.     private LocationService locationService; 
  8.  
  9.     @Override 
  10.     @Transactional 
  11.     public void addUser(String name, String location) { 
  12.         String sql = "insert into user (`name`) values (?)"
  13.         jdbcTemplate.update(sql, new Object[]{name}); 
  14.         try { 
  15.             locationService.addLocation(location); 
  16.         } catch (Exception e) { 
  17.             e.printStackTrace(); 
  18.         } 
  19.     } 

調用發現user表和location表還是都沒有插入數據。這是因為在LocationServiceImpl中事務已經被標記成回滾了,所以最終事務還會回滾。

要想最終解決就不得不提到Spring的事務傳播行為了,不清楚的小伙伴看《面試官:Spring事務的傳播行為有幾種?》

Transactional的事務傳播行為默認為Propagation.REQUIRED。「如果當前存在事務,則加入該事務。如果當前沒有事務,則創建一個新的事務」

此時我們把LocationServiceImpl中Transactional的事務傳播行為改成Propagation.REQUIRES_NEW即可

「創建一個新事務,如果當前存在事務,則把當前事務掛起」

所以最終的解決代碼如下

  1. @Service 
  2. public class UserServiceV3Impl implements UserService { 
  3.  
  4.     @Autowired 
  5.     private JdbcTemplate jdbcTemplate; 
  6.     @Autowired 
  7.     private LocationService locationService; 
  8.  
  9.     @Override 
  10.     @Transactional 
  11.     public void addUser(String name, String location) { 
  12.         String sql = "insert into user (`name`) values (?)"
  13.         jdbcTemplate.update(sql, new Object[]{name}); 
  14.         try { 
  15.             locationService.addLocation(location); 
  16.         } catch (Exception e) { 
  17.             e.printStackTrace(); 
  18.         } 
  19.     } 
  20. @Service 
  21. public class LocationServiceImpl implements LocationService { 
  22.  
  23.     @Autowired 
  24.     private JdbcTemplate jdbcTemplate; 
  25.  
  26.     @Override 
  27.     @Transactional(propagation = Propagation.REQUIRES_NEW) 
  28.     public void addLocation(String location) { 
  29.         String sql = "insert into location (`name`) values (?)"
  30.         jdbcTemplate.update(sql, new Object[]{location}); 
  31.         throw new RuntimeException("保存地址異常"); 
  32.     } 
  1. @Service 
  2. public class LocationServiceImpl implements LocationService { 
  3.  
  4.     @Autowired 
  5.     private JdbcTemplate jdbcTemplate; 
  6.  
  7.     @Override 
  8.     @Transactional(propagation = Propagation.REQUIRES_NEW) 
  9.     public void addLocation(String location) { 
  10.         String sql = "insert into location (`name`) values (?)"
  11.         jdbcTemplate.update(sql, new Object[]{location}); 
  12.         throw new RuntimeException("保存地址異常"); 
  13.     } 

 

責任編輯:武曉燕 來源: Java識堂
相關推薦

2024-11-29 11:01:25

2021-12-13 11:12:41

Spring事務失效

2009-06-22 09:01:57

Spring聲明式事務

2022-04-13 20:53:15

Spring事務管理

2024-11-13 19:03:14

2022-12-06 10:39:43

Spring事務失效

2021-09-06 13:42:14

Spring聲明式事務

2022-09-14 19:50:22

事務場景流程

2022-09-22 09:57:20

Spring事務失效

2009-02-11 13:08:29

事務提交事務管理Spring

2024-08-01 08:29:45

Spring參數類型

2009-02-11 11:14:31

事務管理事務開始Spring

2022-02-14 16:53:57

Spring項目數據庫

2023-05-26 07:19:49

Spring聲明式事務

2023-10-26 07:32:42

2009-06-22 11:01:12

2022-07-05 14:19:30

Spring接口CGLIB

2021-11-08 15:17:15

變量Defer 失效

2023-07-05 08:45:18

Spring事務失效場景

2025-01-16 08:45:48

點贊
收藏

51CTO技術棧公眾號

黄色录像a级片| 欧美日韩精品免费看| 欧美激情图片小说| 欧美黄色一级| 亚洲电影第三页| 精品国产乱码久久久久久郑州公司 | 成人黄色午夜影院| www.97视频| 日本精品国产| 婷婷久久综合九色综合绿巨人| 久久久久久国产精品一区| 日韩中文字幕高清| 亚洲午夜精品一区 二区 三区| 欧美大片顶级少妇| 成年人视频网站免费观看| av大片在线播放| 国产精品一二三在| 日韩免费不卡av| 日本精品在线免费观看| 老司机精品在线| 欧美亚洲综合另类| 国产亚洲黄色片| 国产69精品久久app免费版| 日韩电影免费一区| 欧美国产日韩免费| 国产一区二区三区精品在线| 精品视频在线观看网站| 欧美日韩免费在线| 中文字幕第一页亚洲| 天天av天天翘| 极品少妇xxxx精品少妇| 欧美国产日韩二区| 亚洲不卡的av| 国产另类在线| 6080午夜不卡| 国产日产欧美视频| 18网站在线观看| 久久久久久久久一| 波多野结衣久草一区| 日本三级黄色大片| 亚洲精品一区二区在线看| 日韩www在线| 无套白嫩进入乌克兰美女| 精品国产免费人成网站| 亚洲综合区在线| 神马影院我不卡午夜| 天堂国产一区二区三区| 日本在线不卡视频| 午夜精品久久久久久99热软件| 老司机深夜福利网站| 欧美精品一区二区三区中文字幕| 欧美一区二区三区成人| 欧美婷婷精品激情| 日本成人三级电影| 午夜一区二区三区在线观看| 性做爰过程免费播放| 成年人在线免费观看| 91啦中文在线观看| 亚洲已满18点击进入在线看片| 中文字幕在线视频第一页| 媚黑女一区二区| 日韩av免费看| 国产精品suv一区| 中文亚洲免费| 91av视频在线| 日本午夜视频在线观看| 国产日韩欧美| 91av在线看| 国产成人在线播放视频| 韩国一区二区三区在线观看| 欧美成人精品在线视频| 黄色a级片在线观看| 国产高清一区二区| www.亚洲一区| 中文字幕求饶的少妇| 国产激情在线视频| 成人美女在线视频| 懂色中文一区二区三区在线视频| av中文字幕播放| 国产一区二区在线视频| 亚洲精品欧美日韩| 亚洲高清视频网站| 国产成人精品网址| 亚洲一区二区三区四区视频| www.成人精品| av电影天堂一区二区在线| 精品网站在线看| 日本v片在线免费观看| 国产欧美一区视频| 亚洲图色在线| 精品美女在线观看视频在线观看| 亚洲视频综合在线| 日韩免费在线观看av| 欧美videossex| 亚洲不卡av一区二区三区| 99热在线这里只有精品| 成人美女大片| 欧美日韩在线观看一区二区| 国产一级片中文字幕| youjizzjizz亚洲| 亚洲老头同性xxxxx| 丁香花五月婷婷| 午夜久久99| 欧美一级片在线播放| 久久精品国产亚洲av麻豆蜜芽| 精品午夜久久福利影院 | 日韩中文字幕高清| 国产乱码精品一区二区三区av| 99在线热播| 国产在线观看免费| 亚洲美女在线一区| 免费日韩中文字幕| 麻豆国产一区| 欧美成人猛片aaaaaaa| 中文在线永久免费观看| 日韩av在线播放网址| 色偷偷综合社区| 国产一级视频在线观看| 日本成人在线不卡视频| 超碰97网站| 成人精品一区| 午夜精品在线看| 99sesese| 羞羞色国产精品网站| 美乳少妇欧美精品| 欧美日韩一级黄色片| 国产精品一区一区三区| 欧美日韩在线观看一区| 男人天堂亚洲| 欧美日韩二区三区| 亚洲国产果冻传媒av在线观看| 久久精品国产大片免费观看| 亚洲18私人小影院| 国产男女猛烈无遮挡| 久久久久国产成人精品亚洲午夜 | 欧美日韩天堂| 国产精品美女免费| 天堂在线中文字幕| 一二三区精品视频| www.五月天色| 国产videos久久| 91精品国产高清| wwwav网站| 国产精品久久久久久久久免费樱桃| 日韩av一二三四区| 国产精品流白浆在线观看| 日韩亚洲综合在线| 中文字幕在线观看国产| 99久久久精品| 免费高清一区二区三区| 麻豆精品国产| 久久香蕉国产线看观看av| 国产精品视频一区二区三区,| 国产精品国产三级国产专播品爱网 | 欧美精品尤物在线| 欧美日韩123区| 亚洲新中文字幕| 自拍偷拍校园春色| 国产精品久久免费看| 国产乱女淫av麻豆国产| 91精品亚洲| 懂色av一区二区三区在线播放| 爱福利在线视频| 亚洲第一福利网站| 中文字字幕在线中文| 国产欧美一区在线| 91精产国品一二三产区别沈先生| 欧美韩日精品| 久久久亚洲综合网站| 四虎成人在线| 按摩亚洲人久久| 亚洲高清在线观看视频| 色综合天天做天天爱| 中文字幕精品亚洲| 国产成人免费视频网站| 欧美激情 国产精品| 精品无人区麻豆乱码久久久| 成人免费网站在线| 国产精品原创| 中文字幕一精品亚洲无线一区 | 国产精品中文字幕日韩精品 | 国产黄a三级三级看三级| 亚洲精品福利视频网站| 日本wwwwwww| 日日欢夜夜爽一区| 警花观音坐莲激情销魂小说| 农村少妇一区二区三区四区五区| 国产精品美乳一区二区免费| 丁香花在线高清完整版视频 | 亚洲人成人无码网www国产| 男男成人高潮片免费网站| 无码人妻精品一区二区蜜桃网站| 香蕉国产成人午夜av影院| 国产欧美va欧美va香蕉在| 丁香花在线电影小说观看| 伊人一区二区三区久久精品| 精品人妻少妇AV无码专区| 一本大道久久a久久综合| 一区二区三区四区五区| 成人福利视频在线看| 一道本在线免费视频| 在线观看日韩av电影| 视频在线99re| 激情视频极品美女日韩| 国产综合久久久久久| 草草在线观看| 另类色图亚洲色图| 免费精品在线视频| 成年美女黄网站色大片不卡| 亚洲天堂日韩电影| 亚洲av无码一区二区乱子伦| 91久久久免费一区二区| 精品无码人妻一区二区三区品| 欧美国产精品专区| 第四色在线视频| 国产综合色在线| 最新中文字幕免费视频| 一区二区三区导航| 国产真实老熟女无套内射| 欧美日韩在线播放视频| 久久精品国产第一区二区三区最新章节| 偷拍自拍亚洲| 国产精品视频网站| 伊人久久视频| 国模极品一区二区三区| av官网在线播放| 日韩在线激情视频| 2017亚洲天堂1024| 亚洲人成电影网站色www| 人妻中文字幕一区| 精品久久人人做人人爽| 精品人妻无码一区二区| 欧美精品久久一区二区三区| 中文字幕精品视频在线观看| 精品国产乱码久久久久久天美| 久久久精品视频在线| 亚洲黄一区二区三区| 日本污视频网站| 国产区在线观看成人精品 | 国产精品乱码久久久| 欧洲色大大久久| 日本视频免费观看| 日韩欧美中文在线| 成人毛片在线播放| 狠狠躁夜夜躁人人躁婷婷91| 五月婷婷激情网| 天天影视色香欲综合网老头| 国产成人无码精品亚洲| 五月婷婷另类国产| 日韩乱码人妻无码中文字幕| 五月天激情小说综合| 五月婷婷激情网| 欧美日韩中文字幕| 国产一级免费视频| 日本韩国精品一区二区在线观看| 国产又大又黄又粗| 中文字幕成在线观看| 久久影院中文字幕| av在线播放国产| 欧美激情视频播放| 国产白丝在线观看| 91爱视频在线| japanese23hdxxxx日韩| 国产精品久久久久久av下载红粉| 欧美videos粗暴| 91精品国产91久久久久青草| 欧美精品三级在线| 国产精品国产亚洲精品看不卡15| 国产精品nxnn| 日本一区二区三区四区高清视频 | 久久三级毛片| 亚洲自拍偷拍区| 精品国产一区二区三区不卡蜜臂| 久久99精品久久久久子伦| 久久最新网址| 综合视频在线观看| 国内久久精品| 国产成人亚洲精品无码h在线| 日韩av成人高清| 一区二区三区人妻| 91麻豆精品一区二区三区| 中文字幕第二区| 亚洲欧美经典视频| www.com国产| 欧美人狂配大交3d怪物一区| 性做久久久久久久| 亚洲女人天堂av| 国产一二区在线| 奇米4444一区二区三区| 自拍偷拍亚洲| 蜜桃麻豆91| 1024精品久久久久久久久| 久久综合九色综合88i| 久久精品国产免费看久久精品| 久久久久久无码精品人妻一区二区| 26uuu精品一区二区三区四区在线| 黄大色黄女片18免费| 一区二区成人在线视频| 狠狠狠狠狠狠狠| 精品美女一区二区| 尤物在线视频| 88xx成人精品| 亚洲一区二区三区免费| 亚洲不卡一卡2卡三卡4卡5卡精品| 仙踪林久久久久久久999| 各处沟厕大尺度偷拍女厕嘘嘘| 加勒比av一区二区| 一级黄色片网址| 天天操天天干天天综合网| 国产一区二区三区成人| 日韩精品有码在线观看| 欧美伦理免费在线| 国产精品影院在线观看| 啪啪国产精品| 久久综合久久网| 精品一二三四在线| 欧美偷拍一区二区三区| 亚洲a一区二区| 性猛交xxxx乱大交孕妇印度| 亚洲性无码av在线| 久草在线中文最新视频| 51成人做爰www免费看网站| 日韩免费视频| 久久国产色av免费观看| 91丨porny丨国产入口| 久久精品一级片| 欧美一级欧美一级在线播放| 1769视频在线播放免费观看| 国产成人精品久久| 亚洲精品亚洲人成在线| 人妻夜夜添夜夜无码av | 亚洲在线视频福利| 亚州av乱码久久精品蜜桃| 国产又大又黄又猛| 国产亚洲午夜高清国产拍精品| 91在线看视频| 亚洲国产精品福利| 国产在线美女| 激情欧美一区二区三区中文字幕| 国产一区激情| 天天躁日日躁狠狠躁免费麻豆| 亚洲乱码国产乱码精品精98午夜| 国产精品高潮呻吟av| 久久影视免费观看| 精品午夜视频| 精品成在人线av无码免费看| 国产suv精品一区二区883| 欧美人与禽zozzo禽性配| 日韩一区二区三区电影| 伊人影院在线视频| 91精品国产91久久久久青草| 欧美午夜一区| 欧美极品jizzhd欧美仙踪林| 午夜欧美在线一二页| 天天综合天天色| 国产成人精品久久二区二区| 欧美日韩精品在线一区| 中文字幕亚洲欧洲| 亚洲精品视频一区| 韩国av在线免费观看| 国模叶桐国产精品一区| 中文字幕伦av一区二区邻居| 亚洲中文字幕久久精品无码喷水| 国产网红主播福利一区二区| 91亚洲精品国偷拍自产在线观看 | 国产综合色产在线精品| 国产成人无码aa精品一区| 精品乱码亚洲一区二区不卡| 偷拍自拍在线看| 婷婷精品国产一区二区三区日韩| 麻豆久久一区二区| 欧美日韩国产精品一区二区三区| 精品国产自在久精品国产| 深夜福利视频一区二区| 婷婷久久伊人| 国产aⅴ综合色| 日韩久久中文字幕| www.日韩系列| 欧美成人专区| 999精彩视频| 一区二区三区日韩欧美| 噜噜噜噜噜在线视频| 成人写真视频福利网| 亚洲毛片一区| 久久av红桃一区二区禁漫| 亚洲第一天堂av| 巨胸喷奶水www久久久免费动漫| 强开小嫩苞一区二区三区网站| 不卡视频免费播放| 中文字幕av网站| 午夜精品久久久久久久白皮肤 | 91欧美激情一区二区三区成人| 中文字幕av资源| 97国产精品久久| 国产国产精品| 美女洗澡无遮挡| 精品少妇一区二区| 日韩漫画puputoon| 毛片在线视频播放| 一区在线观看免费|