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

Spring事務(wù)失效的各種場景總結(jié)及源碼分析

開發(fā) 架構(gòu)
在本文中,深入探討了Spring事務(wù)失效的各種情況。通過了解這些情況,我們可以更好地理解事務(wù)管理在Spring框架中的重要性,以及如何避免和解決事務(wù)失效的問題。

環(huán)境:Spring5.3.23

1. 簡介

在Spring框架中,事務(wù)管理是保障數(shù)據(jù)一致性和系統(tǒng)可靠性的重要手段。但在實際開發(fā)中,Spring事務(wù)失效的問題卻時有發(fā)生。本文將總結(jié)并分析Spring事務(wù)失效的各種場景,幫助你全面了解事務(wù)失效的原因和解決方案,讓你不再被事務(wù)問題困擾。。讓我們一起揭開Spring事務(wù)失效的神秘面紗,迎接更穩(wěn)健、高效的系統(tǒng)開發(fā)之旅!

2. 事務(wù)失效場景

2.1 非public方法

@Transactional
protected void save() {
  Person person = new Person();
  person.setAge(36);
  person.setName("張三");
  int result = jdbcTemplate.update("insert into t_person (age, name) values (?, ?)", person.getAge(),
      person.getName());
  System.out.println("save Db Update " + result + " 次");
  System.out.println(1 / 0) ;
}

以上方法是protected修飾的,事務(wù)將失效,默認(rèn)Spring支持支public修飾的方法。如何讓Spring支持非public方法呢?可以通過如下方法修改

@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public TransactionAttributeSource transactionAttributeSource() {
  // 設(shè)置為false,這樣protected及默認(rèn)修飾的方法都將支持事務(wù)功能
  return new AnnotationTransactionAttributeSource(false) ;
}

該要想上面bean生效,你還需要開啟如下功能

GenericApplicationContext context = new GenericApplicationContext();
// 允許Bean覆蓋,后面的BeanDefintion能覆蓋前面的
// 我們定義的transactionAttributeSource bena能夠覆蓋系統(tǒng)默認(rèn)的
context.setAllowBeanDefinitionOverriding(true) ;

2.2 異常被吞

@Transactional
protected void save() {
  try {
    // ...
    int result = jdbcTemplate.update("insert into t_person (age, name) values (?, ?)", person.getAge(),
        person.getName());
    System.out.println(1 / 0) ;
  } catch (Exception e) {
    e.printStackTrace() ;
  }
}

上面代碼將異常信息捕獲了后并沒有再進(jìn)行拋出。Spring 事務(wù)的原理就是根據(jù)你代碼執(zhí)行時是否發(fā)生了異常來控制事務(wù)是否回滾。源碼如下:

Spring事務(wù)的核心攔截器TransactionInterceptor

public abstract class TransactionAspectSupport {
  protected Object invokeWithinTransaction(...) throws Throwable {
    TransactionInfo txInfo = createTransactionIfNecessary(ptm, txAttr, joinpointIdentification);
    Object retVal;
      try {
        // 執(zhí)行實際的業(yè)務(wù)代碼調(diào)用
        retVal = invocation.proceedWithInvocation();
      }
      catch (Throwable ex) {
        // 執(zhí)行事務(wù)回滾
        completeTransactionAfterThrowing(txInfo, ex);
        // 繼續(xù)拋出,終止向下執(zhí)行
        throw ex;
      }
      finally {
        cleanupTransactionInfo(txInfo);
      }
      // 沒有異常則進(jìn)行事務(wù)的提交
      commitTransactionAfterReturning(txInfo);
  }
}

2.3 回滾異常類設(shè)置錯誤

Spring事務(wù)回滾策略是只會回滾RuntimeException與Error類型的異常和錯誤。

@Transactional
protected void save() throws Exception {
  try {
    Person person = new Person();
    person.setAge(36);
    person.setName("張三");
    int result = jdbcTemplate.update("insert into t_person (age, name) values (?, ?)", person.getAge(),
        person.getName());
    System.out.println("save Db Update " + result + " 次");
    System.out.println(1 / 0) ;
  } catch (Exception e) {
    e.printStackTrace() ;
    throw new Exception(e) ;
  }
}

這里并沒有設(shè)置rollbackFor屬性,所以這里事務(wù)不會被回滾。回滾邏輯處理如下:

public abstract class TransactionAspectSupport {
  protected Object invokeWithinTransaction() {
    try {
      retVal = invocation.proceedWithInvocation();
    }
    catch (Throwable ex) {
      // 回滾處理
      completeTransactionAfterThrowing(txInfo, ex);
      throw ex;
    }
  }
  protected void completeTransactionAfterThrowing() {
    // 檢查異常
    if (txInfo.transactionAttribute != null && txInfo.transactionAttribute.rollbackOn(ex)) {
      try {
        txInfo.getTransactionManager().rollback(txInfo.getTransactionStatus());
      }
    }
  }
}
public abstract class DelegatingTransactionAttribute {
  // 實現(xiàn)類是下面的RuleBasedTransactionAttribute
  private final TransactionAttribute targetAttribute;
  public boolean rollbackOn(Throwable ex) {
    return this.targetAttribute.rollbackOn(ex);
  }
}
public class RuleBasedTransactionAttribute {
  public boolean rollbackOn(Throwable ex) {
    RollbackRuleAttribute winner = null;
    int deepest = Integer.MAX_VALUE;


    // 遍歷處理你配置的rollbackFor屬性配置
    if (this.rollbackRules != null) {
      for (RollbackRuleAttribute rule : this.rollbackRules) {
        int depth = rule.getDepth(ex);
        if (depth >= 0 && depth < deepest) {
          deepest = depth;
          winner = rule;
        }
      }
    }
    
    // 如果上沒有找到異常,則進(jìn)行默認(rèn)行為的處理,檢查異常類型
    if (winner == null) {
      return super.rollbackOn(ex);
    }


    return !(winner instanceof NoRollbackRuleAttribute);
  }
  public boolean rollbackOn(Throwable ex) {
    // 回滾是運(yùn)行時及Error類型的異常或錯誤
    return (ex instanceof RuntimeException || ex instanceof Error);
  }
}

2.4 同一類中方法互相調(diào)用

protected void save() {
  // ...
  this.updatePerson()
}
@Transactional
public void updatePerson() {
  // ...
}

上面的事務(wù)將會失效,因為在save中通過this調(diào)用updatePerson,而這時的this是原始對象,并不是當(dāng)前容器中生成的那個代理對象,通過如下方式解決:

方式1:

protected void save() {
  // 通過AopContext獲取當(dāng)前代理對象
  PersonService proxy = (PersonService)AopContext.currentProxy() ;
  proxy.save() ;
}

這種方式,不推薦;這將你的代碼與Spring AOP完全耦合,并使類本身意識到它正在AOP上下文中使用,這與AOP背道而馳。

方式2:

自己注入自己

@Resource
private PersonService personService ;
public void save() {
  personService.save() ;
}

2.5 方法被final修飾

@Transactional
protected final void save() {
  // ...
}

方法被final修飾,cglib是通過繼承的方式實現(xiàn)代理,final修飾后將不能重寫save方法。程序拋出NPE異常

Exception in thread "main" java.lang.NullPointerException
  at com.pack.main.transaction.TransactionNoPublicMethodMain2$PersonService.save(TransactionNoPublicMethodMain2.java:98)

因為無法重寫save方法,首先是沒法對方法進(jìn)行增強(qiáng)處理,其次只能調(diào)用父類的save方法,而父類中的所有屬性(需要注入的)都將是null。

2.6 傳播類型設(shè)置錯誤

@Transactional(propagation = Propagation.NOT_SUPPORTED)
protected void save() {
  // ...
}

或者是設(shè)置為Propagation.NEVER,這都將使得事務(wù)失效。部分源碼:

public abstract class TransactionAspectSupport {
  protected Object invokeWithinTransaction() {
    // 使用getTransaction和commit/rollback調(diào)用進(jìn)行標(biāo)準(zhǔn)事務(wù)劃分。
    TransactionInfo txInfo = createTransactionIfNecessary(ptm, txAttr, joinpointIdentification);
  }
  protected TransactionInfo createTransactionIfNecessary() {
    // 調(diào)用事務(wù)管理器獲取事務(wù)對象
    status = tm.getTransaction(txAttr);
  }
}
public abstract class AbstractPlatformTransactionManager {
  public final TransactionStatus getTransaction() {
    // 根據(jù)配置的事務(wù)傳播屬性進(jìn)行相應(yīng)的處理
    if (def.getPropagationBehavior() == TransactionDefinition.PROPAGATION_MANDATORY) {
      throw new IllegalTransactionStateException(
          "No existing transaction found for transaction marked with propagation 'mandatory'");
    }
    else if (def.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRED ||
        def.getPropagationBehavior() == TransactionDefinition.PROPAGATION_REQUIRES_NEW ||
        def.getPropagationBehavior() == TransactionDefinition.PROPAGATION_NESTED) {
    } else {
      // 創(chuàng)建“空”事務(wù):沒有實際的事務(wù),但可能是同步。
      boolean newSynchronization = (getTransactionSynchronization() == SYNCHRONIZATION_ALWAYS);
      return prepareTransactionStatus(def, null, true, newSynchronization, debugEnabled, null);
    }
  }
}

2.7 異步線程執(zhí)行

在一個事務(wù)方法中開啟新的線程執(zhí)行事務(wù)方法

@Transactional()
protected void save() {
  new Thread(() -> {
    Person person = new Person();
    person.setAge(36);
    person.setName("張三");
    int result = jdbcTemplate.update("insert into t_person (age, name) values (?, ?)", person.getAge(),
        person.getName());
    System.out.println("save Db Update " + result + " 次");
    System.out.println(1 / 0) ;
  }).start() ;
  try {
    TimeUnit.SECONDS.sleep(3) ;
  } catch (InterruptedException e) {}
}

上面的事務(wù)將不會生效,這是因為主線程與子線程使用的不是同一個Connection對象,Spring事務(wù)執(zhí)行會為每一個執(zhí)行線程綁定一個Connection對象。源碼如下:

public abstract class AbstractPlatformTransactionManager {
  // 開始新的事務(wù)
  private TransactionStatus startTransaction() {
    doBegin(transaction, definition);
  }
}
public class DataSourceTransactionManager {
  protected void doBegin(...) {
    DataSourceTransactionObject txObject = (DataSourceTransactionObject) transaction;
    Connection con = null;
    try {
      if (!txObject.hasConnectionHolder() ||
          txObject.getConnectionHolder().isSynchronizedWithTransaction()) {
        // 獲取連接對象
        Connection newCon = obtainDataSource().getConnection();
        txObject.setConnectionHolder(new ConnectionHolder(newCon), true);
      }
      // 將連接對象綁定到當(dāng)前線程上
      if (txObject.isNewConnectionHolder()) {
        TransactionSynchronizationManager.bindResource(obtainDataSource(), txObject.getConnectionHolder());
      }
    } 
  }
}

你新啟動的線程是拿不到主線程中的Connection。

2.8 數(shù)據(jù)庫不支持

在MySQL建表時指定了錯誤的引擎,比如使用了MyISAM。mysql支持哪些引擎及事務(wù)支持情況如下:

支持事務(wù)的只有InnoDB。在建表時明確指定引擎。

通過上面的方式制定ENGINE=InnoDB。

2.9 關(guān)于@Transactional注解使用錯誤的情況

有些人說使用了錯誤的@javax.transaction.Transactional注解。通過源碼分析

Spring在定義事務(wù)的切面時,會使用TransactionAttributeSource來判斷當(dāng)前的類上或者是方法上是否有@Transactional注解

@Bean
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public TransactionAttributeSource transactionAttributeSource() {
  return new AnnotationTransactionAttributeSource();
}
public class AnnotationTransactionAttributeSource {
  private static final boolean jta12Present;
  private static final boolean ejb3Present;
  static {
    // 判斷是否存在該注解類
    jta12Present = ClassUtils.isPresent("javax.transaction.Transactional", classLoader);
  }
  public AnnotationTransactionAttributeSource(boolean publicMethodsOnly) {
    this.publicMethodsOnly = publicMethodsOnly;
    if (jta12Present || ejb3Present) {
      this.annotationParsers = new LinkedHashSet<>(4);
      this.annotationParsers.add(new SpringTransactionAnnotationParser());
      if (jta12Present) {
        // 如果存在會加入專門解析@javax.transaction.Transactional注解的解析器類
        this.annotationParsers.add(new JtaTransactionAnnotationParser());
      }
      if (ejb3Present) {
        this.annotationParsers.add(new Ejb3TransactionAnnotationParser());
      }
    }
    else {
      this.annotationParsers = Collections.singleton(new SpringTransactionAnnotationParser());
    }
  }
}

所以如果你類路徑下只要存在,那么你的事務(wù)還是可以生效的。

總結(jié):在本文中,深入探討了Spring事務(wù)失效的各種情況。通過了解這些情況,我們可以更好地理解事務(wù)管理在Spring框架中的重要性,以及如何避免和解決事務(wù)失效的問題。

完畢!!!

責(zé)任編輯:武曉燕 來源: Spring全家桶實戰(zhàn)案例源碼
相關(guān)推薦

2022-02-14 16:53:57

Spring項目數(shù)據(jù)庫

2025-10-30 07:45:06

2023-07-05 08:45:18

Spring事務(wù)失效場景

2024-01-05 08:38:20

SpringBeanScope

2024-09-09 08:29:25

2021-09-04 07:56:44

Spring事務(wù)失效

2021-12-13 11:12:41

Spring事務(wù)失效

2021-04-14 15:17:08

Transaction代碼語言

2025-02-10 00:27:54

2023-09-28 09:07:54

注解失效場景

2022-04-13 20:53:15

Spring事務(wù)管理

2022-12-06 10:39:43

Spring事務(wù)失效

2022-09-22 09:57:20

Spring事務(wù)失效

2021-04-28 06:26:11

Spring Secu功能實現(xiàn)源碼分析

2022-07-05 14:19:30

Spring接口CGLIB

2023-05-26 07:19:49

Spring聲明式事務(wù)

2023-09-08 08:52:12

Spring注解事務(wù)

2023-08-29 10:51:44

2025-08-06 00:00:01

事務(wù)失效聲明式

2023-04-28 08:21:36

SpringBoot聲明式事務(wù)編程式事務(wù)
點贊
收藏

51CTO技術(shù)棧公眾號

中文字幕在线播放网址| 日本道在线观看| 精品国产亚洲一区二区三区大结局| 亚洲天堂免费看| 国产日韩三区| 久久久久久久久久成人| 亚洲第一天堂| 日韩精品极品在线观看播放免费视频 | 国产一区二区在线视频播放| 国产午夜精品一区理论片| 国产另类ts人妖一区二区| 欧美一级电影免费在线观看| 亚洲一级二级片| 亚洲av电影一区| 日本美女一区二区| 欧美大片在线影院| 国产精品无码无卡无需播放器| 中文字幕一区日韩精品| 欧美私人免费视频| 阿v天堂2017| 国产激情在线| 中文字幕乱码久久午夜不卡| 国产伦精品一区二区三区四区免费| 免费看av在线| 国产日韩高清一区二区三区在线| 日韩视频欧美视频| 深爱五月激情网| 免费看男女www网站入口在线 | 成人免费观看在线观看| 国产精品久久久久四虎| 女人一区二区三区| 日本天堂网在线| 欧美国产免费| 欧美va亚洲va国产综合| 国产小视频精品| 中文在线а√在线8| 亚洲午夜电影网| 狠狠爱一区二区三区| 国产又粗又猛又爽又黄视频| 久久久久国产精品午夜一区| 韩国三级电影久久久久久| 久久久精品视频免费观看| 91久久夜色精品国产按摩| 国产一区二区三区在线免费观看| 999精品免费视频| 91麻豆精品国产91久久久久推荐资源| 欧美二区在线观看| 永久免费看av| 男人的天堂在线视频免费观看| 精品在线亚洲视频| 久久最新资源网| 亚洲色图 激情小说| 色综合综合网| 中文字幕精品—区二区| 日韩免费成人av| 欧洲福利电影| 在线不卡国产精品| 免费黄色在线网址| 欧美aaaa视频| 久久久91精品国产| 91日韩中文字幕| 青青草久久爱| 日韩乱码在线视频| 国产伦精品一区二区三区妓女| 亚洲人成网www| 欧美日韩一区二区三区四区五区| 亚洲男人天堂色| 欧美18av| 欧美男生操女生| 深夜福利网站在线观看| 精品一区二区三区亚洲| 日韩精品一区二区三区老鸭窝| 少妇熟女视频一区二区三区| 国产一区二区三区不卡av| 亚洲国产成人精品女人久久久 | 亚洲五月六月| 超碰porn在线| 激情久久av一区av二区av三区 | 久久成人免费日本黄色| 成人国产精品一区| 亚洲精品国产suv一区| 成人看片黄a免费看在线| 精品婷婷色一区二区三区蜜桃| 美女毛片在线看| 中文字幕中文字幕中文字幕亚洲无线| 欧美大片免费播放| av中文字幕电影在线看| 色8久久精品久久久久久蜜| 高清av免费看| 91精品日本| 亚洲欧美综合精品久久成人| 久久久久久久久久97| 黑丝一区二区三区| 国产高清在线不卡| 日本少妇久久久| 日韩福利电影在线观看| 午夜欧美不卡精品aaaaa| 一本一道无码中文字幕精品热| 美女尤物国产一区| 欧洲成人午夜免费大片| 精品少妇theporn| 久久精品系列| 亚洲一区二区三| 欧美扣逼视频| 亚洲综合色成人| 色一情一乱一乱一区91| 国产传媒av在线| 在线播放91灌醉迷j高跟美女 | 中文字幕免费在线观看视频一区| 国产情侣第一页| 久久91视频| 亚洲欧美日韩第一区| 亚洲欧美一区二区三区四区五区| 久久午夜精品| 国产日韩欧美综合精品| 岛国中文字幕在线| 欧美天堂一区二区三区| 成人手机在线免费视频| 欧美1级日本1级| 国产精品一区电影| 欧美一区二区三区少妇| 亚洲国产精品久久久久秋霞影院 | 国产精品21p| 成人sese在线| 国产1区2区3区中文字幕| www免费在线观看| 欧美写真视频网站| ass精品国模裸体欣赏pics| 欧美日本国产| 777777777亚洲妇女| 99久久精品国产一区色| 国产91丝袜在线播放| 亚洲精品成人自拍| 免费亚洲电影| 亚洲欧美日韩视频一区| 香蕉免费毛片视频| 成人午夜免费视频| 男人天堂a在线| 三级欧美日韩| 九九热最新视频//这里只有精品| 国产精品无码在线播放| 国产精品久久久一本精品| 国内自拍视频一区| 中国av一区| 日韩av理论片| 国内精品在线视频| 一本大道久久a久久精二百| 精品无码在线视频| 性久久久久久| 日韩国产在线一区| av在线导航| 欧美丰满嫩嫩电影| 成年人一级黄色片| 国产一区二区三区免费在线观看| 色撸撸在线观看| 欧洲精品99毛片免费高清观看| 欧美精品一本久久男人的天堂| 国产超碰人人模人人爽人人添| 亚洲乱码国产乱码精品精的特点| 四川一级毛毛片| 激情久久中文字幕| 免费久久久一本精品久久区| 色豆豆成人网| 日韩最新在线视频| 国产伦子伦对白视频| 亚洲欧美日韩一区二区三区在线观看| 中文字幕一区二区在线观看视频| 欧美韩国一区| 狠狠干一区二区| 在线观看精品| 久久精品国产91精品亚洲| 国产www免费观看| 精品久久香蕉国产线看观看gif| 少妇光屁股影院| 精品一区二区在线播放| 日本黄大片在线观看| 亚洲三级网页| 91久久精品国产| www欧美xxxx| 亚洲小视频在线| 国产视频www| 欧美色道久久88综合亚洲精品| 午夜影院免费版| 国内在线观看一区二区三区| 欧美另类网站| 国产美女亚洲精品7777| 992tv成人免费影院| 二区在线视频| 日韩你懂的在线播放| 精品国产一区二区三区四| 日韩理论在线观看| 亚洲av网址在线| 韩国一区二区视频| 99999精品视频| 欧美久久一区| 日韩精品一线二线三线| 99re8这里有精品热视频免费| 日韩av高清不卡| 黄页网站大全在线免费观看| 国产午夜精品全部视频播放 | 一区二区三区天堂av| 亚洲黄色在线播放| 欧美日韩一区二区三区在线 | 欧美日本韩国一区| 国内免费精品视频| 亚洲欧美日韩在线播放| 中文字幕在线观看免费高清| 国产成人三级在线观看| 国产精品夜色7777狼人| 日本熟妇一区二区三区| 国产精品一区二区中文字幕| 欧美亚洲第一页| av免费在线观看网站| 亚洲欧美日韩视频一区| 成人乱码一区二区三区| 欧美日韩中文字幕精品| 国产视频91在线| 欧美黑人猛交| 在线观看视频99| 神马午夜电影一区二区三区在线观看| 欧美体内she精视频| 成人在线免费看视频| 一个色综合网站| 男人av资源站| 亚洲国产精品黑人久久久| 国产成人无码一区二区在线观看| 国产精品自拍在线| 日本高清久久久| 奇米色777欧美一区二区| 久久久久人妻精品一区三寸| 在线精品福利| 天天做天天躁天天躁| 99精品综合| 97国产精品视频| 91三级在线| 久久九九国产精品怡红院| www.成人.com| 中国日韩欧美久久久久久久久| 天堂av电影在线观看| 欧美日韩一区二区三区在线免费观看| 一级片黄色录像| 欧美激情自拍偷拍| 美女被到爽高潮视频| 久久综合国产精品| 国产精品久久不卡| 99久久99久久精品国产片果冻| 中文字幕制服丝袜| 国产成人一区在线| 久久久精品人妻一区二区三区| 国产精品77777| 国产精品偷伦视频免费观看了| 国产一区二区免费在线| 亚洲天堂网站在线| 国产剧情在线观看一区二区| 麻豆传媒在线看| 福利一区二区在线| 99久久免费看精品国产一区| www.亚洲色图| 成人精品在线观看视频| 久久精品人人做| 国产精品二区视频| 国产精品一二三四区| 亚洲欧洲日韩综合| 成人精品电影在线观看| 97香蕉碰碰人妻国产欧美| 91一区二区三区在线观看| 美女脱光内衣内裤| 亚洲国产成人一区二区三区| 久久噜噜色综合一区二区| 亚洲精品视频在线| www.国产成人| 在线观看日韩电影| 国产免费的av| 亚洲国产日韩欧美在线图片| 免费毛片在线| 精品国内亚洲在观看18黄 | 99精品国产九九国产精品| 亚洲在线观看视频| 国产欧美一区二区三区米奇| 奇米影视首页 狠狠色丁香婷婷久久综合| 欧美日韩国产免费观看视频| 青少年xxxxx性开放hg| 亚洲韩日在线| 91色国产在线| 懂色一区二区三区免费观看| 精品少妇人妻一区二区黑料社区 | 国内精品写真在线观看| 国产ts在线观看| 久久精品亚洲精品国产欧美| 国产极品美女在线| 久久久91精品国产一区二区精品| 亚洲黄色网址大全| 亚洲午夜免费视频| 日本精品入口免费视频| 精品美女在线观看| jizz亚洲| 97在线观看免费| 豆花视频一区| 欧美日韩一区二区视频在线| 一本一道久久a久久精品蜜桃| 日韩欧美第二区在线观看| 亚洲激情中文在线| 日本三区在线观看| 久久激情久久| 九九九久久久久久久| 久久久久久99久久久精品网站| 91插插插插插插| 在线观看国产一区二区| 人妻无码中文字幕| 久久视频在线看| 日本一区二区三区视频在线| 国产综合第一页| 中文精品电影| 亚欧激情乱码久久久久久久久| 99久久er热在这里只有精品15 | 天天综合久久| 欧美一级裸体视频| 91亚洲资源网| 欧美三级韩国三级日本三斤在线观看 | 国产一区二区三区18| gogo高清在线播放免费| 91在线网站视频| 成人激情视频| 999香蕉视频| 99久久国产综合精品女不卡| 久久一区二区三| 欧美一区二区三区在线视频| 国产黄在线观看| 日本亚洲欧洲色| 小嫩嫩12欧美| 六月丁香激情网| 不卡视频免费播放| 五月天综合在线| 亚洲成色777777女色窝| 男人天堂亚洲天堂| 亚洲在线视频观看| 在线中文字幕亚洲| 五月天婷婷在线观看视频| 国产精品素人视频| 中文人妻熟女乱又乱精品| 一区二区三区国产视频| 色综合一本到久久亚洲91| 欧美日韩国产精品一卡| 久久黄色网页| 日本一二三不卡视频| 欧美午夜精品一区| 三级外国片在线观看视频| 国产一区在线播放| 成人网18免费网站| 亚洲精品久久久久久宅男| 中文字幕一区二区三区在线不卡| 中文字幕日日夜夜| 日韩中文字幕在线免费观看| 成人自拍视频| 日韩在线观看a| 不卡av在线免费观看| 日韩精品手机在线| 国产亚洲欧美另类中文| 97精品国产99久久久久久免费| 亚洲欧美日韩国产成人综合一二三区| 六月婷婷色综合| www.5588.com毛片| 精品精品国产高清a毛片牛牛| 99色在线观看| 欧洲一区二区日韩在线视频观看免费| 日韩电影在线免费观看| 四虎影视1304t| 午夜精品一区二区三区免费视频| 神宫寺奈绪一区二区三区| 国产mv免费观看入口亚洲| 大色综合视频网站在线播放| 在线免费看污网站| 91美女福利视频| 欧美一级黄视频| 久久久精品国产一区二区| av日韩精品| 免费黄色特级片| 亚洲日本一区二区三区| 欧美在线精品一区二区三区| 国产不卡精品视男人的天堂| 国产精品久久久久久久久久10秀 | 欧美电影完整版在线观看| 日日碰狠狠丁香久燥| 日韩毛片视频在线看| 欧美一区二区三区激情| 国产精品视频大全| 欧美激情aⅴ一区二区三区| 日本黄色片在线播放| 欧美日韩激情一区二区三区| а_天堂中文在线| 亚洲一区二区三区涩| 成人黄页在线观看| 在线不卡免费视频| 久久久亚洲欧洲日产国码aⅴ| 精品一区电影| 一本加勒比波多野结衣| 91精品欧美一区二区三区综合在| 亚洲最大成人| 免费cad大片在线观看| 国产丝袜欧美中文另类|