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

国产精品区在线观看| 精品成人av一区二区三区| 美足av综合网| www日韩大片| 国产一区玩具在线观看| 国产在线欧美在线| 欧美久久精品一级c片| 欧美一卡二卡在线观看| 熟女性饥渴一区二区三区| 午夜免费福利在线观看| 不卡的看片网站| 国产精品免费视频xxxx| 国产无精乱码一区二区三区| 日韩免费高清| 精品国产青草久久久久福利| 小泽玛利亚视频在线观看| 超碰高清在线| 一区二区三区四区乱视频| 国产剧情日韩欧美| 午夜精品三级久久久有码| 香蕉综合视频| 一本大道亚洲视频| 九一精品久久久| 欧美xxx性| 亚洲成人av中文| 色婷婷777777仙踪林| 福利在线播放| 国产一区二区在线免费观看| 啪一啪鲁一鲁2019在线视频| 国产一级视频在线播放| 日韩动漫一区| 精品乱人伦小说| 日本黄色www| 蜜桃在线视频| 亚洲国产成人va在线观看天堂| 97se国产在线视频| 一级片视频播放| 日韩在线一区二区| 欧美中文字幕视频| 日韩aaaaaa| 在线看片成人| 久久久久久九九九| 久久久久久久久久久久久久久久久 | 大胆亚洲人体视频| 成人精品一区二区三区电影黑人 | 日本韩国一区| 91在线国产观看| 久久国产精品 国产精品| 国产成人三级在线观看视频| 国产成人综合在线观看| 日本精品va在线观看| 国产一卡二卡在线| 伊人成人网在线看| 97久久久久久| 美女福利视频在线观看| 亚洲五月综合| 亚洲三级av在线| 18禁一区二区三区| 国产一区二区精品调教| 欧美在线free| 日韩av片专区| 日韩一区二区三区精品| 日韩一区二区免费高清| 欧美一级大片免费看| 97精品国产综合久久久动漫日韩| 亚洲愉拍自拍另类高清精品| 日本阿v视频在线观看| 91桃色在线| 黑人欧美xxxx| 欧美特级aaa| 日韩在线亚洲| 日韩不卡中文字幕| 五月激情四射婷婷| 亚洲激情77| 中文字幕欧美国内| 国产精品丝袜一区二区| 欧洲激情视频| 欧美成年人网站| 日韩污视频在线观看| 久久久蜜桃一区二区人| 国产免费一区视频观看免费| 国产后入清纯学生妹| 久久机这里只有精品| 国产成人一区二区| 国产欧美熟妇另类久久久 | 插插插亚洲综合网| 五月天婷婷网站| 黄色日韩在线| 国产成人精品电影| www视频在线| 国产日韩欧美综合一区| 99精品一级欧美片免费播放| 欧美久久天堂| 91精品国产色综合久久ai换脸 | 成人精品三级| 欧美一级高清片在线观看| 国产麻豆剧传媒精品国产av| 欧美色图在线播放| 久久免费高清视频| 在线观看免费中文字幕| 不卡的av电影在线观看| 亚洲亚洲精品三区日韩精品在线视频| 第一页在线观看| 亚洲综合一区二区三区| 午夜精品在线免费观看| 国产精品nxnn| 久久中文字幕在线| 激情网站在线观看| 99久久99久久精品免费观看| 精品午夜一区二区| 自拍亚洲图区| 欧美三级一区二区| 变态另类丨国产精品| 欧美+日本+国产+在线a∨观看| 久久国产色av| 国产情侣小视频| 99re视频这里只有精品| a级片一区二区| 福利一区二区免费视频| 日韩国产高清视频在线| 久久久国产精品黄毛片| 亚洲美女毛片| 亚洲伊人第一页| 国产综合在线播放| 2021中文字幕一区亚洲| 欧美激情亚洲天堂| 日韩欧美中文在线观看| 俺去了亚洲欧美日韩| 国产天堂第一区| 久久久久久一二三区| 国模无码视频一区二区三区| 国产一区二区三区影视| 亚洲人av在线影院| 天天操夜夜操视频| 91麻豆产精品久久久久久| 成人黄色大片网站| 91夜夜蜜桃臀一区二区三区| 色综合久久88| www.精品久久| 亚洲精品乱码久久久久久| 在线观看免费视频污| 91精品99| 99在线视频免费观看| 久久久123| 精品国产免费人成电影在线观看四季 | 国产精品老女人| 99re热视频这里只精品| 日本少妇高潮喷水视频| 全国精品免费看| 欧美在线视频免费观看| 日本午夜在线视频| 在线观看国产精品网站| 国产极品视频在线观看| 久久se精品一区二区| 波多野结衣三级在线| 国产麻豆一区二区三区| 欧美精品一本久久男人的天堂| 无码免费一区二区三区| 日本一区二区三区dvd视频在线| 成年女人18级毛片毛片免费| 东京久久高清| 欧美在线日韩在线| 成人综合影院| 欧美性猛交xxxxx水多| 国产jjizz一区二区三区视频| 在线观看的日韩av| 免费国产在线精品一区二区三区| 欧美xxxx黑人又粗又长| 亚洲风情亚aⅴ在线发布| 777777国产7777777| 国产高清成人在线| 3d动漫一区二区三区| 狠狠操综合网| 亲爱的老师9免费观看全集电视剧| 亚洲精品久久久久久无码色欲四季| 中文字幕制服丝袜一区二区三区| 国产日韩一区二区在线观看| 成人在线免费小视频| 91在线|亚洲| 华人av在线| 色偷偷av一区二区三区| 亚洲成人久久精品| 色就色 综合激情| 日本在线一级片| 九一九一国产精品| 日韩黄色短视频| 欧美精选一区二区三区| 超碰97人人人人人蜜桃| 桃子视频成人app| 亚洲男子天堂网| 国产毛片久久久久| 欧美性69xxxx肥| 日韩a级片在线观看| 国产精品99久久不卡二区| 欧美日韩激情视频在线观看| 欧美岛国激情| 久久精品五月婷婷| 精品国产一区二区三区性色av| 久久国内精品一国内精品| 天天色综合久久| 欧美精品乱码久久久久久| 天天色天天综合| 久久网站最新地址| a级大片免费看| 国产精品v亚洲精品v日韩精品| 国产精品免费一区二区三区观看| av中文资源在线资源免费观看| 亚洲精品www久久久| 国产乱淫av免费| 亚洲午夜一区二区三区| 老司机精品免费视频| 久久无码av三级| 亚洲免费黄色网| 免费精品视频| aa视频在线播放| 欧美+亚洲+精品+三区| 亚洲精品二区| 精品国产不卡| 欧美极品色图| 日韩深夜影院| 国内外成人免费视频| 快播电影网址老女人久久| 欧美黄色免费网站| 亚洲七七久久综合桃花剧情介绍| 亚洲国产精品高清久久久| 国产又粗又猛又爽又黄视频| 91激情五月电影| aaaaaa毛片| 疯狂做受xxxx高潮欧美日本| 极品人妻videosss人妻| 91网站在线观看视频| 色哟哟视频在线| 福利一区在线观看| 亚洲黄色小说在线观看| 久久久久久夜| 国产精品欧美激情在线观看| 亚洲高清av| 欧美人成在线观看| 亚洲免费播放| 无码人妻精品一区二区三区在线| 久久激情电影| 亚洲一区二区三区精品在线观看| xxxx日韩| 久久草.com| 国产精品一区二区精品| 成人国内精品久久久久一区| 欧美v亚洲v综合v国产v仙踪林| 久久久这里只有精品视频| 成人三级黄色免费网站| 亚洲性夜色噜噜噜7777| 成年人在线看| 中文字幕久久精品| 成人福利网站| 国内精品中文字幕| 蜜桃视频在线观看免费视频| 欧美中文字幕第一页| 日本欧美不卡| 成人欧美一区二区三区在线湿哒哒| 天堂中文最新版在线中文| 91国语精品自产拍在线观看性色| 国产黄色在线网站| 欧美黄色成人网| 国产拍在线视频| 国产99在线|中文| 欧美一区二区三区婷婷| 热久久这里只有精品| 精品成人免费一区二区在线播放| 91国产高清在线| 电影亚洲精品噜噜在线观看| 91国语精品自产拍在线观看性色 | 中文字幕一区视频| 青娱乐国产在线| 欧美色欧美亚洲高清在线视频| 久久中文字幕在线观看| 日韩欧美成人网| 在线免费观看一级片| 在线免费不卡视频| 欧美性猛交bbbbb精品| 欧美影院午夜播放| jlzzjlzz亚洲女人18| 日韩av在线免费播放| 午夜视频在线看| 波霸ol色综合久久| 日本在线视频站| 久久男人的天堂| www.26天天久久天堂| 不卡的av一区| 久久国产精品亚洲人一区二区三区| 亚洲国产高清国产精品| 欧美视频成人| 91n.com在线观看| 成人激情文学综合网| 亚洲色图 激情小说| 亚洲一二三四在线| 亚洲熟女乱色一区二区三区久久久| 欧美在线|欧美| 日本激情一区二区三区| 日韩中文字幕在线看| 超碰中文在线| 亚洲3p在线观看| 午夜不卡一区| 欧美日韩精品不卡| 国内精品福利| 亚洲天堂网2018| 国产亚洲综合在线| 国产一级特黄视频| 欧美一级欧美三级| 91caoporm在线视频| 51视频国产精品一区二区| 精品国产亚洲一区二区三区| 婷婷久久青草热一区二区| 99av国产精品欲麻豆| 国产男女无遮挡| 成人黄色大片在线观看 | 国产精品久久久久7777婷婷| 99a精品视频在线观看| 伊人久久大香线蕉av一区| 久久久蜜桃一区二区人| 懂色av粉嫩av蜜乳av| 亚洲专区一二三| 精品毛片一区二区三区| 日韩视频一区在线| 精品欧美一区二区三区在线观看| 国产一区视频在线播放| 精品久久电影| 日韩av在线综合| 91麻豆国产自产在线观看| 天天操天天射天天爽| 日韩欧美www| caoporm免费视频在线| 成人免费激情视频| 天天综合网网欲色| 久久黄色片网站| 亚洲欧美综合另类在线卡通| 日韩美女一级片| 欧美哺乳videos| 国产区美女在线| 国产精品美女黄网| 亚洲国产综合在线看不卡| 99热超碰在线| 亚洲成人一区在线| 四虎影视在线播放| 日本视频久久久| 欧美日韩伦理| 日本国产一级片| 亚洲男帅同性gay1069| 国产精品久久久久久人| 亚洲欧洲偷拍精品| 97精品国产综合久久久动漫日韩| 国产精品一码二码三码在线| 亚洲三级免费| 日韩精品卡通动漫网站| 91久久人澡人人添人人爽欧美| 午夜美女福利视频| 中文字幕日韩在线观看| 久久久国产精品网站| 中文字幕免费高| 国产99久久精品| 国产精品999在线观看| 亚洲欧美日韩中文视频| ririsao久久精品一区| 国产伦精品一区二区三区高清| 久久久国产精品| 熟女人妻一区二区三区免费看| 国产精品少妇自拍| 国产三级午夜理伦三级| 久久久亚洲国产天美传媒修理工| 97精品资源在线观看| 日本在线高清视频一区| 久久精品国内一区二区三区| 少妇久久久久久被弄高潮| 亚洲国产欧美自拍| 丁香花高清在线观看完整版| 久久一区二区三区欧美亚洲| 奇米精品一区二区三区在线观看一| 韩国无码一区二区三区精品| 在线影院国内精品| 超碰免费在线播放| 久久精品二区| 久久精品国产网站| 成年人看的免费视频| 欧美一级理论片| 日韩av中字| 特级西西人体www高清大胆| www久久精品| 99精品国产99久久久久久97| 久久精品亚洲94久久精品| 激情视频极品美女日韩| 午夜宅男在线视频| 午夜精品久久一牛影视| 国产精品无码2021在线观看| 97自拍视频| 秋霞午夜av一区二区三区| 国产一级片久久| 中文字幕一区二区精品| 欧美一级做a| 97成人在线观看视频| 一区二区三区精品在线| av在线电影观看| 精品无码久久久久国产|