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

Spring事務(wù)管理器詳解

開發(fā) 前端
你還可以通過編程方式指示所需的回滾。盡管這個過程很簡單,但它具有很強的侵入性,并將您的代碼緊密地耦合到Spring Framework的事務(wù)基礎(chǔ)設(shè)施。

理解Spring事務(wù)抽象

Spring事務(wù)抽象的關(guān)鍵是事務(wù)策略的概念。事務(wù)策略是由TransactionManager定義的,特別是用于強制事務(wù)管理的
org.springframework.transaction.PlatformTransactionManager接口和用于響應(yīng)式事務(wù)管理的
org.springframework.transaction.ReactiveTransactionManager接口。下面的清單顯示了
PlatformTransactionManager API的定義:?

public interface PlatformTransactionManager extends TransactionManager {


TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;


void commit(TransactionStatus status) throws TransactionException;


void rollback(TransactionStatus status) throws TransactionException;
}

這主要是一個服務(wù)提供者接口(SPI),盡管你可以從應(yīng)用程序代碼中以編程方式使用它。因為
PlatformTransactionManager是一個接口,所以可以根據(jù)需要輕松模擬或存根。它沒有綁定到查找策略,比如JNDI。PlatformTransactionManager實現(xiàn)的定義類似于Spring Framework IoC容器中的任何其他對象(或bean)。

同樣,為了與Spring的理念保持一致,可以由PlatformTransactionManager接口的任何方法拋出的TransactionException是未檢查的(也就是說,它擴展了java.lang.
exception.RuntimeException類)。事務(wù)基礎(chǔ)結(jié)構(gòu)失敗幾乎總是致命的。在極少數(shù)情況下,應(yīng)用程序代碼實際上可以從事務(wù)失敗中恢復(fù),應(yīng)用程序開發(fā)人員仍然可以選擇捕獲和處理TransactionException。不過對于開發(fā)人員并沒有強制這樣做。

getTransaction(TransactionDefinition)方法返回一個TransactionStatus對象,這取決于TransactionDefinition參數(shù)。如果當(dāng)前調(diào)用堆棧中存在匹配的事務(wù),則返回的TransactionStatus可以表示一個新的事務(wù),也可以表示一個現(xiàn)有的事務(wù)。后一種情況的含義是,與Java EE事務(wù)上下文一樣,TransactionStatus與執(zhí)行線程相關(guān)聯(lián)。

從Spring Framework 5.2開始,Spring還為使用響應(yīng)式類型或Kotlin協(xié)程的響應(yīng)式應(yīng)用程序提供了事務(wù)管理抽象。下面的清單顯示了
org.springframework.transaction.ReactiveTransactionManager定義的事務(wù)策略:?

public interface ReactiveTransactionManager extends TransactionManager {


Mono<ReactiveTransaction> getReactiveTransaction(TransactionDefinition definition) throws TransactionException;


Mono<Void> commit(ReactiveTransaction status) throws TransactionException;


Mono<Void> rollback(ReactiveTransaction status) throws TransactionException;
}

TransactionDefinition接口具體說明:

Propagation(傳播特性):通常,事務(wù)范圍內(nèi)的所有代碼都在該事務(wù)中運行。但是,如果在事務(wù)上下文已經(jīng)存在時運行事務(wù)方法,則可以指定該行為。例如,代碼可以繼續(xù)在現(xiàn)有事務(wù)中運行(常見情況),也可以暫?,F(xiàn)有事務(wù)并創(chuàng)建新事務(wù)。

Isolation(隔離性):該事務(wù)與其他事務(wù)的工作隔離的程度。例如,這個事務(wù)能看到其他事務(wù)未提交的寫嗎?

Timeout(超時時間):該事務(wù)在超時和被底層事務(wù)基礎(chǔ)結(jié)構(gòu)自動回滾之前運行的時間。

Read-Only(只讀狀態(tài)):當(dāng)代碼讀取但不修改數(shù)據(jù)時,可以使用只讀事務(wù)。在某些情況下,例如使用Hibernate時,只讀事務(wù)可能是一種有用的優(yōu)化。

這些設(shè)置反映了標準的事務(wù)概念。如有必要,請參考討論事務(wù)隔離級別和其他核心事務(wù)概念的資源。理解這些概念對于使用Spring框架或任何事務(wù)管理解決方案都是至關(guān)重要的。

TransactionStatus接口為事務(wù)代碼提供了一種控制事務(wù)執(zhí)行和查詢事務(wù)狀態(tài)的簡單方法。這些概念應(yīng)該很熟悉,因為它們對所有事務(wù)api都很常見。下面的清單顯示了TransactionStatus接口:?

public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable {


@Override
boolean isNewTransaction();


boolean hasSavepoint();


@Override
void setRollbackOnly();


@Override
boolean isRollbackOnly();


void flush();


@Override
boolean isCompleted();
}

無論在Spring中選擇聲明式事務(wù)管理還是編程式事務(wù)管理,定義正確的TransactionManager實現(xiàn)都是絕對必要的。通常通過依賴注入來定義此實現(xiàn)。

TransactionManager實現(xiàn)通常需要了解它們工作的環(huán)境:JDBC、JTA、Hibernate等等。下面的示例展示了如何定義本地
PlatformTransactionManager實現(xiàn)(在本例中,使用普通JDBC)。

首先,你的先定義一個數(shù)據(jù)源:

<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

Java Config:?

@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource() ;
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test?serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true") ;
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver") ;
dataSource.setUsername("root") ;
dataSource.setPassword("root") ;
return dataSource ;
}

相關(guān)的
PlatformTransactionManager bean定義隨后具有對DataSource定義的引用。它應(yīng)該類似于下面的例子:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>

Java Config:?

@Bean
public DataSourceTransactionManager dataSourceTransactionManager(DataSource dataSource) {
DataSourceTransactionManager txManager = new DataSourceTransactionManager(dataSource);
return txManager;
}

Hibernate事務(wù)配置

還可以輕松地使用Hibernate本地事務(wù),如以下示例所示。在這種情況下,需要定義一個Hibernate LocalSessionFactoryBean,應(yīng)用程序代碼可以使用它來獲取Hibernate會話實例。

DataSource bean定義類似于前面顯示的本地JDBC示例

本例中的txManager bean屬于HibernateTransactionManager類型。就像DataSourceTransactionManager需要對DataSource的引用一樣,HibernateTransactionManager也需要對SessionFactory的引用。下面的例子聲明了sessionFactory和txManager bean:

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>org/springframework/samples/petclinic/hibernate/petclinic.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
</value>
</property>
</bean>


<bean id="txManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

LocalSessionFactoryBean是個FactoryBean,同時實現(xiàn)了InitializingBean接口,所以在當(dāng)前類初始化的時候,會調(diào)用afterPropertiesSet方法,該方法中會初始化SessionFactory對象。

將資源與事務(wù)同步

現(xiàn)在應(yīng)該清楚了如何創(chuàng)建不同的事務(wù)管理器,以及如何將它們鏈接到需要同步到事務(wù)的相關(guān)資源(例如,DataSourceTransactionManager到JDBC DataSource,Hibernate TransactionManager到Hibernate SessionFactory,等等)。本節(jié)描述了應(yīng)用程序代碼(直接或間接地,通過使用JDBC、Hibernate或JPA等持久性API)如何確保正確創(chuàng)建、重用和清理這些資源。本節(jié)還討論了如何(可選地)通過相關(guān)的TransactionManager觸發(fā)事務(wù)同步。

  • 高級同步方法

首選方法是使用Spring的最高級別基于模板的持久性集成API,或者使用具有事務(wù)感知工廠bean或代理的本地ORM API來管理本地資源工廠。這些事務(wù)感知解決方案在內(nèi)部處理資源的創(chuàng)建和重用、清理、資源的可選事務(wù)同步以及異常映射。因此,用戶數(shù)據(jù)訪問代碼不必處理這些任務(wù)。通常,使用本機ORM API,或者通過使用JdbcTemplate采用模板方法進行JDBC訪問。

  • 低級同步方法

DataSourceUtils(用于JDBC)、EntityManagerFactoryUtils(適用于JPA)、SessionFactoryUtil(適用于Hibernate)等類存在于較低級別。當(dāng)您希望應(yīng)用程序代碼直接處理本機持久性API的資源類型時,可以使用這些類來確保獲得正確的Spring Framework托管實例,同步事務(wù)(可選),并將過程中發(fā)生的異常正確映射到一致的API。

例如,在JDBC的情況下,你可以使用Spring的org.springframework.jdbc.datasource.DataSourceUtils類,而不是在數(shù)據(jù)源上直接調(diào)用getConnection()方法,如下所示:?

Connection conn = DataSourceUtils.getConnection(dataSource);

如果現(xiàn)有事務(wù)已經(jīng)有一個同步(鏈接)到它的連接,則返回該實例。否則,方法調(diào)用將觸發(fā)新連接的創(chuàng)建,該連接(可選地)同步到任何現(xiàn)有事務(wù),并可用于同一事務(wù)中的后續(xù)重用。如前所述,任何SQLException都被包裝在Spring框架
CannotGetJdbcConnectionException中,這是Spring框架中未檢查的DataAccessException類型的層次結(jié)構(gòu)之一。這種方法提供了比從SQLException輕松獲得的更多信息,并確保了跨數(shù)據(jù)庫、甚至跨不同持久性技術(shù)的可移植性。

這種方法在沒有Spring事務(wù)管理的情況下也可以工作(事務(wù)同步是可選的),因此無論是否使用Spring進行事務(wù)管理,都可以使用它。

當(dāng)然,一旦你使用了Spring的JDBC支持、JPA支持或Hibernate支持,你通常不喜歡使用DataSourceUtils或其他輔助類,因為你更喜歡通過Spring抽象工作而不是直接使用相關(guān)的api。例如,如果使用Spring JdbcTemplate或jdbc。對象包來簡化你的JDBC使用,正確的連接檢索發(fā)生在幕后,你不需要編寫任何特殊的代碼。

  • TransactionAwareDataSourceProxy

在最底層存在
TransactionAwareDataSourceProxy類。這是目標DataSource的代理,它封裝目標DataSource以添加對Spring托管事務(wù)的感知。

除非必須調(diào)用現(xiàn)有代碼并傳遞標準JDBC DataSource接口實現(xiàn),否則幾乎你不需要或不想使用這個類。在這種情況下,這段代碼可能是可用的,但參與了spring管理的事務(wù)。你可以使用前面提到的高級抽象來編寫新代碼。

聲明式事務(wù)管理

Spring Framework的聲明式事務(wù)管理是通過Spring面向方面編程(AOP)實現(xiàn)的。然而,由于事務(wù)方面的代碼是隨Spring Framework一起提供的,并且可以以樣板的方式使用,因此通常不需要理解AOP概念就可以有效地使用這些代碼。

僅僅告訴你使用@Transactional注解注釋的類,將@
EnableTransactionManagement添加到你的配置中,并期望你理解它是如何工作的,這是不夠的。為了加深理解,本節(jié)將在與事務(wù)相關(guān)的問題上下文中解釋Spring框架的聲明式事務(wù)基礎(chǔ)結(jié)構(gòu)的內(nèi)部工作原理。

關(guān)于Spring Framework的聲明性事務(wù)支持,需要掌握的最重要的概念是,這種支持是通過AOP代理啟用的,并且事務(wù)Advice是由元數(shù)據(jù)驅(qū)動的(目前是基于XML或注釋的)。AOP與事務(wù)元數(shù)據(jù)的組合產(chǎn)生了一個AOP代理,該代理使用TransactionInterceptor和適當(dāng)?shù)腡ransactionManager實現(xiàn)來圍繞方法調(diào)用驅(qū)動事務(wù)。

Spring Framework的TransactionInterceptor為命令式和反應(yīng)式編程模型提供事務(wù)管理。攔截器通過檢查方法返回類型來檢測所需的事務(wù)管理風(fēng)格。返回響應(yīng)式類型(如Publisher或Kotlin Flow(或其子類型))的方法符合響應(yīng)式事務(wù)管理的條件。包括void在內(nèi)的所有其他返回類型都使用代碼路徑進行強制事務(wù)管理。

事務(wù)管理會影響所需的事務(wù)管理器。強制事務(wù)需要PlatformTransactionManager,而響應(yīng)事務(wù)使用ReactiveTransactionManager實現(xiàn)。

@Transactional通常使用
PlatformTransactionManager管理的線程綁定事務(wù),將事務(wù)暴露給當(dāng)前執(zhí)行線程中的所有數(shù)據(jù)訪問操作。注意:這不會傳播到方法中新啟動的線程。


ReactiveTransactionManager管理的反應(yīng)事務(wù)使用Reactor上下文而不是線程本地屬性。因此,所有參與的數(shù)據(jù)訪問操作都需要在同一反應(yīng)管道中的同一Reactor上下文中執(zhí)行。

下圖顯示了在事務(wù)代理上調(diào)用方法的概念視圖:

圖片


  • 聲明性事務(wù)實現(xiàn)示例

考慮以下接口及其附屬實現(xiàn)。本例使用Foo和Bar類作為占位符,這樣你就可以專注于事務(wù)的使用,而不必關(guān)注特定的域模型。就本例而言,DefaultFooService類在每個實現(xiàn)方法的主體中拋出
UnsupportedOperationException實例是好的。該行為允許你查看正在創(chuàng)建的事務(wù),然后回滾以響應(yīng)UnsupportedOperationException實例。FooService接口如下所示:?

package x.y.service;


public interface FooService {


Foo getFoo(String fooName);


Foo getFoo(String fooName, String barName);


void insertFoo(Foo foo);


void updateFoo(Foo foo);


}

接口實現(xiàn):?

package x.y.service;


public class DefaultFooService implements FooService {


@Override
public Foo getFoo(String fooName) {
// ...
}


@Override
public Foo getFoo(String fooName, String barName) {
// ...
}


@Override
public void insertFoo(Foo foo) {
// ...
}


@Override
public void updateFoo(Foo foo) {
// ...
}
}

以FooService接口的前兩個方法getFoo(String)和getFoo為例配置事務(wù)攔截。?

<?xml versinotallow="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocatinotallow="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="fooService" class="x.y.service.DefaultFooService"/>


<!-- 事務(wù)通知配置->
<tx:advice id="txAdvice" transaction-manager="txManager">
<!-- 事務(wù)語義 -->
<tx:attributes>
<!-- 所有以get開頭的方法的事務(wù)都是只讀的-->
<tx:method name="get*" read-notallow="true"/>
<!-- 其它事務(wù)都使用事務(wù)的默認行為 -->
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="fooServiceOperation" expressinotallow="execution(* x.y.service.FooService.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>
</aop:config>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@rj-t42:1521:elvis"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</bean>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>

<aop:config/>定義確保txAdvice bean定義的事務(wù)建議在程序中的適當(dāng)點運行。首先,定義一個切入點,該切入點與FooService接口(fooServiceOperation)中定義的任何操作的執(zhí)行相匹配。然后使用advisor將切入點與txAdvice關(guān)聯(lián)起來。結(jié)果表明,在執(zhí)行fooServiceOperation時,運行由txAdvice定義的通知。

一個常見的要求是使整個服務(wù)層具有事務(wù)性。做到這一點的最佳方法是更改切入點表達式以匹配服務(wù)層中的任何操作。以下示例顯示了如何執(zhí)行此操作:?

<aop:config>
<aop:pointcut id="fooServiceMethods" expressinotallow="execution(* x.y.service.*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceMethods"/>
</aop:config>
  • 回滾聲明性事務(wù)

上面介紹了如何在應(yīng)用程序中以聲明方式為類(通常是服務(wù)層類)指定事務(wù)設(shè)置的基礎(chǔ)知識。本節(jié)描述如何在XML配置中以簡單的聲明式方式控制事務(wù)的回滾。

向Spring框架的事務(wù)基礎(chǔ)設(shè)施指示事務(wù)的工作要回滾的推薦方法是從當(dāng)前在事務(wù)上下文中執(zhí)行的代碼拋出異常。Spring框架的事務(wù)基礎(chǔ)結(jié)構(gòu)代碼在調(diào)用堆棧中彈出氣泡時捕獲任何未處理的異常,并確定是否將事務(wù)標記為回滾。

在默認配置中,Spring框架的事務(wù)基礎(chǔ)結(jié)構(gòu)代碼僅在運行時未檢查異常的情況下將事務(wù)標記為回滾。也就是說,當(dāng)拋出的異常是RuntimeException的實例或子類時。(默認情況下,錯誤實例也會導(dǎo)致回滾)。從事務(wù)方法拋出的已檢查異常不會導(dǎo)致默認配置中的回滾。

你可以通過指定回滾規(guī)則,準確地配置哪些Exception類型標記要回滾的事務(wù),包括已檢查的異常。

回滾規(guī)則

回滾規(guī)則確定在拋出給定異常時是否應(yīng)該回滾事務(wù),這些規(guī)則基于模式。模式可以是完全限定類名,也可以是異常類型(必須是Throwable的子類)的完全限定類名的子字符串,目前不支持通配符。例如,"
javax.servlet.ServletException"或"ServletException"將匹配javax.servlet.ServletException及其子類。

可以通過Rollback-for和no-rollback-for屬性在XML中配置回滾規(guī)則,這些屬性允許將模式指定為字符串。當(dāng)使用@Transactional時,可以通過rollbackFor/noRollbackFor和
rollbackForClassName/noRollbackForClassName屬性來配置回滾規(guī)則,這些屬性允許分別將模式指定為類引用或字符串。當(dāng)異常類型被指定為類引用時,其全限定名將用作模式。因此,@Transactional(rollbackFor = example.CustomException.class)等價于@Transactional(rollbackForClassName = "example.CustomException")。

以下XML片段演示了如何通過回滾for屬性提供異常模式,為已檢查的、特定于應(yīng)用程序的異常類型配置回滾:?

<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-notallow="true" rollback-for="NoProductInStockException"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

如果不希望在引發(fā)異常時回滾事務(wù),也可以指定“無回滾”規(guī)則。下面的示例告訴Spring Framework的事務(wù)基礎(chǔ)結(jié)構(gòu)即使面對未處理的
InstrumentNotFoundException也要提交附帶事務(wù):?

<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="updateStock" no-rollback-for="InstrumentNotFoundException"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>

當(dāng)Spring Framework的事務(wù)基礎(chǔ)設(shè)施捕捉到異常并參考配置的回滾規(guī)則以確定是否將事務(wù)標記為回滾時,最強的匹配規(guī)則獲勝。因此,在以下配置的情況下,
InstrumentNotFoundException以外的任何異常都會導(dǎo)致伴隨事務(wù)的回滾:?

<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="*" rollback-for="Throwable" no-rollback-for="InstrumentNotFoundException"/>
</tx:attributes>
</tx:advice>

你還可以通過編程方式指示所需的回滾。盡管這個過程很簡單,但它具有很強的侵入性,并將您的代碼緊密地耦合到Spring Framework的事務(wù)基礎(chǔ)設(shè)施。以下示例顯示了如何以編程方式指示所需的回滾:?

public void resolvePosition() {
try {
// some business logic...
} catch (NoProductInStockException ex) {
// 調(diào)用setRollbackOnly進行回滾設(shè)置
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}


責(zé)任編輯:武曉燕 來源: 實戰(zhàn)案例錦集
相關(guān)推薦

2009-09-29 09:44:52

Hibernate事務(wù)

2009-06-08 17:56:00

SpringJDBC事務(wù)

2023-10-08 08:28:10

Spring事務(wù)管理

2009-06-17 14:57:11

Spring事務(wù)管理

2009-06-30 16:57:42

Spring事務(wù)管理

2009-11-06 11:21:21

WCF事務(wù)管理器

2014-08-25 09:12:47

Spring事務(wù)管理

2010-03-29 13:34:15

ibmdwSpring

2010-03-23 08:46:40

Spring

2009-09-25 12:59:53

Hibernate事務(wù)

2009-02-11 13:08:29

事務(wù)提交事務(wù)管理Spring

2009-02-11 11:14:31

事務(wù)管理事務(wù)開始Spring

2009-06-17 14:43:47

Spring框架Spring事務(wù)管理

2023-04-02 13:57:04

Java自定義事務(wù)管理器

2025-02-08 10:56:18

2009-06-03 10:20:11

Hibernate事務(wù)管理配置

2009-09-23 17:48:00

Hibernate事務(wù)

2025-02-21 08:00:00

事務(wù)管理SpringBootJava

2009-12-24 16:01:17

redhat Linu

2023-05-06 07:29:49

Spring事務(wù)傳播
點贊
收藏

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

欧美不卡在线| 1313精品午夜理伦电影| 国产精品久99| 99久久自偷自偷国产精品不卡| 久久久全国免费视频| 精品人人人人| 欧美日韩精品一区二区在线播放| 嫩草影院中文字幕| 国产69精品久久app免费版| 国内精品国产成人| 秋霞午夜一区二区| 欧美爱爱小视频| 国产中文字幕一区二区三区| 日韩一区二区免费电影| caoporn超碰97| www中文字幕在线观看| 国产精品欧美久久久久一区二区| 国产免费一区二区| 91精品在线视频观看| 国产精品呻吟| 欧美黄色片视频| 国产麻豆a毛片| 猛男gaygay欧美视频| 精品少妇一区二区| 天堂在线一区二区三区| 亚洲www啪成人一区二区| 亚洲福利视频三区| 久久久无码中文字幕久...| 九九九伊在人线综合| 成人爱爱电影网址| 99免费在线观看视频| 中文字幕第一页在线播放| 亚洲欧美成人综合| 国外成人在线直播| 亚洲精品午夜久久久久久久| 91精品国产成人观看| 尤物yw午夜国产精品视频| 国产精品无码永久免费不卡| 99精品国产一区二区三区2021| 欧美精品色一区二区三区| 国产精品亚洲a| 亚洲国产欧美日本视频| 舔着乳尖日韩一区| 乱妇乱女熟妇熟女网站| heyzo中文字幕在线| 亚洲自拍另类综合| www.日本在线视频| 国产精品一区hongkong| 亚洲一区二区黄色| 99热亚洲精品| freexxx性亚洲精品| 国内自拍欧美激情| 91激情视频在线观看| 免费萌白酱国产一区二区三区| 日韩一二三区视频| 日本泡妞xxxx免费视频软件| 国产在线不卡一区二区三区| 欧美日韩国产成人在线91| 亚洲精品一二三四五区| 成人自拍视频网| 欧美视频一区二区三区四区| www亚洲成人| aa亚洲一区一区三区| 欧美欧美欧美欧美| 亚洲av无一区二区三区久久| 欧洲大片精品免费永久看nba| 日韩一级完整毛片| 手机免费看av片| 亚洲精品白浆高清| 在线电影中文日韩| 久久国产波多野结衣| 欧美国产综合| 97视频在线观看视频免费视频| 日日摸天天添天天添破| 日韩黄色片在线观看| 国产日韩欧美日韩大片| 性网爆门事件集合av| jlzzjlzz亚洲日本少妇| 欧美人与物videos另类| 免费大片黄在线| 亚洲线精品一区二区三区八戒| 欧美二区在线视频| 国产香蕉久久| 精品久久久久久综合日本欧美| 中文字幕 亚洲一区| 精品日韩在线| 美女久久久久久久久久久| 国产成人精品av久久| 国产婷婷精品| 国产欧美日韩最新| 偷拍精品一区二区三区| 久久精品一区二区三区四区| 色撸撸在线观看| 国模私拍一区二区国模曼安| 欧美亚洲综合久久| 国产乱国产乱老熟300部视频| 日韩精品丝袜美腿| 麻豆国产精品va在线观看不卡 | 亚洲午夜免费| 亚洲偷欧美偷国内偷| 疯狂试爱三2浴室激情视频| 在线观看一区| 成人性生交大片免费看视频直播 | 国产成人免费视频精品含羞草妖精| 久久6免费高清热精品| 可以在线观看av的网站| 麻豆成人免费电影| 亚洲性日韩精品一区二区| 一区不卡视频| 国产精品vvv| 欧美老肥妇做.爰bbww| 一区二区三区无码高清视频| 亚洲综合第一区| 悠悠资源网久久精品| 国产精品一区二区女厕厕| 亚洲经典一区二区三区| 国产精品美女久久久久久2018 | 婷婷伊人综合| 国产成人免费av| 刘亦菲毛片一区二区三区| 国产精品视频你懂的| 1024av视频| 高清欧美性猛交xxxx黑人猛| 久久精品国产一区| 日韩乱码一区二区三区| 99久久免费视频.com| 免费观看中文字幕| 国产91在线播放精品| 亚洲欧美中文日韩v在线观看| 久久久全国免费视频| 寂寞少妇一区二区三区| 亚洲精品一区二| 九九热线视频只有这里最精品| 亚洲精品白浆高清久久久久久| 九九视频在线观看| 国产一区视频导航| 免费久久久久久| 日韩毛片免费视频一级特黄| 在线性视频日韩欧美| 亚洲国产av一区二区三区| 99热99精品| 国产精品333| 免费日韩一区二区三区| 国内精品小视频在线观看| 精品人妻少妇嫩草av无码专区| 亚洲欧美在线视频| 在线能看的av网站| 99国内精品久久久久久久| 成人春色激情网| 国产在线观看a视频| 欧美麻豆精品久久久久久| 国产成人免费在线观看视频| 蜜臀a∨国产成人精品| 亚洲高清资源综合久久精品| 成人mm视频在线观看| 色狠狠av一区二区三区香蕉蜜桃| 最新黄色网址在线观看| 国产精品高潮呻吟| 97免费公开视频| 国产一区二区三区四区老人| 国产二区不卡| 亚洲最大网站| 在线观看久久久久久| 亚洲怡红院av| 亚洲伦理在线精品| 欧美xxxxx精品| 久久久夜夜夜| 在线免费一区| 伊人久久大香线蕉av超碰| 久久久影视精品| 国产在线观看黄| 欧美日韩高清在线| 久久久99精品| 久久美女艺术照精彩视频福利播放| 能在线观看的av网站| 91影院成人| 国产一区二区精品免费| 日韩电影大全网站| 久久亚洲精品一区二区| 天堂av资源网| 欧美日韩情趣电影| 久久成人在线观看| 久久精品日产第一区二区三区高清版| 欧美三级午夜理伦三级富婆| 欧美在线三级| 青青草久久网络| 日韩精品免费视频一区二区三区 | 成人免费网站www网站高清| 少妇激情综合网| 日本黄色不卡视频| 欧美日韩成人一区二区| 精品无码久久久久久久| 久久亚洲二区三区| 永久看看免费大片| 日韩精品91亚洲二区在线观看| 日本在线视频www色| 伊人久久大香线蕉| 成人区精品一区二区| 色豆豆成人网| 亚洲18私人小影院| 国产美女福利在线| 亚洲欧美中文日韩在线v日本| a在线观看视频| 91福利精品第一导航| 欧美被狂躁喷白浆精品| 欧美激情综合网| 精品中文字幕在线播放| 国产一区二区网址| 在线免费观看视频黄| 一区二区高清| 中文字幕在线中文| 三上亚洲一区二区| 六月婷婷久久| www.豆豆成人网.com| 成人av在线网址| 国产一区精品福利| 国产www精品| аⅴ资源天堂资源库在线| 欧美大奶子在线| 午夜免费福利在线观看| 国产午夜精品免费一区二区三区| 欧美一区,二区| 日韩欧美一级二级三级| 国产精品毛片一区二区在线看舒淇| 久久精品色综合| 国产精品成人aaaaa网站| а√天堂8资源在线| 久久夜色精品国产欧美乱| 国产主播福利在线| 日韩精品视频在线观看网址| 亚洲第一第二区| 91精品综合久久久久久| 一区二区三区黄色片| 在线观看欧美日本| 国产一级一级国产| 欧美性xxxx极品hd欧美风情| 久久综合亚洲色hezyo国产| 亚洲品质自拍视频网站| 青青操在线视频观看| 1000精品久久久久久久久| 我要看一级黄色录像| 国产精品美女www爽爽爽| av电影在线不卡| 国产日韩欧美不卡在线| 久久成人激情视频| 中文字幕精品一区二区精品绿巨人 | 日韩久久精品一区| 精品二区在线观看| 精品久久人人做人人爰| 天堂av资源网| 亚洲欧美日韩视频一区| 黄色毛片在线看| 激情久久五月天| 国内精品久久久久影院优 | 国产一区二区亚洲| 日韩视频在线播放| 日韩电影免费网址| 国产精品无码乱伦| 亚洲欧美亚洲| 精品少妇人妻av免费久久洗澡| 亚洲日本免费| 可以在线看的黄色网址| 久久精品国产免费看久久精品| 三日本三级少妇三级99| 国产成人综合在线观看| 日韩成人av一区二区| 久久免费偷拍视频| 国产精品18在线| 亚洲国产精品一区二区www在线 | 欧美日韩久久久一区| 国产精品爽爽久久| 337p亚洲精品色噜噜噜| 黄片毛片在线看| 亚洲天堂男人的天堂| 日本在线视频站| 欧美激情一区二区久久久| 在线男人天堂| 成人国产在线激情| 欧美一级三级| 在线国产伦理一区| 亚洲黄色精品| 午夜啪啪小视频| 99久久精品国产毛片| 亚洲图片第一页| 亚洲成人av免费| 亚洲中文一区二区三区| 精品sm捆绑视频| 午夜看片在线免费| 91干在线观看| 人人爱人人干婷婷丁香亚洲| 久久99久久精品国产| 91精品啪在线观看国产18| 人人妻人人添人人爽欧美一区| 老司机一区二区| 人妻在线日韩免费视频| 亚洲欧美日韩国产中文在线| 久久狠狠高潮亚洲精品| 91精品国产欧美一区二区18| 国产 日韩 欧美 精品| 日韩视频―中文字幕| 玛雅亚洲电影| 国产精品青青草| 久久久久国产| 黄色片在线免费| 99免费精品在线| 久久久久久久久久久久久久久久久 | 久久久久久www| 久久国产乱子精品免费女| 少妇户外露出[11p]| 亚洲综合激情网| 国产女主播福利| 日韩中文字幕在线视频播放| 中文日产幕无线码一区二区| 99精品欧美一区二区三区| 成人在线电影在线观看视频| 无码人妻精品一区二区三区在线| 国产黄人亚洲片| 9999热视频| 欧美日韩中字一区| 国产在线一在线二| 78m国产成人精品视频| 中文字幕日韩高清在线| 最近中文字幕免费mv| 麻豆精品国产传媒mv男同| 黄色三级生活片| 在线免费观看日本欧美| 青青草在线免费观看| 97香蕉久久夜色精品国产| 91精品尤物| 久久艹国产精品| 成人免费黄色大片| 精品视频久久久久| 欧美va亚洲va| 牛牛精品视频在线| 成人动漫视频在线观看完整版 | 久久国产精品色av免费看| 欧美图片激情小说| 成人网页在线观看| www.av视频在线观看| 精品国产乱码久久| 678在线观看视频| 国产欧美韩日| 国产精品久久久免费| 真人bbbbbbbbb毛片| 黑人巨大精品欧美一区二区免费| 日本成人动漫在线观看| 97人人模人人爽人人喊中文字 | 亚洲第一精品区| 国产美女精品人人做人人爽| 精品国产视频一区二区三区| 555www色欧美视频| 中国av在线播放| 国产精品日韩一区二区三区| 亚洲三级影院| 亚洲精品国产熟女久久久| 欧美午夜理伦三级在线观看| 91亚洲精选| 99re视频在线播放| 亚洲全部视频| 国产精品毛片一区二区| 欧美无砖砖区免费| 午夜小视频在线观看| 精品久久中出| 欧美综合二区| 成人欧美一区二区三区黑人一| 制服丝袜亚洲精品中文字幕| 性欧美猛交videos| 欧美精品免费观看二区| 免费观看成人av| 中文字幕影音先锋| 日韩精品在线视频美女| 成人在线免费av| 欧美又粗又长又爽做受| 久久在线观看免费| 国产精品一区二区黑人巨大| 欧美极品欧美精品欧美视频 | 精品人人人人| 91人人澡人人爽人人精品| 亚洲欧美欧美一区二区三区| 香蕉视频网站在线| 成人看片人aa| 久久av一区二区三区| 久久爱一区二区| 国产视频自拍一区| 国产精品视频一区视频二区| 欧美一级免费播放| 一区精品在线播放| 亚洲 欧美 精品| 91视频最新| 日韩电影在线免费看| 不卡的免费av| 久久精品亚洲精品| 欧美日韩爱爱| 中文字幕1区2区| 欧美无砖专区一中文字| 狠狠操一区二区三区| 熟女熟妇伦久久影院毛片一区二区| 91免费版在线| 黄色小视频免费观看| 国产免费成人av|