3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程G

發布時間:2025/3/21 java 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程G 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第?5?章?Spring AOP: Spring之面向方面編程

5.1.?概念

面向方面編程?(AOP) 提供從另一個角度來考慮程序結構以完善面向對象編程(OOP)。 面向對象將應用程序分解成 各個層次的對象,而AOP將程序分解成各個方面?或者說?關注點?。 這使得可以模塊化諸如事務管理等這些橫切多個對象的關注點。(這些關注點術語稱作橫切關注點。)

Spring的一個關鍵組件就是AOP框架。 Spring IoC容器(BeanFactory 和ApplicationContext)并不依賴于AOP, 這意味著如果你不需要使用,AOP你可以不用,AOP完善了Spring IoC,使之成為一個有效的中間件解決方案,。

AOP在Spring中的使用:

  • 提供聲明式企業服務,特別是作為EJB聲明式服務的替代品。這些服務中最重要的是?聲明式事務管理,這個服務建立在Spring的事務管理抽象之上。

  • 允許用戶實現自定義的方面,用AOP完善他們的OOP的使用。

這樣你可以把Spring AOP看作是對Spring的補充,它使得Spring不需要EJB就能提供聲明式事務管理;或者 使用Spring AOP框架的全部功能來實現自定義的方面。

如果你只使用通用的聲明式服務或者預先打包的聲明式中間件服務如pooling,你可以不直接使用 Spring AOP,并且跳過本章的大部分內容.

5.1.1.?AOP概念

讓我們從定義一些重要的AOP概念開始。這些術語不是Spring特有的。不幸的是,Spring的術語 不是特別地直觀。而且,如果Spring使用自己的術語,這將使人更加迷惑。

  • 方面(Aspect): 一個關注點的模塊化,這個關注點實現可能 另外橫切多個對象。事務管理是J2EE應用中一個很好的橫切關注點例子。方面用Spring的 Advisor或攔截器實現。

  • 連接點(Joinpoint): 程序執行過程中明確的點,如方法的調 用或特定的異常被拋出。

  • 通知(Advice): 在特定的連接點,AOP框架執行的動作。各種類 型的通知包括“around”、“before”和“throws”通知。通知類型將在下面討論。許多AOP框架 包括Spring都是以攔截器做通知模型,維護一個“圍繞”連接點的攔截器 鏈。

  • 切入點(Pointcut): 指定一個通知將被引發的一系列連接點 的集合。AOP框架必須允許開發者指定切入點:例如,使用正則表達式。

  • 引入(Introduction): 添加方法或字段到被通知的類。 Spring允許引入新的接口到任何被通知的對象。例如,你可以使用一個引入使任何對象實現?IsModified接口,來簡化緩存。

  • 目標對象(Target Object): 包含連接點的對象。也被稱作?被通知被代理對象。

  • AOP代理(AOP Proxy): AOP框架創建的對象,包含通知。 在Spring中,AOP代理可以是JDK動態代理或者CGLIB代理。

  • 織入(Weaving): 組裝方面來創建一個被通知對象。這可以在編譯時 完成(例如使用AspectJ編譯器),也可以在運行時完成。Spring和其他純Java AOP框架一樣, 在運行時完成織入。

各種通知類型包括:

  • Around通知: 包圍一個連接點的通知,如方法調用。這是最 強大的通知。Aroud通知在方法調用前后完成自定義的行為。它們負責選擇繼續執行連接點或通過 返回它們自己的返回值或拋出異常來短路執行。

  • Before通知: 在一個連接點之前執行的通知,但這個通知 不能阻止連接點前的執行(除非它拋出一個異常)。

  • Throws通知: 在方法拋出異常時執行的通知。Spring提供 強類型的Throws通知,因此你可以書寫代碼捕獲感興趣的異常(和它的子類),不需要從Throwable 或Exception強制類型轉換。

  • After returning通知: 在連接點正常完成后執行的通知, 例如,一個方法正常返回,沒有拋出異常。

Around通知是最通用的通知類型。大部分基于攔截的AOP框架,如Nanning和JBoss4,只提供 Around通知。

如同AspectJ,Spring提供所有類型的通知,我們推薦你使用最為合適的通知類型來實現需 要的行為。例如,如果只是需要用一個方法的返回值來更新緩存,你最好實現一個after returning 通知而不是around通知,雖然around通知也能完成同樣的事情。使用最合適的通知類型使編程模型變 得簡單,并能減少潛在錯誤。例如你不需要調用在around通知中所需使用的的MethodInvocation的?proceed()方法,因此就調用失敗。

切入點的概念是AOP的關鍵,使AOP區別于其它使用攔截的技術。切入點使通知獨立于OO的 層次選定目標。例如,提供聲明式事務管理的around通知可以被應用到跨越多個對象的一組方法上。 因此切入點構成了AOP的結構要素。

5.1.2.?Spring AOP的功能

Spring AOP用純Java實現。它不需要特別的編譯過程。Spring AOP不需要控制類裝載器層次, 因此適用于J2EE web容器或應用服務器。

Spring目前支持攔截方法調用。成員變量攔截器沒有實現,雖然加入成員變量攔截器支持并不破壞 Spring AOP核心API。

成員變量攔截器在違反OO封裝原則方面存在爭論。我們不認為這在應用程序開發中是明智的。如 果你需要使用成員變量攔截器,考慮使用AspectJ。

Spring提供代表切入點或各種通知類型的類。Spring使用術語advisor來 表示代表方面的對象,它包含一個通知和一個指定特定連接點的切入點。

各種通知類型有MethodInterceptor?(來自AOP聯盟的攔截器API)和定義在org.springframework.aop包中的 通知接口。所有通知必須實現org.aopalliance.aop.Advice標簽接口。 取出就可使用的通知有?MethodInterceptor、?ThrowsAdvice、?BeforeAdvice和?AfterReturningAdvice。我們將在下面詳細討論這些通知類型。

Spring實現了AOP聯盟的攔截器接口(?http://www.sourceforge.net/projects/aopalliance). Around通知必須實現AOP聯盟的org.aopalliance.intercept.MethodInterceptor?接口。這個接口的實現可以運行在Spring或其他AOP聯盟兼容的實現中。目前JAC實現了AOP聯盟的接 口,Nanning和Dynaop可能在2004年早期實現。

Spring實現AOP的途徑不同于其他大部分AOP框架。它的目標不是提供及其完善的AOP實現( 雖然Spring AOP非常強大);而是提供一個和Spring IoC緊密整合的AOP實現,幫助解決企業應用 中的常見問題。因此,例如Spring AOP的功能通常是和Spring IoC容器聯合使用的。AOP通知是用普通 的bean定義語法來定義的(雖然可以使用"autoproxying"功能);通知和切入點本身由Spring IoC 管理:這是一個重要的其他AOP實現的區別。有些事使用Spring AOP是無法容易或高效地實現,比如通知 非常細粒度的對象。這種情況AspectJ可能是最合適的選擇。但是,我們的經驗是Spring針對J2EE應 用中大部分能用AOP解決的問題提供了一個優秀的解決方案。

5.1.3.?Spring中AOP代理

Spring默認使用JDK動態代理實現AOP代理。這使得任何接口或 接口的集合能夠被代理。

Spring也可以是CGLIB代理。這可以代理類,而不是接口。如果業務對象沒有實現一個接口, CGLIB被默認使用。但是作為一針對接口編程而不是類編程良好實踐,業務對象 通常實現一個或多個業務接口。

也可以強制使用CGLIB:我們將在下面討論,并且會解釋為什么你會要這么做。

Spring 1.0后,Spring可能提供額外的AOP代理的類型,包括完全生成的類。這將不會影響 編程模型。

5.2.?Spring的切入點

讓我們看看Spring如何處理切入點這個重要的概念。

5.2.1.?概念

Spring的切入點模型能夠使切入點獨立于通知類型被重用。 同樣的切入點有可能接受不同的 通知。

org.springframework.aop.Pointcut?接口是重要的接口, 用來指定通知到特定的類和方法目標。完整的接口定義如下:

public interface Pointcut {ClassFilter getClassFilter();MethodMatcher getMethodMatcher();}

將Pointcut接口分成兩個部分有利于重用類和方法的匹配部分,并且組合細粒度的 操作(如和另一個方法匹配器執行一個”并“的操作)。

ClassFilter接口被用來將切入點限制到一個給定的目標類的集合。 如果matches()永遠返回true,所有的目標類都將被匹配。

public interface ClassFilter {boolean matches(Class clazz); }

MethodMatcher接口通常更加重要。完整的接口如下:

public interface MethodMatcher {boolean matches(Method m, Class targetClass);boolean isRuntime();boolean matches(Method m, Class targetClass, Object[] args); }

matches(Method, Class)?方法被用來測試這個切入點是否匹 配目標類的給定方法。這個測試可以在AOP代理創建的時候執行,避免在所有方法調用時都需要進行 測試。如果2個參數的匹配方法對某個方法返回true,并且MethodMatcher的?isRuntime()也返回true,那么3個參數的匹配方法將在每次方法調用的時候被調用。這使 切入點能夠在目標通知被執行之前立即查看傳遞給方法調用的參數。

大部分MethodMatcher都是靜態的,意味著isRuntime()方法 返回false。這種情況下3個參數的匹配方法永遠不會被調用。

如果可能,盡量使切入點是靜態的,使當AOP代理被創建時,AOP框架能夠緩存切入點的 測試結果。

5.2.2.?切入點的運算

Spring支持的切入點的運算有: 值得注意的是??和?

并表示只要任何一個切入點匹配的方法。

交表示兩個切入點都要匹配的方法。

并通常比較有用。

切入點可以用org.springframework.aop.support.Pointcuts?類的靜態方法來組合,或者使用同一個包中的ComposablePointcut類。

5.2.3.?實用切入點實現

Spring提供幾個實用的切入點實現。一些可以直接使用。另一些需要子類化來實現應用相 關的切入點。

5.2.3.1.?靜態切入點

靜態切入點只基于方法和目標類,而不考慮方法的參數。靜態切入點足夠滿足大多數情況 的使用。Spring可以只在方法第一次被調用的時候計算靜態切入點,不需要在每次方法調用 的時候計算。

讓我們看一下Spring提供的一些靜態切入點的實現。

5.2.3.1.1.?正則表達式切入點

一個很顯然的指定靜態切入點的方法是正則表達式。除了Spring以外,其它的AOP框架也實 現了這一點。org.springframework.aop.support.RegexpMethodPointcut?是一個通用的正則表達式切入點,它使用Perl 5的正則表達式的語法。

使用這個類你可以定義一個模式的列表。如果任何一個匹配,那個切入點將被計算成 true。(所以結果相當于是這些切入點的并集)。

用法如下:

<bean id="settersAndAbsquatulatePointcut" class="org.springframework.aop.support.RegexpMethodPointcut"><property name="patterns"><list><value>.*get.*</value><value>.*absquatulate</value></list></property> </bean>

RegexpMethodPointcut一個實用子類,?RegexpMethodPointcutAdvisor, 允許我們同時引用一個通知。 (記住通知可以是攔截器,before通知,throws通知等等。)這簡化了bean的裝配,因為一個bean 可以同時當作切入點和通知,如下所示:

<bean id="settersAndAbsquatulateAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor"><property name="interceptor"><ref local="beanNameOfAopAllianceInterceptor"/></property><property name="patterns"><list><value>.*get.*</value><value>.*absquatulate</value></list></property> </bean>

RegexpMethodPointcutAdvisor可以用于任何通知類型。

RegexpMethodPointcut類需要Jakarta ORO正則表達式包。
5.2.3.1.2.?屬性驅動的切入點

一類重要的靜態切入點是元數據驅動的 切入點。 它使用元數據屬性的值:典型地,使用源代碼級元數據。

5.2.3.2.?動態切入點

動態切入點的演算代價比靜態切入點高的多。它們不僅考慮靜態信息,還要考慮方法的?參數。這意味著它們必須在每次方法調用的時候都被計算;并且不能緩存結果 ,因為參數是變化的。

這個主要的例子就是控制流切入點。

5.2.3.2.1.?控制流切入點

Spring的控制流切入點概念上和AspectJ的cflow?切入點一致,雖然沒有其那么強大(當前沒有辦法指定一個切入點在另一個切入點后執行)。 一個控制流切入點匹配當前的調用棧。例如,連接點被?com.mycompany.web包或者?SomeCaller類中一個方法調用的時候,觸發該切入點??刂屏髑腥朦c的實現類是?org.springframework.aop.support.ControlFlowPointcut。

注意

控制流切入點是動態切入點中計算代價最高的。Java 1.4中, 它的運行開銷是其他動態切入點的5倍。在Java 1.3中則超過10倍。

5.2.4.?切入點超類

Spring提供非常實用的切入點的超類幫助你實現你自己的切入點。

因為靜態切入點非常實用,你很可能子類化StaticMethodMatcherPointcut,如下所示。 這只需要實現一個抽象方法(雖然可以改寫其它的方法來自定義行為)。

class TestStaticPointcut extends StaticMethodMatcherPointcut {public boolean matches(Method m, Class targetClass) {// return true if custom criteria match} }

當然也有動態切入點的超類。

Spring 1.0 RC2或以上版本,自定義切入點可以用于任何類型的通知。

5.2.5.?自定義切入點

因為Spring中的切入點是Java類,而不是語言特性(如AspectJ),因此可以定義自定義切入點, 無論靜態還是動態。但是,沒有直接支持用AspectJ語法書寫的復雜的切入點表達式。不過, Spring的自定義切入點也可以任意的復雜。

后續版本的Spring可能象JA一樣C提供”語義切入點“的支持:例如,“所有更改目標對象 實例變量的方法”。

5.3.?Spring的通知類型

現在讓我們看看Spring AOP是如何處理通知的。

5.3.1.?通知的生命周期

Spring的通知可以跨越多個被通知對象共享,或者每個被通知對象有自己的通知。這分別對應?per-classper-instance?通知。

Per-class通知使用最為廣泛。它適合于通用的通知,如事務adisor。它們不依賴被代理 的對象的狀態,也不添加新的狀態。它們僅僅作用于方法和方法的參數。

Per-instance通知適合于導入,來支持混入(mixin)。在這種情況下,通知添加狀態到 被代理的對象。

可以在同一個AOP代理中混合使用共享和per-instance通知。

5.3.2.?Spring中通知類型

Spring提供幾種現成的通知類型并可擴展提供任意的通知類型。讓我們看看基本概念和 標準的通知類型。

5.3.2.1.?Interception around advice

Spring中最基本的通知類型是interception around advice?.

Spring使用方法攔截器的around通知是和AOP聯盟接口兼容的。實現around通知的 類需要實現接口MethodInterceptor:

public interface MethodInterceptor extends Interceptor {Object invoke(MethodInvocation invocation) throws Throwable; }

invoke()方法的MethodInvocation?參數暴露將被調用的方法、目標連接點、AOP代理和傳遞給被調用方法的參數。?invoke()方法應該返回調用的結果:連接點的返回值。

一個簡單的MethodInterceptor實現看起來如下:

public class DebugInterceptor implements MethodInterceptor {public Object invoke(MethodInvocation invocation) throws Throwable {System.out.println("Before: invocation=[" + invocation + "]");Object rval = invocation.proceed();System.out.println("Invocation returned");return rval;} }

注意MethodInvocation的proceed()方法的調用。 這個調用會應用到目標連接點的攔截器鏈中的每一個攔截器。大部分攔截器會調用這個方法,并返回它的返回值。但是, 一個MethodInterceptor,和任何around通知一樣,可以返回不同的值或者拋出一個異常,而 不調用proceed方法。但是,沒有好的原因你要這么做。

MethodInterceptor提供了和其他AOP聯盟的兼容實現的交互能力。這一節下面 要討論的其他的通知類型實現了AOP公共的概念,但是以Spring特定的方式。雖然使用特定 通知類型有很多優點,但如果你可能需要在其他的AOP框架中使用,請堅持使用MethodInterceptor around通知類型。注意目前切入點不能和其它框架交互操作,并且AOP聯盟目前也沒有定義切入 點接口。

5.3.2.2.?Before通知

Before通知是一種簡單的通知類型。 這個通知不需要一個MethodInvocation對象,因為它只在進入一個方法 前被調用。

Before通知的主要優點是它不需要調用proceed()?方法, 因此沒有無意中忘掉繼續執行攔截器鏈的可能性。

MethodBeforeAdvice接口如下所示。 (Spring的API設計允許成員變量的before通知,雖然一般的對象都可以應用成員變量攔截,但Spring 有可能永遠不會實現它)。

public interface MethodBeforeAdvice extends BeforeAdvice {void before(Method m, Object[] args, Object target) throws Throwable; }

注意返回類型是void。 Before通知可以在連接點執行之前 插入自定義的行為,但是不能改變返回值。如果一個before通知拋出一個異常,這將中斷攔截器 鏈的進一步執行。這個異常將沿著攔截器鏈后退著向上傳播。如果這個異常是unchecked的,或者 出現在被調用的方法的簽名中,它將會被直接傳遞給客戶代碼;否則,它將被AOP代理包裝到一個unchecked 的異常里。

下面是Spring中一個before通知的例子,這個例子計數所有正常返回的方法:

public class CountingBeforeAdvice implements MethodBeforeAdvice {private int count;public void before(Method m, Object[] args, Object target) throws Throwable {++count;}public int getCount() { return count; } } Before通知可以被用于任何類型的切入點。

5.3.2.3.?Throws通知

如果連接點拋出異常,Throws通知 在連接點返回后被調用。Spring提供強類型的throws通知。注意這意味著?org.springframework.aop.ThrowsAdvice接口不包含任何方法: 它是一個標記接口,標識給定的對象實現了一個或多個強類型的throws通知方法。這些方法形式 如下:

afterThrowing([Method], [args], [target], subclassOfThrowable)

只有最后一個參數是必需的。 這樣從一個參數到四個參數,依賴于通知是否對方法和方法 的參數感興趣。下面是throws通知的例子。

如果拋出RemoteException異常(包括子類), 這個通知會被調用

public class RemoteThrowsAdvice implements ThrowsAdvice {public void afterThrowing(RemoteException ex) throws Throwable {// Do something with remote exception} }

如果拋出ServletException異常, 下面的通知會被調用。和上面的通知不一樣,它聲明了四個參數,所以它可以訪問被調用的方法,方法的參數 和目標對象:

public static class ServletThrowsAdviceWithArguments implements ThrowsAdvice {public void afterThrowing(Method m, Object[] args, Object target, ServletException ex) {// Do something will all arguments} }

最后一個例子演示了如何在一個類中使用兩個方法來同時處理?RemoteException和ServletException?異常。任意個數的throws方法可以被組合在一個類中。

public static class CombinedThrowsAdvice implements ThrowsAdvice {public void afterThrowing(RemoteException ex) throws Throwable {// Do something with remote exception}public void afterThrowing(Method m, Object[] args, Object target, ServletException ex) {// Do something will all arguments} } Throws通知可被用于任何類型的切入點。

5.3.2.4.?After Returning通知

Spring中的after returning通知必須實現?org.springframework.aop.AfterReturningAdvice?接口,如下所示:

public interface AfterReturningAdvice extends Advice {void afterReturning(Object returnValue, Method m, Object[] args, Object target) throws Throwable; }

After returning通知可以訪問返回值(不能改變)、被調用的方法、方法的參數和 目標對象。

下面的after returning通知統計所有成功的沒有拋出異常的方法調用:

public class CountingAfterReturningAdvice implements AfterReturningAdvice {private int count;public void afterReturning(Object returnValue, Method m, Object[] args, Object target) throws Throwable {++count;}public int getCount() {return count;} }

這方法不改變執行路徑。如果它拋出一個異常,這個異常而不是返回值將被沿著攔截器鏈 向上拋出。

After returning通知可被用于任何類型的切入點。

5.3.2.5.?Introduction通知

Spring將introduction通知看作一種特殊類型的攔截通知。

Introduction需要實現IntroductionAdvisor, 和IntroductionInterceptor接口:

public interface IntroductionInterceptor extends MethodInterceptor {boolean implementsInterface(Class intf); }

繼承自AOP聯盟MethodInterceptor接口的?invoke()方法必須實現導入:也就是說,如果被調用的方法是在 導入的接口中,導入攔截器負責處理這個方法調用,它不能調用proceed()?方法。

Introduction通知不能被用于任何切入點,因為它只能作用于類層次上,而不是方法。 你可以只用InterceptionIntroductionAdvisor來實現導入通知,它有下面的方法:

public interface InterceptionIntroductionAdvisor extends InterceptionAdvisor {ClassFilter getClassFilter();IntroductionInterceptor getIntroductionInterceptor();Class[] getInterfaces(); }

這里沒有MethodMatcher,因此也沒有和導入通知關聯的?切入點。只有類過濾是合乎邏輯的。

getInterfaces()方法返回advisor導入的接口。

讓我們看看一個來自Spring測試套件中的簡單例子。我們假設想要導入下面的接口到一個 或者多個對象中:

public interface Lockable {void lock();void unlock();boolean locked(); }

這個例子演示了一個mixin。我們想要能夠 將被通知對象類型轉換為Lockable,不管它們的類型,并且調用lock和unlock方法。如果我們調用 lock()方法,我們希望所有setter方法拋出LockedException異常。 這樣我們能添加一個方面使的對象不可變,而它們不需要知道這一點:這是一個很好的AOP例 子。

首先,我們需要一個做大量轉化的IntroductionInterceptor。 在這里,我們繼承?org.springframework.aop.support.DelegatingIntroductionInterceptor?實用類。我們可以直接實現IntroductionInterceptor接口,但是大多數情況下?DelegatingIntroductionInterceptor是最合適的。

DelegatingIntroductionInterceptor的設計是將導入 委托到真正實現導入接口的接口,隱藏完成這些工作的攔截器。委托可以使用構造方法參數 設置到任何對象中;默認的委托就是自己(當無參數的構造方法被使用時)。這樣在下面的 例子里,委托是DelegatingIntroductionInterceptor的子類?LockMixin。給定一個委托(默認是自身)的?DelegatingIntroductionInterceptor實例尋找被這個委托(而不 是IntroductionInterceptor)實現的所有接口,并支持它們中任何一個導入。子類如?LockMixin也可能調用suppressInterflace(Class intf)?方法隱藏不應暴露的接口。然而,不管IntroductionInterceptor?準備支持多少接口,IntroductionAdvisor將控制哪個接口將被實際 暴露。一個導入的接口將隱藏目標的同一個接口的所有實現。

這樣,LockMixin繼承DelegatingIntroductionInterceptor?并自己實現Lockable。父類自動選擇支持導入的Lockable,所以我們不需要指定它。 用這種方法我們可以導入任意數量的接口。

注意locked實例變量的使用。這有效地添加額外的狀態到目標 對象。

public class LockMixin extends DelegatingIntroductionInterceptor implements Lockable {private boolean locked;public void lock() {this.locked = true;}public void unlock() {this.locked = false;}public boolean locked() {return this.locked;}public Object invoke(MethodInvocation invocation) throws Throwable {if (locked() && invocation.getMethod().getName().indexOf("set") == 0)throw new LockedException();return super.invoke(invocation);}}

通常不要需要改寫invoke()方法:實現?DelegatingIntroductionInterceptor就足夠了,如果是導入的方法,?DelegatingIntroductionInterceptor實現會調用委托方法, 否則繼續沿著連接點處理。在現在的情況下,我們需要添加一個檢查:在上鎖 狀態下不能調用setter方法。

所需的導入advisor是很簡單的。只有保存一個獨立的?LockMixin實例,并指定導入的接口,在這里就是?Lockable。一個稍微復雜一點例子可能需要一個導入攔截器(可以 定義成prototype)的引用:在這種情況下,LockMixin沒有相關配置,所以我們簡單地 使用new來創建它。

public class LockMixinAdvisor extends DefaultIntroductionAdvisor {public LockMixinAdvisor() {super(new LockMixin(), Lockable.class);} }

我們可以非常簡單地使用這個advisor:它不需要任何配置。(但是,有一點?必要的:就是不可能在沒有IntroductionAdvisor?的情況下使用IntroductionInterceptor。) 和導入一樣,通常 advisor必須是針對每個實例的,并且是有狀態的。我們會有不同的的LockMixinAdvisor?每個被通知對象,會有不同的LockMixin。 advisor組成了被通知對象的狀態的一部分。

和其他advisor一樣,我們可以使用?Advised.addAdvisor()?方法以編程地方式使用這種advisor,或者在XML中配置(推薦這種方式)。 下面將討論所有代理創建,包括“自動代理創建者”,選擇代理創建以正確地處理導入和有狀態的混入。

5.4.?Spring中的advisor

在Spring中,一個advisor就是一個aspect的完整的模塊化表示。 一般地,一個advisor包括通知和切入點。

撇開導入這種特殊情況,任何advisor可被用于任何通知。?org.springframework.aop.support.DefaultPointcutAdvisor?是最通用的advisor類。例如,它可以和MethodInterceptor、?BeforeAdvice或者ThrowsAdvice一起使 用。

Spring中可以將advisor和通知混合在一個AOP代理中。例如,你可以在一個代理配置中 使用一個對around通知、throws通知和before通知的攔截:Spring將自動創建必要的攔截器鏈。

5.5.?用ProxyFactoryBean創建AOP代理

如果你在為你的業務對象使用Spring的IoC容器(例如ApplicationContext或者BeanFactory), 你應該會或者你愿意會使用Spring的aop FactoryBean(記住,factory bean引入了一個間接層, 它能創建不同類型的對象).

在spring中創建AOP proxy的基本途徑是使用org.springframework.aop.framework.ProxyFactoryBean. 這樣可以對pointcut和advice作精確控制。但是如果你不需要這種控制,那些簡單的選擇可能更適合你。

5.5.1.?基本概要

ProxyFactoryBean,和其他Spring的?FactoryBean實現一樣,引入一個間接的層次。如果你 定義一個名字為foo的ProxyFactoryBean, 引用foo的對象所看到的不是ProxyFactoryBean?實例本身,而是由實現ProxyFactoryBean的類的?getObject()方法所創建的對象。這個方法將創建一個包裝了目標對象 的AOP代理。

使用ProxyFactoryBean或者其他IoC可知的類來創建AOP代理 的最重要的優點之一是IoC可以管理通知和切入點。這是一個非常的強大的功能,能夠實 現其他AOP框架很難實現的特定的方法。例如,一個通知本身可以引用應用對象(除了目標對象, 它在任何AOP框架中都可以引用應用對象),這完全得益于依賴注入所提供的可插入性。

5.5.2.?JavaBean的屬性

類似于Spring提供的絕大部分FactoryBean實現一樣,?ProxyFactoryBean也是一個javabean,我們可以利用它的屬性來:

  • 指定你將要代理的目標

  • 指定是否使用CGLIB

一些關鍵屬性來自org.springframework.aop.framework.ProxyConfig?:它是所有AOP代理工廠的父類。這些關鍵屬性包括:

  • proxyTargetClass: 如果我們應該代理目標類, 而不是接口,這個屬性的值為true。如果這是true,我們需要使用CGLIB。

  • optimize: 是否使用強優化來創建代理。不要使用 這個設置,除非你了解相關的AOP代理是如何處理優化的。目前這只對CGLIB代理有效;對JDK 動態代理無效(默認)。

  • frozen: 是否禁止通知的改變,一旦代理工廠已經配置。 默認是false。

  • exposeProxy: 當前代理是否要暴露在ThreadLocal中, 以便它可以被目標對象訪問。(它可以通過MethodInvocation得到,不需要ThreadLocal)。 如果一個目標需要獲得它的代理并且exposeProxy的值是ture,可以使用?AopContext.currentProxy()方法。

  • aopProxyFactory: 所使用的AopProxyFactory具體實現。 這個參數提供了一條途徑來定義是否使用動態代理、CGLIB還是其他代理策略。默認實現將適當地選擇動態 代理或CGLIB。一般不需要使用這個屬性;它的意圖是允許Spring 1.1使用另外新的代理類型。

其他ProxyFactoryBean特定的屬性包括:

  • proxyInterfaces: 接口名稱的字符串數組。如果這個 沒有提供,CGLIB代理將被用于目標類。

  • interceptorNames: Advisor、interceptor或其他 被應用的通知名稱的字符串數組。順序是很重要的。這里的名稱是當前工廠中bean的名稱,包 括來自祖先工廠的bean的名稱。

  • singleton: 工廠是否返回一個單獨的對象,無論?getObject()被調用多少次。許多FactoryBean?的實現提供這個方法。默認值是true。如果你想要使用有狀態的通知--例如,用于有狀態的 mixin--將這個值設為false,使用prototype通知。

5.5.3.?代理接口

讓我們來看一個簡單的ProxyFactoryBean的實際例子。這個例子涉及到 :

  • 一個將被代理的目標bean,在這個例子里,這個bean的被定義為"personTarget".

  • 一個advisor和一個interceptor來提供advice.

  • 一個AOP代理bean定義,該bean指定目標對象(這里是personTarget bean), 代理接口,和使用的advice.

<bean id="personTarget" class="com.mycompany.PersonImpl"><property name="name"><value>Tony</value></property><property name="age"><value>51</value></property> </bean><bean id="myAdvisor" class="com.mycompany.MyAdvisor"><property name="someProperty"><value>Custom string property value</value></property> </bean><bean id="debugInterceptor" class="org.springframework.aop.interceptor.NopInterceptor"> </bean><bean id="person" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces"><value>com.mycompany.Person</value></property><property name="target"><ref local="personTarget"/></property><property name="interceptorNames"><list><value>myAdvisor</value><value>debugInterceptor</value></list></property> </bean>

請注意:person bean的interceptorNames屬性提供一個String列表, 列出的是該ProxyFactoryBean使用的,在當前bean工廠定義的interceptor或者advisor的 名字(advisor,interceptor,before,after returning,和throws advice 對象皆可)。 Advisor在該列表中的次序很重要。

你也許會對該列表為什么不采用bean的引用存有疑問。 原因就在于如果ProxyFactoryBean的singleton屬性被設置為false, 那么bean工廠必須能返回多個獨立的代理實例。 如果有任何一個advisor本身是prototype的,那么它就需要返回獨立的實例, 也就是有必要從bean工廠獲取advisor的不同實例,bean的引用在這里顯然是不夠的。

上面定義的“person”bean定義可以作為Person接口的實現來使用,如下所示:

Person person = (Person) factory.getBean("person");

在同一個IoC的上下文中,其他的bean可以依賴于Person接口,就象依賴于一個普通的java對象一樣。

<bean id="personUser" class="com.mycompany.PersonUser"><property name="person"><ref local="person" /></property> </bean>

在這個例子里,PersonUser類暴露了一個類型為Person的屬性。 只要是在用到該屬性的地方,AOP代理都能透明的替代一個真實的Person實現。 但是,這個類可能是一個動態代理類。也就是有可能把它類型轉換為一個Advised接口 (該接口在下面的章節中論述) 。

5.5.4.?代理類

如果你需要代理的是類,而不是一個或多個接口,又該怎么辦呢?

想象一下我們上面的例子,如果沒有Person接口, 我們需要通知一個叫Person的類, 而且該類沒有實現任何業務接口。在這種情況下,你可以配置Spring使用CGLIB代理, 而不是動態代理。你只要在上面的ProxyFactoryBean定義中把 它的proxyTargetClass屬性改成true就行了。

只要你愿意,即使在有接口的情況下,你也可以強迫Spring使用CGLIB代理。

CGLIB代理是通過在運行期產生目標類的子類來進行工作的。 Spring可以配置這個生成的子類,來代理原始目標類的方法調用。這個子類是用?Decorator設計模式置入到advice中的。

CGLIB代理對于用戶來說應該是透明的。然而,還有以下一些因素需要考慮:

  • Final方法不能被通知,因為不能被重寫。

  • 你需要在你的classpath中包括CGLIB的二進制代碼,而動態代理對任何JDK都是可用的.

CGLIB和動態代理在性能上有微小的區別,對Spring 1.0來說,后者稍快。 另外,以后可能會有變化。在這種情況下性能不是決定性因素

5.6.?便利的代理創建方式

通常,我們不需要ProxyFactoryBean的全部功能,因為我們常常只對一個方面感興趣: 例如,事務管理。

當我們僅僅對一個特定的方面干興趣時,我們可以使用許多便利的工廠來創建AOP代理。這些在其他 章節討論,所以這里我們快速瀏覽一下它們。

5.6.1.?TransactionProxyFactoryBean

用Spring提供的jPetStore的示例應用 演示了TransactionProxyFactoryBean的使用方式。

TransactionProxyFactoryBean是ProxyConfig的子類, 因此基本配置信息是和ProxyFactoryBean共享的。 (見上面ProxyConfig的屬性列表。)

下面的代碼來自于JPetStore application,演示了ProxyFactoryBean是如何工作的。 跟ProxyFactoryBean一樣,存在一個目標bean的定義。 類的依賴關系定義在代理工廠bean定義中(petStore),而不是普通Java對象(petStoreTarget)。

TransactionProxyFactoryBean需要設置一個target屬性, 還需要設置“transactionAttributes”, “transactionAttributes”用來指定需要事務化 處理的方法,還有要求的傳播方式和其他設置:

<bean id="petStoreTarget" class="org.springframework.samples.jpetstore.domain.logic.PetStoreImpl"><property name="accountDao"><ref bean="accountDao"/></property><!-- Other dependencies omitted --> </bean><bean id="petStore" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><property name="transactionManager"><ref bean="transactionManager"/></property><property name="target"><ref local="petStoreTarget"/></property><property name="transactionAttributes"><props><prop key="insert*">PROPAGATION_REQUIRED</prop><prop key="update*">PROPAGATION_REQUIRED</prop><prop key="*">PROPAGATION_REQUIRED,readOnly</prop></props></property> </bean>

TransactionProxyFactoryBean自動創建一個事務advisor, 該advisor包括一個基于事務屬性的切入點。因此只有事務性的方法被通知。

TransactionProxyFactoryBean使用preInterceptors和 postInterceptors屬性指定“pre”和“post”通知。它們將攔截器,通知和Advisor數組放置 在事務攔截器前后的攔截器鏈中。使用XML格式的bean定義中的<list>元素定義,就 象下面一樣:

<property name="preInterceptors"><list><ref local="authorizationInterceptor"/><ref local="notificationBeforeAdvice"/></list> </property> <property name="postInterceptors"><list><ref local="myAdvisor"/></list> </property>

這些屬性可以加到上面的“petStore”的bean定義里。一個通用用法是將事務和聲明式 安全組合在一起使用:一個和EJB提供的類似的方法。

因為使用前攔截器和后攔截器時,用的是真正的實例引用,而不象在?ProxyFactoryBean中用的bean的名字,因此它們只能用于共享實例的通知。 因此它們不能用在有狀態的通知中:例如,在mixin中。這和TransactionProxyFactoryBean的要求是 一致的。如果你需要更復雜的,可以定制的AOP,你可以考慮使用普通的ProxyFactoryBean, 或者是自動代理生成器(參考下面)。

尤其是如果我們將Spring的AOP在許多情況下看成是EJB的替代品,我們會發現大多數通知是很普通的, 可以使用共享實例。聲明式的事務管理和安全檢查是一個典型的例子。

TransactionProxyFactoryBean依賴于由它的transactionManager?屬性指定的TransactionManager。 這種事務管理方式是可插拔的,基于JTA,JDBC或者其他事務管理策略皆可。 這與Spring的事務抽象層有關,而不在于AOP本身。我們將在下一章中討論事務機制。

如果你只對聲明性事務管理感興趣,TransactionProxyFactoryBean是一個不錯的解決辦法, 并且比直接使用ProxyFactoryBean來得簡單.

5.6.2.?EJB 代理

其它有一些專門的代理用于創建EJB代理,使得EJB的“業務方法”的接口可以被調用代碼直接使用。 調用代碼并不需要進行JNDI查找或使用EJB的創建方法:這是在可讀性和架構靈活性方面的重大提高。

進一步請參考本手冊內的Spring的EJB業務。

5.7.?使用ProxyFactory以編程的方式創建AOP代理

使用Spring以編程的方式創建AOP代理也很簡單。 這使得你不需要Spring的IoC就能夠使用Spring的AOP。

下面的代碼顯示的用攔截器和advisor為目標對象創建代理。目標對象實現的接口將自動被代理:

ProxyFactory factory = new ProxyFactory(myBusinessInterfaceImpl); factory.addInterceptor(myMethodInterceptor); factory.addAdvisor(myAdvisor); MyBusinessInterface tb = (MyBusinessInterface) factory.getProxy();

第一步是創建類型為org.springframework.aop.framework.ProxyFactory?的對象。你可以和上面的例子一樣用目標對象創建,或者在另一個構造函數中指定要被代理的接口。

你可以添加攔截器或advisor,在整個ProxyFactory的生命周期內操作它們。如果你添加 IntroductionInterceptionAroundAdvisor,你可以使代理實現附加接口。

ProxyFactory(它是從AdvisedSupport繼承而來)也提供了一些實用方法,使你可以添加 其它通知類型,比如before通知和throws通知。AdvisedSupport是ProxyFactory和ProxyFactoryBean 的父類。

將AOP代理的創建和IoC框架結合起來在大多數應用中都是最好的實現方式。我們推薦你和一般情況一樣, 不要將AOP配置信息放在Java代碼里。

5.8.?操作被通知對象

無論你怎么創建AOP代理,你都可以使用org.springframework.aop.framework.Advised?接口來操作它們。任何AOP代理無論實現其它什么接口,都可以類型轉換為這個接口。這個接口包括下列方法:

void addInterceptor(Interceptor interceptor) throws AopConfigException;void addInterceptor(int pos, Interceptor interceptor) throws AopConfigException;void addAdvisor(Advisor advisor) throws AopConfigException;void addAdvisor(int pos, Advisor advisor) throws AopConfigException;int indexOf(Advisor advisor);boolean removeAdvisor(Advisor advisor) throws AopConfigException;void removeAdvisor(int index) throws AopConfigException;boolean replaceAdvisor(Advisor a, Advisor b) throws AopConfigException;boolean isFrozen();

getAdvisors()方法為工廠中的每個advisor,攔截器或者其它通知類型返回一個Advisor。 如果你添加一個Advisor,使用當前索引返回的advisor就是你添加的對象。如果你添加攔截器或其它通知類型, Spring將當前對象和一個滿足要求的切入點封裝在一個advisor里。因此,如果你添加?MethodInterceptor, 使用當前索引返回的advisor是一個DefaultPointcutAdvisor,這個advisor返回?MethodInterceptor和滿足所有類和方法的切入點。

addAdvisor()被用來添加Advisor。通常會是一個普通的?DefaultPointcutAdvisor,它可以和任何通知或切入點(除了引用)一起使用。

缺省情況下,在每次代理被創建的時候添加或刪除advisor或攔截器。唯一的限制是不能添加或刪除 引入advisor,因為工廠提供的已存在的代理不反映接口的變化。(你可以從工廠得到一個新的代理來避免這個問題)

是否建議在產品中修改業務對象的通知還值得懷疑,雖然毫無疑問存在合理的使用情況。但是, 在開發中這是非常有用的:例如,在測試中。我有時候發現以攔截器或其它通知的形式來添加測試代碼非常有用, 這樣就可以進入我想要測試的方法調用。(例如,通知可以進入為這個方法創建的事務中: 在為回滾事務作標記前,運行SQL檢查數據庫是否被正確更新。)

根據你創建代理的方式,你通常可以設置frozen標記,這樣Advised?的isFrozen()就返回true,任何添加或刪除通知都將導致?AopConfigException。這種凍結被通知對象狀態的方法在一些情況下是非常有用的: 例如,為了阻止調用代碼刪除一個安全攔截器。如果已知運行時修改通知不被允許,這還可以被Spring 1.1用來 作優化。

5.9.?使用“autoproxy”功能

目前為止,我們已經討論了使用ProxyFactoryBean或類似的工廠bean來顯式創建AOP代理。

Spring也允許我們使用“autoproxy”的bean定義,它可以自動代理所選擇的bean定義。這是建立在Spring的 “bean后處理器”機制上的,它能夠在容器載入bean定義的時候修改任何bean定義。

在這個模型中,你可以在你的XML bean定義文件中建立特殊的bean定義,來配置自動代理機制。這允許你聲明目標對象以使用自動代理功能: 你就可以不需要使用ProxyFactoryBean。

有兩種方法來實現自動代理:

  • 使用一個自動代理生成器,它引用當前上下文中的那些特殊bean

  • 有一個特殊的自動代理創建的情況值得單獨考慮:由源代碼級元數據驅動的自動代理創建

5.9.1.?自動代理的bean定義

org.springframework.aop.framework.autoproxy包提供了下列標準自動代理生成器。

5.9.1.1.?BeanNameAutoProxyCreator

BeanNameAutoProxyCreator為名字符合某個值或統配符的bean自動創建AOP代理。

<bean id="jdkBeanNameProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"><property name="beanNames"><value>jdk*,onlyJdk</value></property><property name="interceptorNames"><list><value>myInterceptor</value></list></property> </bean>

就和ProxyFactoryBean一樣,有一個interceptorNames?屬性,而不是一個攔截器列表,這個屬性允許為prototype的advisor提供正確的行為。雖然名字叫 “攔截器”,但是也可以是advisor或任何通知類型。

就象一般的自動代理創建一樣,使用BeanNameAutoProxyCreator的主要目的 是對多個對象使用相同的配置信息,并且減少配置的工作量。這在為多個對象使用聲明式事務時是一個很流行的選擇。

在上面的例子中,名字匹配的bean定義,如“jdkMyBean”和“onlyJdk”,是包含目標類的普通bean定義。?BeanNameAutoProxyCreator將自動創建AOP代理。相同的通知會被因用到所有匹配的bean。 注意,如果使用了advisor(而不是上面例子中的攔截器),切入點可能對不同的bean會不同。

5.9.1.2.?DefaultAdvisorAutoProxyCreator

DefaultAdvisorAutoProxyCreator是一個更通用,更強大的自動代理生成器。它將 自動應用于當前上下文的符合條件的advisor,而不需要在自動代理advisor的bean定義中包含特定的bean名字。 它有助于配置的一致性,并避免象BeanNameAutoProxyCreator一樣重復配置。

使用這個機制包括:

  • 指定一個DefaultAdvisorAutoProxyCreator的bean定義

  • 在相同或相關上下文中指定任何數目的Advisor。注意這些必須是Advisor, 而不僅僅是攔截器或其它通知。這是很必要的,因為必須有一個切入點來檢查每個通知是否符合候選bean定義。

DefaultAdvisorAutoProxyCreator會自動計算每個advisor包含的的切入點,看看 是否有什么通知應該被引用到每個業務對象(比如例子中的“businessObject1”和“businessObject2”)。

這意味著任何數目的advisor都可以自動應用到每個業務對象。如果advisor中沒有任何切入點符合業務對象的 方法,這個對象就不會被代理。因為會為新的業務對象添加bean定義,如果必要,它們會自動被代理。

一般來說,自動代理可以保證調用者或依賴無法接觸未被通知的對象。在這個ApplicationContext上 調用getBean("businessObject1")返回一個AOP代理,而不是目標業務對象。

<bean id="autoProxyCreator"class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> </bean><bean id="txAdvisor"autowire="constructor"class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"><property name="order"><value>1</value></property> </bean><bean id="customAdvisor"class="com.mycompany.MyAdvisor"> </bean><bean id="businessObject1"class="com.mycompany.BusinessObject1"><!-- Properties omitted --> </bean><bean id="businessObject2"class="com.mycompany.BusinessObject2"> </bean>

如果你想在幾個業務對象上應用相同的通知,DefaultAdvisorAutoProxyCreator?就非常有用。一旦定義恰當,你可以簡單地添加業務對象而不需要包括特定的代理配置。你也可以非常容易地 刪除所附加的方面--例如,跟蹤或性能監控的方面--可以盡可能減少配置修改。

DefaultAdvisorAutoProxyCreator支持過濾(使用命名規則以便只計算某一些 advisor,允許在一個工廠中使用多個,被不同配置的AdvisorAutoProxyCreator)和排序。Advisor可以實現?org.springframework.core.Ordered接口以保證正確的排序,如果排序確實需要。在 上面的例子中,TransactionAttributeSourceAdvisor有一個可配置的順序值,缺損是不排序。

5.9.1.3.?AbstractAdvisorAutoProxyCreator

這是DefaultAdvisorAutoProxyCreator的父類。你可以繼承它實現你自己的自動代理生成器,這種情況不太常見, 一般是advisor定義不能給DefaultAdvisorAutoProxyCreator框架的行為提供足夠的定制。

5.9.2.?使用元數據驅動的自動代理

一種特別重要的自動代理類型是由元數據驅動的。這和.NET的ServicedComponents編程框架 非常類似。它沒有象EJB那樣使用XML部署描述,事務管理和其它企業級業務的配置都是定義在源代碼級的屬性上。

在這種情況下,你可以使用DefaultAdvisorAutoProxyCreator,以及可以讀取元數據屬性的 Advisor。元數據細節定義在候選advisor的切入點部分,而不是自動代理創建類本身。

這是DefaultAdvisorAutoProxyCreator的一種特殊情況,但是它本身而言是值得考慮的。 (可以讀取元數據的代碼處于advisor的切入點中,而不是AOP框架本身。)

jPetStore示例應用的/attributes目錄演示了屬性驅動的自動代理的使用。在這個例子中, 沒有必要使用TransactionProxyFactoryBean。僅僅在業務對象上定義業務屬性就足夠了,因為 使用了可知元數據的切入點。bean定義在/WEB-INF/declarativeServices.xml中,包括下 面的代碼。注意這是通用的,可以在jPetStore以外的地方使用:

<bean id="autoproxy" class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"> </bean><bean id="transactionAttributeSource"class="org.springframework.transaction.interceptor.AttributesTransactionAttributeSource"autowire="constructor"> </bean><bean id="transactionInterceptor"class="org.springframework.transaction.interceptor.TransactionInterceptor"autowire="byType"> </bean><bean id="transactionAdvisor"class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor"autowire="constructor" > </bean><bean id="attributes"class="org.springframework.metadata.commons.CommonsAttributes" />

DefaultAdvisorAutoProxyCreator?bean定義--在這種情況下稱作“advisor”,但是名字 無關緊要--會在當前的應用上午中選擇所有符合的切入點。在這個例子中,類型為?TransactionAttributeSourceAdvisor的“transactionAdvisor”bean定義將會應用于包含事務屬性 的類或方法。TransactionAttributeSourceAdvisor通過構造函數依賴于TransactionInterceptor。這個例子通過自動 裝配來解析它。AttributesTransactionAttributeSource依賴于?org.springframework.metadata.Attributes接口的一個實現。在這段代碼中,“attributes” bean使用Jakarta Commons Attributes API來獲取屬性信息。(應用代碼必須使用Commons Attributes編譯任務編譯。)

這里定義的TransactionInterceptor依賴于一個?PlatformTransactionManager定義,它并沒有被包括在這個通用的文件中(雖然應該是這樣), 這是因為它是和應用的事務需求相關的(一般地,是想這個例子中的JTA,或者Hibernate,JDO 或JDBC):

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"/> 如果你只要求聲明式事務管理,使用這些通用的XML定義就可以使得Spring自動代理含有事務屬性的所有類和方法。 你不需要直接和AOP打交道,并且編程模型和.NET的ServicedComponents非常相似。

這個機制具有可擴展性。它可以基于定制的屬性來使用自動代理。你需要:

  • 定義你的定制屬性。

  • 指定的Advisor包含必要的通知和由方法或類的定制屬性所觸發的切入點。你可以使用已經存在的通知,僅僅實 現用來選擇定制屬性的切入點。

這些advisor可能對每個被通知類都是唯一的(例如,maxin)。它們僅僅需要被定義成 prototype bean,而不是singleton bean。例如,Spring的測試套件中的LockMixin?引入攔截器可以和一個屬性驅動切入點一起來定位一個maxin,就象這里演示的。我們使用JavaBean配置的 普通的DefaultPointcutAdvisor:

<bean id="lockMixin"class="org.springframework.aop.LockMixin"singleton="false" /><bean id="lockableAdvisor"class="org.springframework.aop.support.DefaultPointcutAdvisor"singleton="false" ><property name="pointcut"><ref local="myAttributeAwarePointcut"/></property><property name="advice"><ref local="lockMixin"/></property> </bean><bean id="anyBean" class="anyclass" ...

如果知道屬性的切入點符合anyBean或者其它bean定義中的任何方法,這個maxin 將被應用。注意,lockMixin和lockableAdvisor定義都是 prototype的。myAttributeAwarePointcut切入點可以被定義成singleton,因為它不為 不同的被通知對象保存狀態。

5.10.?使用TargetSources

Spring提供了TargetSource的概念,由?org.springframework.aop.TargetSource接口定義。這個接口負責返回實現切入點的 “目標對象”。每次AOP代理處理方法調用時,目標實例都會用到TargetSource實現。

使用Spring AOP的開發者一般不需要直接使用TargetSources,但是這提供了一種強大的方法來支持池,熱交換, 和其它復雜目標。例如,一個支持池的TargetSource可以在每次調用時返回不同的目標對象實例,使用池來管理實例。

如果你沒有指定TargetSource,就使用缺省的實現,它封裝了一個本地對象。每次調用會返回相同的目標對象 (和你期望的一樣)。

讓我們來看一下Spring提供的標準目標源,以及如何使用它們。

當使用定制目標源時,你的目標通常需要定義為prototype bean,而不是singleton bean。這使得 Spring在需要的時候創建一個新的目標實例。

5.10.1.?可熱交換的目標源

org.springframework.aop.target.HotSwappableTargetSource?允許切換一個AOP代理的目標,而調用者維持對它的引用。

修改目標源的目標會立即起作用。并且HotSwappableTargetSource是線程安全的。

你可以通過HotSwappableTargetSource的swap()方法 來改變目標,就象下面一樣:

HotSwappableTargetSource swapper = (HotSwappableTargetSource) beanFactory.getBean("swapper"); Object oldTarget = swapper.swap(newTarget);

所需的XML定義如下:

<bean id="initialTarget" class="mycompany.OldTarget"> </bean><bean id="swapper" class="org.springframework.aop.target.HotSwappableTargetSource"><constructor-arg><ref local="initialTarget"/></constructor-arg> </bean><bean id="swappable" class="org.springframework.aop.framework.ProxyFactoryBean" ><property name="targetSource"><ref local="swapper"/></property> </bean>

上面的swap()調用會修改swappable這個bean的目標。持有對這個bean應用的客戶端 將不會知道這個變化,但會立刻轉為使用新的目標對象。

雖然這個例子沒有添加任何通知--使用TargetSource也沒必要添加通知-- 當然任何TargetSource都可以和任何一種通知一起使用。

5.10.2.?支持池的目標源

使用支持池的目標源提供了一種和無狀態的session EJB類似的編程模式,在無狀態的session EJB中,維護了 一個相同實例的池,提供從池中獲取可用對象的方法。

Spring的池和SLSB的池之間的重要區別在于Spring的池可以被應用到任何普通Java對象。就象Spring的通用 的做法,這個業務也可以以非侵入的方式被應用。

Spring直接支持Jakarta Commons Pool 1.1,它是一種非常高效的池實現。使用這個功能,你需要在你的應用的 classpath中添加commons-pool的Jar文件。也可以直接繼承?org.springframework.aop.target.AbstractPoolingTargetSource來支持其它池API。

下面是一個配置的例子:

<bean id="businessObjectTarget" class="com.mycompany.MyBusinessObject" singleton="false">... properties omitted </bean><bean id="poolTargetSource" class="org.springframework.aop.target.CommonsPoolTargetSource"><property name="targetBeanName"><value>businessObject</value></property><property name="maxSize"><value>25</value></property> </bean><bean id="businessObject" class="org.springframework.aop.framework.ProxyFactoryBean" ><property name="targetSource"><ref local="poolTargetSource"/></property><property name="interceptorNames"><value>myInterceptor</value></property> </bean>

注意例子中的目標對象“businessObjectTarget”必須是prototype。這樣在?PoolingTargetSource的實現在擴大池容量的時候可以創建目標的新實例。關于這些屬性的 信息可以參考AbstractPoolingTargetSource和子類的Javadoc。maxSize是最基本的屬性, 被保證總是存在。

在這種情況下,名字為“myInterceptor”的攔截器需要定義在同一個IoC上下文中。但是,并不一定需要 指定攔截器也用池。如果你僅需要池,并且沒有其它通知,可以根本不設置屬性interceptorNames。

也可以配置Spring以便可以將任何池化的對象轉換類型為?org.springframework.aop.target.PoolingConfig接口。通過這個接口的一個引入,可以得到 配置信息和池的當前大小。你需要這樣定義一個advisor:

<bean id="poolConfigAdvisor" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"><property name="target"><ref local="poolTargetSource" /></property><property name="targetMethod"><value>getPoolingConfigMixin</value></property> </bean>

通過調用AbstractPoolingTargetSource類上的方法,可以得到這個advisor, 因此使用MethodInvokingFactoryBean。這個advisor的名字(“poolConfigAdvisor”)必須在暴露池化對象的 This advisor is obtained by calling a convenience method on the ProxyFactoryBean中的攔截器名字列表中。

這個類型轉換就象下面:

PoolingConfig conf = (PoolingConfig) beanFactory.getBean("businessObject"); System.out.println("Max pool size is " + conf.getMaxSize()); 池化無狀態業務對象并不是總是必要的。我們不認為這是缺省選擇,因為大多數無狀態對象自然就是線程 安全的,如果資源被緩存,實例池化會有問題。

簡單的池也可以使用自動代理。任何自動代理生成器都可以設置TargetSources。

5.10.3.?Prototype目標源

設置“prototype”目標源和支持池的目標源類似。在每次方法調用的時候都會創建一個新的目標實例。 雖然在現代JVM中創建對象的代價不是很高,但是裝配新對象的代價可能更高(為了maz滿足它的IoC依賴關系)。 因此沒有好的理由不應該使用這個方法。

為了這么做,你可以修改上面的的poolTargetSource定義,就向下面一樣。 (為了清晰起見,我修改了名字。)

<bean id="prototypeTargetSource" class="org.springframework.aop.target.PrototypeTargetSource"><property name="targetBeanName"><value>businessObject</value></property> </bean>

只有一個屬性:目標bean的名字。在TargetSource實現中使用繼承是為了保證命名的一致性。就象支持池的 目標源一樣,目標bean必須是一個prototype的bean定義。

5.11.?定義新的通知類型

Spring AOP設計能夠很容易地擴展。雖然攔截實現的策略目前只在內部使用,但還是有可能支持攔截around通知, before通知,throws通知和after returning通知以外的任何通知類型。

org.springframework.aop.framework.adapter?包是一個支持添加新的定制通知類型而不修改核心框架的SPI(譯:可能是API)包。定制通知類型的唯一限制是它必須實現?org.aopalliance.aop.Advice標記接口。

更多信息請參考org.springframework.aop.framework.adapter包的Javadoc。

5.12.?進一步的資料和資源

對于AOP的介紹,我推薦Ramnivas Laddad (Manning, 2003)寫的AspectJ in Action。

進一步的Spring AOP的例子請參考Spring的示例應用:

  • JPetStore的缺省配置演示了使用TransactionProxyFactoryBean來定義聲明式事務管理。

  • JPetStore的/attributes目錄演示了屬性驅動的聲明式事務管理。

如果你對Spring AOP更多高級功能感興趣,可以看一下測試套件。測試覆蓋率超過90%,并且演示了本文檔沒有提到 的許多高級功能。

5.13.?路標

Spring AOP,就象Spring的其它部分,是開發非常活躍的部分。核心API已經穩定了。象Spring的其它部分一樣, AOP框架是非常模塊化的,在保留基礎設計的同時提供擴展。在Spring 1.1到1.2階段有很多地方可能會有所提高,但是這 些地方也保留了向后兼容性。它們是:

  • 性能的提高:AOP代理的創建由工廠通過策略接口處理。因此我們能夠支持額外的AOP 代理類型而不影響用戶代碼或核心實現。對于Spring 1.1,我們正在檢查AOP代理實現的所有字節碼,萬一不需要 運行時通知改變。這應該大大減少AOP框架的額外操作。但是注意,AOP框架的額外操作不是在普通使用中需要考慮 的內容。

  • 更具表達力的切入點:Spring目前提供了一個具有表達力的切入點接口,但是我們 添加更多的切入點實現。我們正在考慮提供一個簡單但具有強大表達式語言的實現。如果你希望貢獻一個有用的 切入點實現,我們將非常歡迎。

  • 引入方面這個高層概念,它包含多個advisor。

from:?http://docs.huihoo.com/spring/zh-cn/aop.html

總結

以上是生活随笔為你收集整理的Spring - Java/J2EE Application Framework 应用框架 第 5 章 Spring AOP: Spring之面向方面编程G的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久久久成人片免费观看蜜芽 | 亚洲の无码国产の无码步美 | 大肉大捧一进一出好爽视频 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲中文字幕无码一久久区 | 秋霞成人午夜鲁丝一区二区三区 | 国产人妻精品一区二区三区不卡 | 狠狠亚洲超碰狼人久久 | 中文字幕乱码人妻无码久久 | 黑人巨大精品欧美黑寡妇 | 一本大道久久东京热无码av | 久久久久成人片免费观看蜜芽 | 日日麻批免费40分钟无码 | 丝袜 中出 制服 人妻 美腿 | 国产精品va在线播放 | 精品厕所偷拍各类美女tp嘘嘘 | 国产亚洲精品久久久闺蜜 | 色偷偷人人澡人人爽人人模 | 99久久99久久免费精品蜜桃 | 欧美午夜特黄aaaaaa片 | 国产成人无码午夜视频在线观看 | 夫妻免费无码v看片 | 亚洲成在人网站无码天堂 | 两性色午夜视频免费播放 | 中文字幕中文有码在线 | 亚洲大尺度无码无码专区 | 久久久久99精品成人片 | 日韩在线不卡免费视频一区 | 99在线 | 亚洲 | 国产成人无码av在线影院 | 久久国产劲爆∧v内射 | 动漫av一区二区在线观看 | 日本一卡二卡不卡视频查询 | 精品亚洲韩国一区二区三区 | 99久久人妻精品免费二区 | √天堂资源地址中文在线 | 久精品国产欧美亚洲色aⅴ大片 | 国产成人无码a区在线观看视频app | 夜夜影院未满十八勿进 | 97夜夜澡人人爽人人喊中国片 | 国产97在线 | 亚洲 | 色妞www精品免费视频 | a在线观看免费网站大全 | 国产午夜福利亚洲第一 | 亚洲综合久久一区二区 | 国产午夜亚洲精品不卡下载 | 国产99久久精品一区二区 | 1000部夫妻午夜免费 | 自拍偷自拍亚洲精品被多人伦好爽 | 欧美野外疯狂做受xxxx高潮 | 中文字幕无码人妻少妇免费 | 51国偷自产一区二区三区 | 图片区 小说区 区 亚洲五月 | 国产偷抇久久精品a片69 | 网友自拍区视频精品 | 国产免费无码一区二区视频 | 人妻无码久久精品人妻 | 中国女人内谢69xxxxxa片 | 国内精品久久久久久中文字幕 | 国产无套内射久久久国产 | 欧美三级a做爰在线观看 | 精品 日韩 国产 欧美 视频 | 欧洲vodafone精品性 | 国产亚洲欧美日韩亚洲中文色 | 久久久久成人精品免费播放动漫 | 红桃av一区二区三区在线无码av | 久久综合九色综合欧美狠狠 | 亚洲国产一区二区三区在线观看 | 综合网日日天干夜夜久久 | 好屌草这里只有精品 | 成人女人看片免费视频放人 | 中文字幕乱码人妻二区三区 | 1000部夫妻午夜免费 | 色综合久久久久综合一本到桃花网 | 国产9 9在线 | 中文 | 人妻无码αv中文字幕久久琪琪布 | 999久久久国产精品消防器材 | 亚洲天堂2017无码中文 | 久热国产vs视频在线观看 | 亚洲精品国产精品乱码不卡 | 久久久国产精品无码免费专区 | 日韩成人一区二区三区在线观看 | 无码av免费一区二区三区试看 | 国产精品资源一区二区 | 国精产品一品二品国精品69xx | 1000部夫妻午夜免费 | 国产av剧情md精品麻豆 | 亚拍精品一区二区三区探花 | 一本久久伊人热热精品中文字幕 | 秋霞成人午夜鲁丝一区二区三区 | 在线欧美精品一区二区三区 | 东京热男人av天堂 | 精品乱码久久久久久久 | 国产精品亚洲专区无码不卡 | 国产电影无码午夜在线播放 | 中文字幕无码人妻少妇免费 | 国产熟妇另类久久久久 | 东京热无码av男人的天堂 | 中文字幕乱码人妻无码久久 | 欧美国产日韩亚洲中文 | 日本肉体xxxx裸交 | 国产精品.xx视频.xxtv | 精品无码国产自产拍在线观看蜜 | 又大又硬又爽免费视频 | 图片区 小说区 区 亚洲五月 | 国产精品久久久久久无码 | 国产乱人偷精品人妻a片 | 国精产品一品二品国精品69xx | 亚洲精品久久久久avwww潮水 | 色欲久久久天天天综合网精品 | 成人一区二区免费视频 | 18禁黄网站男男禁片免费观看 | 久久久精品国产sm最大网站 | 免费国产成人高清在线观看网站 | 欧洲熟妇精品视频 | 国产97人人超碰caoprom | 午夜福利不卡在线视频 | 国产成人无码av片在线观看不卡 | 亚洲人成网站在线播放942 | 波多野结衣乳巨码无在线观看 | 国产综合久久久久鬼色 | 亚洲欧美色中文字幕在线 | 亲嘴扒胸摸屁股激烈网站 | 国精产品一品二品国精品69xx | 久久精品一区二区三区四区 | 免费网站看v片在线18禁无码 | 成人免费视频在线观看 | 国产免费无码一区二区视频 | 国内精品久久久久久中文字幕 | 成人女人看片免费视频放人 | 国产又粗又硬又大爽黄老大爷视 | 1000部啪啪未满十八勿入下载 | 亚洲精品国产精品乱码视色 | 国内综合精品午夜久久资源 | 无码人中文字幕 | 久精品国产欧美亚洲色aⅴ大片 | 亚洲 a v无 码免 费 成 人 a v | 亚洲精品一区二区三区婷婷月 | 日产国产精品亚洲系列 | 精品国产一区二区三区四区在线看 | 久久国产精品_国产精品 | 97se亚洲精品一区 | 四虎国产精品一区二区 | 国产内射爽爽大片视频社区在线 | 亚洲日韩av一区二区三区中文 | 日韩人妻无码一区二区三区久久99 | 人人妻人人澡人人爽欧美一区 | 成人免费视频一区二区 | а√资源新版在线天堂 | 中文字幕无码免费久久99 | 初尝人妻少妇中文字幕 | 国产sm调教视频在线观看 | 国产亚洲精品久久久久久大师 | 欧美精品免费观看二区 | 中文亚洲成a人片在线观看 | 亚洲综合另类小说色区 | 男女爱爱好爽视频免费看 | 国产特级毛片aaaaaaa高清 | 又大又紧又粉嫩18p少妇 | 久久久久久九九精品久 | 东京一本一道一二三区 | 色 综合 欧美 亚洲 国产 | 性欧美疯狂xxxxbbbb | 亚洲精品中文字幕 | 亚洲欧美国产精品久久 | 丰满护士巨好爽好大乳 | 久久99精品久久久久久动态图 | 亚洲熟妇色xxxxx亚洲 | 妺妺窝人体色www在线小说 | 成人一在线视频日韩国产 | 欧美阿v高清资源不卡在线播放 | 国产午夜手机精彩视频 | 国产乱人伦av在线无码 | 丰满诱人的人妻3 | 国产美女精品一区二区三区 | 欧美熟妇另类久久久久久多毛 | 国产网红无码精品视频 | 自拍偷自拍亚洲精品被多人伦好爽 | 久久精品女人天堂av免费观看 | 国产精品国产三级国产专播 | 亚洲精品国产品国语在线观看 | 国产精品高潮呻吟av久久 | 日日摸日日碰夜夜爽av | 成人av无码一区二区三区 | 色五月丁香五月综合五月 | 国产麻豆精品一区二区三区v视界 | 少妇高潮喷潮久久久影院 | 国产超碰人人爽人人做人人添 | 强辱丰满人妻hd中文字幕 | 国产在线一区二区三区四区五区 | 麻豆精品国产精华精华液好用吗 | av无码电影一区二区三区 | 国产精品沙发午睡系列 | 国产成人人人97超碰超爽8 | 亚洲性无码av中文字幕 | 国产麻豆精品精东影业av网站 | 综合激情五月综合激情五月激情1 | 久久人人爽人人人人片 | 小sao货水好多真紧h无码视频 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久99国产综合精品 | 久久久中文字幕日本无吗 | 久久久久久av无码免费看大片 | 人人妻人人澡人人爽人人精品浪潮 | 国产午夜视频在线观看 | 国产区女主播在线观看 | 少妇无码吹潮 | 成 人 免费观看网站 | 国产内射爽爽大片视频社区在线 | 久精品国产欧美亚洲色aⅴ大片 | 露脸叫床粗话东北少妇 | 国产 精品 自在自线 | 四虎国产精品一区二区 | 午夜免费福利小电影 | 日韩在线不卡免费视频一区 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品内射视频免费 | 精品欧美一区二区三区久久久 | 97精品人妻一区二区三区香蕉 | 日日天日日夜日日摸 | 老熟妇仑乱视频一区二区 | 熟女俱乐部五十路六十路av | 国产国产精品人在线视 | 色综合久久久久综合一本到桃花网 | 伦伦影院午夜理论片 | 俺去俺来也在线www色官网 | 九九在线中文字幕无码 | 国内老熟妇对白xxxxhd | 亚洲娇小与黑人巨大交 | 亚洲另类伦春色综合小说 | 在线а√天堂中文官网 | 国产凸凹视频一区二区 | 成人精品视频一区二区 | 少妇激情av一区二区 | 国产av人人夜夜澡人人爽麻豆 | 精品一区二区三区波多野结衣 | 成人精品一区二区三区中文字幕 | 天天摸天天透天天添 | 乱人伦人妻中文字幕无码久久网 | 亚洲中文字幕无码中字 | 国产 浪潮av性色四虎 | 欧美日本精品一区二区三区 | 骚片av蜜桃精品一区 | 日韩视频 中文字幕 视频一区 | 国产麻豆精品精东影业av网站 | 亚洲精品综合五月久久小说 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 老司机亚洲精品影院 | 人人妻人人澡人人爽欧美一区九九 | 又粗又大又硬又长又爽 | v一区无码内射国产 | 国产成人综合美国十次 | 永久免费观看国产裸体美女 | 国产美女极度色诱视频www | 久精品国产欧美亚洲色aⅴ大片 | 人妻少妇精品久久 | 日产国产精品亚洲系列 | 中国女人内谢69xxxxxa片 | 麻豆md0077饥渴少妇 | 久久人人97超碰a片精品 | 俺去俺来也在线www色官网 | 日日干夜夜干 | 在线a亚洲视频播放在线观看 | 亚洲精品综合五月久久小说 | 小鲜肉自慰网站xnxx | 国产高潮视频在线观看 | 黄网在线观看免费网站 | 在线看片无码永久免费视频 | 男女下面进入的视频免费午夜 | 动漫av网站免费观看 | 麻豆国产人妻欲求不满谁演的 | 3d动漫精品啪啪一区二区中 | 精品久久久无码人妻字幂 | 国产精品美女久久久网av | 欧美肥老太牲交大战 | 精品水蜜桃久久久久久久 | 亚洲欧美色中文字幕在线 | 爆乳一区二区三区无码 | 女人被男人爽到呻吟的视频 | 中文字幕+乱码+中文字幕一区 | 国产高清av在线播放 | 久久国产36精品色熟妇 | 丝袜足控一区二区三区 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 97夜夜澡人人双人人人喊 | 少妇厨房愉情理9仑片视频 | 国产成人精品必看 | 久久精品人妻少妇一区二区三区 | 亚洲精品一区二区三区在线观看 | 欧美熟妇另类久久久久久不卡 | 亚洲中文字幕无码一久久区 | 狠狠色色综合网站 | 久久亚洲国产成人精品性色 | 夜夜躁日日躁狠狠久久av | 精品成在人线av无码免费看 | 人人澡人人妻人人爽人人蜜桃 | 国产精品久久久午夜夜伦鲁鲁 | 荫蒂被男人添的好舒服爽免费视频 | 初尝人妻少妇中文字幕 | 免费人成网站视频在线观看 | 强辱丰满人妻hd中文字幕 | 亚洲欧美中文字幕5发布 | 九九热爱视频精品 | 少妇被黑人到高潮喷出白浆 | 国内精品人妻无码久久久影院 | 中文字幕 人妻熟女 | 亚洲 a v无 码免 费 成 人 a v | 日韩无码专区 | 久久人人爽人人爽人人片ⅴ | 老头边吃奶边弄进去呻吟 | 国产97人人超碰caoprom | 国产乡下妇女做爰 | 欧美一区二区三区 | 国产小呦泬泬99精品 | 国产九九九九九九九a片 | 亚洲精品久久久久中文第一幕 | 少妇邻居内射在线 | 人人超人人超碰超国产 | 亚洲一区二区三区含羞草 | 久在线观看福利视频 | 亚洲s码欧洲m码国产av | av无码久久久久不卡免费网站 | 精品无码一区二区三区爱欲 | 麻豆国产97在线 | 欧洲 | 高潮毛片无遮挡高清免费视频 | 精品偷自拍另类在线观看 | 亚洲综合无码久久精品综合 | 99久久人妻精品免费二区 | 国产做国产爱免费视频 | 国产超碰人人爽人人做人人添 | 人妻少妇精品无码专区动漫 | 欧美 日韩 人妻 高清 中文 | 四虎影视成人永久免费观看视频 | 国产精品第一国产精品 | 久久综合九色综合97网 | 麻豆精品国产精华精华液好用吗 | 亚洲精品久久久久久久久久久 | 国产精品毛片一区二区 | 亚洲日韩av片在线观看 | 377p欧洲日本亚洲大胆 | 国产乱码精品一品二品 | 久久久精品成人免费观看 | 欧美丰满熟妇xxxx性ppx人交 | 国产精品国产三级国产专播 | av在线亚洲欧洲日产一区二区 | 国产香蕉97碰碰久久人人 | 最近免费中文字幕中文高清百度 | 国产情侣作爱视频免费观看 | 在线 国产 欧美 亚洲 天堂 | 天堂亚洲2017在线观看 | 亚洲区欧美区综合区自拍区 | 装睡被陌生人摸出水好爽 | 国产精品二区一区二区aⅴ污介绍 | 俺去俺来也在线www色官网 | 亚洲综合伊人久久大杳蕉 | √8天堂资源地址中文在线 | 精品久久8x国产免费观看 | 最新国产麻豆aⅴ精品无码 | 国产精品久久久久无码av色戒 | 人人超人人超碰超国产 | 午夜精品一区二区三区在线观看 | 亚洲精品鲁一鲁一区二区三区 | 一本加勒比波多野结衣 | 日本在线高清不卡免费播放 | 国产农村妇女高潮大叫 | 中文字幕乱码中文乱码51精品 | 国产精品久久久久无码av色戒 | 扒开双腿吃奶呻吟做受视频 | 亚洲色在线无码国产精品不卡 | 午夜精品久久久久久久久 | 97人妻精品一区二区三区 | 亚洲国产欧美在线成人 | 国产免费久久久久久无码 | 男女性色大片免费网站 | 麻豆国产丝袜白领秘书在线观看 | 亚洲国产精品无码久久久久高潮 | 无码一区二区三区在线观看 | 久久国产36精品色熟妇 | 亚洲色大成网站www国产 | 2019nv天堂香蕉在线观看 | 丰满少妇弄高潮了www | 中文字幕无码日韩专区 | 午夜福利不卡在线视频 | 欧美 亚洲 国产 另类 | 97夜夜澡人人双人人人喊 | 伊人色综合久久天天小片 | 少妇性荡欲午夜性开放视频剧场 | 亚洲色大成网站www | 国产人妻大战黑人第1集 | 国内精品久久毛片一区二区 | 精品国产青草久久久久福利 | 亚洲第一网站男人都懂 | 久久亚洲中文字幕精品一区 | 亚洲欧美精品aaaaaa片 | 无码国产激情在线观看 | 国内老熟妇对白xxxxhd | 永久免费观看国产裸体美女 | 蜜桃视频韩日免费播放 | 精品国产av色一区二区深夜久久 | 女人被男人爽到呻吟的视频 | 亚洲精品成人av在线 | 欧美黑人性暴力猛交喷水 | 噜噜噜亚洲色成人网站 | 中文毛片无遮挡高清免费 | 亚洲精品欧美二区三区中文字幕 | 国产69精品久久久久app下载 | 久久精品丝袜高跟鞋 | 亚洲国精产品一二二线 | 久9re热视频这里只有精品 | 久久久av男人的天堂 | 午夜精品久久久久久久 | 国产午夜精品一区二区三区嫩草 | 精品人妻中文字幕有码在线 | 欧美zoozzooz性欧美 | 欧美变态另类xxxx | 亚洲欧美国产精品专区久久 | 又大又黄又粗又爽的免费视频 | 国产精品理论片在线观看 | 色五月丁香五月综合五月 | 免费视频欧美无人区码 | 国产亚av手机在线观看 | 日韩精品无码免费一区二区三区 | 久久精品一区二区三区四区 | 好爽又高潮了毛片免费下载 | 老司机亚洲精品影院 | 久久婷婷五月综合色国产香蕉 | 免费看男女做好爽好硬视频 | 中文毛片无遮挡高清免费 | 激情综合激情五月俺也去 | 国产亚洲日韩欧美另类第八页 | 女人高潮内射99精品 | 人妻少妇精品久久 | 国产亚洲视频中文字幕97精品 | 亚洲中文字幕无码一久久区 | 大乳丰满人妻中文字幕日本 | 国内精品久久毛片一区二区 | 午夜无码区在线观看 | 黑人大群体交免费视频 | 亚洲啪av永久无码精品放毛片 | 国产精品久久久久久久影院 | 少妇被黑人到高潮喷出白浆 | 久久婷婷五月综合色国产香蕉 | 四虎影视成人永久免费观看视频 | 婷婷丁香五月天综合东京热 | 色婷婷欧美在线播放内射 | 狠狠躁日日躁夜夜躁2020 | 久激情内射婷内射蜜桃人妖 | 亚洲精品久久久久久一区二区 | 色诱久久久久综合网ywww | 久久久婷婷五月亚洲97号色 | 成人片黄网站色大片免费观看 | 亚洲狠狠婷婷综合久久 | 亚洲日韩精品欧美一区二区 | 欧美 丝袜 自拍 制服 另类 | 亚洲精品久久久久avwww潮水 | 无码免费一区二区三区 | 性生交大片免费看女人按摩摩 | 人人爽人人爽人人片av亚洲 | 久久五月精品中文字幕 | 国产精品资源一区二区 | 无码人妻出轨黑人中文字幕 | 国产猛烈高潮尖叫视频免费 | 日本护士xxxxhd少妇 | 亚洲欧美国产精品久久 | 在线 国产 欧美 亚洲 天堂 | 中文字幕无码热在线视频 | 国产精品丝袜黑色高跟鞋 | 久久国产36精品色熟妇 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产性生交xxxxx无码 | 帮老师解开蕾丝奶罩吸乳网站 | 狠狠色丁香久久婷婷综合五月 | v一区无码内射国产 | 亚洲一区二区三区四区 | 好屌草这里只有精品 | 熟妇人妻无乱码中文字幕 | 97无码免费人妻超级碰碰夜夜 | 97人妻精品一区二区三区 | 人人妻人人澡人人爽人人精品浪潮 | 久久精品国产精品国产精品污 | 纯爱无遮挡h肉动漫在线播放 | 亚洲精品欧美二区三区中文字幕 | 日韩精品无码一本二本三本色 | 18禁黄网站男男禁片免费观看 | 国产精品99久久精品爆乳 | 国产精品99爱免费视频 | 午夜成人1000部免费视频 | yw尤物av无码国产在线观看 | 午夜肉伦伦影院 | 老头边吃奶边弄进去呻吟 | 国产偷抇久久精品a片69 | 欧美xxxxx精品 | 超碰97人人射妻 | 日日夜夜撸啊撸 | √8天堂资源地址中文在线 | 丰满少妇弄高潮了www | 97夜夜澡人人爽人人喊中国片 | 少妇性俱乐部纵欲狂欢电影 | 久久综合色之久久综合 | 久久99精品久久久久久动态图 | 精品厕所偷拍各类美女tp嘘嘘 | 人妻中文无码久热丝袜 | 一本大道伊人av久久综合 | 最近中文2019字幕第二页 | 人妻少妇精品视频专区 | 国产精品久久久一区二区三区 | 清纯唯美经典一区二区 | 亚洲综合另类小说色区 | 永久免费观看国产裸体美女 | 真人与拘做受免费视频 | 中文字幕 亚洲精品 第1页 | 亚洲色成人中文字幕网站 | 牛和人交xxxx欧美 | www国产亚洲精品久久久日本 | a国产一区二区免费入口 | 97夜夜澡人人爽人人喊中国片 | 国产亚洲精品久久久久久国模美 | 国产又粗又硬又大爽黄老大爷视 | 两性色午夜视频免费播放 | 日本一本二本三区免费 | 久久天天躁狠狠躁夜夜免费观看 | 在教室伦流澡到高潮hnp视频 | 午夜精品一区二区三区在线观看 | a片免费视频在线观看 | 亚洲s码欧洲m码国产av | 2020最新国产自产精品 | 99视频精品全部免费免费观看 | 色 综合 欧美 亚洲 国产 | 欧美国产日韩亚洲中文 | 丰满少妇熟乱xxxxx视频 | 色欲av亚洲一区无码少妇 | 97夜夜澡人人爽人人喊中国片 | 人人澡人人透人人爽 | 在线观看国产一区二区三区 | 国产精品永久免费视频 | 99在线 | 亚洲 | 亚洲欧美国产精品专区久久 | 熟妇人妻无码xxx视频 | 日本免费一区二区三区最新 | 日韩人妻系列无码专区 | 日韩人妻无码一区二区三区久久99 | 综合激情五月综合激情五月激情1 | 麻豆国产97在线 | 欧洲 | 三上悠亚人妻中文字幕在线 | 无套内谢老熟女 | 亚洲精品中文字幕久久久久 | 97夜夜澡人人爽人人喊中国片 | 麻豆av传媒蜜桃天美传媒 | 乱码av麻豆丝袜熟女系列 | 99精品视频在线观看免费 | 欧美老妇交乱视频在线观看 | 无码人妻出轨黑人中文字幕 | 国产乱人偷精品人妻a片 | 国产亚洲欧美在线专区 | 精品一二三区久久aaa片 | 亚洲一区二区三区播放 | 无码国产激情在线观看 | 精品国产一区二区三区av 性色 | 国产午夜福利亚洲第一 | 亚洲国产精品成人久久蜜臀 | 人人澡人人妻人人爽人人蜜桃 | av无码不卡在线观看免费 | 亚洲精品国偷拍自产在线麻豆 | 国产精品久久久久久无码 | 日韩亚洲欧美精品综合 | 正在播放老肥熟妇露脸 | 人妻与老人中文字幕 | 国产精品成人av在线观看 | 色一情一乱一伦 | 久久伊人色av天堂九九小黄鸭 | 人妻插b视频一区二区三区 | 青青青手机频在线观看 | 午夜福利试看120秒体验区 | 狠狠cao日日穞夜夜穞av | 98国产精品综合一区二区三区 | 国产真人无遮挡作爱免费视频 | 骚片av蜜桃精品一区 | аⅴ资源天堂资源库在线 | 国产亚洲人成a在线v网站 | 清纯唯美经典一区二区 | 日韩精品a片一区二区三区妖精 | 精品无码国产一区二区三区av | 综合激情五月综合激情五月激情1 | 男女爱爱好爽视频免费看 | 又湿又紧又大又爽a视频国产 | 午夜肉伦伦影院 | 欧洲vodafone精品性 | 人人妻人人澡人人爽人人精品 | 波多野结衣乳巨码无在线观看 | 精品aⅴ一区二区三区 | 国产精华av午夜在线观看 | 成人亚洲精品久久久久 | 四虎国产精品一区二区 | 东京一本一道一二三区 | 少妇性l交大片欧洲热妇乱xxx | 丰满肥臀大屁股熟妇激情视频 | 九九在线中文字幕无码 | 激情人妻另类人妻伦 | 又大又硬又爽免费视频 | 亚洲人成网站免费播放 | 娇妻被黑人粗大高潮白浆 | 国产精品久久久 | 国产精品毛多多水多 | 欧美性生交活xxxxxdddd | 久久久久久av无码免费看大片 | 久久aⅴ免费观看 | 蜜臀av无码人妻精品 | 综合激情五月综合激情五月激情1 | 国产午夜精品一区二区三区嫩草 | 中国女人内谢69xxxx | 亚洲 激情 小说 另类 欧美 | 国产情侣作爱视频免费观看 | 天堂无码人妻精品一区二区三区 | 中文久久乱码一区二区 | 国产人妻人伦精品 | √天堂资源地址中文在线 | 人人妻人人澡人人爽欧美精品 | 国产精品久久精品三级 | 中文字幕乱码人妻二区三区 | 日本熟妇大屁股人妻 | 色综合天天综合狠狠爱 | 99久久精品无码一区二区毛片 | 俄罗斯老熟妇色xxxx | 亚洲综合久久一区二区 | 亚洲一区二区三区四区 | 一个人免费观看的www视频 | 亚洲精品国产品国语在线观看 | 亚洲精品国产品国语在线观看 | 国产精品亚洲综合色区韩国 | 亚洲精品www久久久 | 女人高潮内射99精品 | 中文字幕av无码一区二区三区电影 | 国语精品一区二区三区 | 99久久久国产精品无码免费 | 久久久久99精品国产片 | 国产精品对白交换视频 | 日日夜夜撸啊撸 | 国产成人综合美国十次 | 久久国产36精品色熟妇 | 国产激情无码一区二区app | 给我免费的视频在线观看 | 国语精品一区二区三区 | 国产色视频一区二区三区 | 亚洲第一网站男人都懂 | 欧美肥老太牲交大战 | 日产精品99久久久久久 | 午夜福利一区二区三区在线观看 | 亚洲日韩乱码中文无码蜜桃臀网站 | 成 人影片 免费观看 | 老太婆性杂交欧美肥老太 | 76少妇精品导航 | 丰满人妻翻云覆雨呻吟视频 | 国产成人无码a区在线观看视频app | 又大又硬又爽免费视频 | 国产精品亚洲综合色区韩国 | 奇米影视7777久久精品人人爽 | 亚洲乱码国产乱码精品精 | 无码人妻精品一区二区三区不卡 | 亚洲一区av无码专区在线观看 | 久久综合九色综合97网 | 免费视频欧美无人区码 | 无码av最新清无码专区吞精 | 久久99久久99精品中文字幕 | 天堂在线观看www | 久久人人爽人人爽人人片ⅴ | 日本肉体xxxx裸交 | 桃花色综合影院 | 国产suv精品一区二区五 | 成年女人永久免费看片 | 乌克兰少妇性做爰 | 久久精品中文闷骚内射 | 午夜福利一区二区三区在线观看 | 丰满肥臀大屁股熟妇激情视频 | 亚洲色欲久久久综合网东京热 | 在线观看国产午夜福利片 | 国产xxx69麻豆国语对白 | 正在播放老肥熟妇露脸 | 一本色道久久综合亚洲精品不卡 | 好爽又高潮了毛片免费下载 | 亚洲中文字幕在线观看 | 高清无码午夜福利视频 | 久久久国产精品无码免费专区 | 欧美丰满少妇xxxx性 | 强奷人妻日本中文字幕 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 久久久精品456亚洲影院 | 成人一在线视频日韩国产 | 成人影院yy111111在线观看 | 亚拍精品一区二区三区探花 | 美女毛片一区二区三区四区 | 鲁一鲁av2019在线 | 欧美变态另类xxxx | 久久久久久国产精品无码下载 | 人人妻人人澡人人爽欧美一区九九 | 蜜桃视频插满18在线观看 | 丁香花在线影院观看在线播放 | 欧美三级a做爰在线观看 | 亚洲春色在线视频 | 国产亚洲精品久久久久久久 | 久久国内精品自在自线 | 亚洲综合精品香蕉久久网 | 国产莉萝无码av在线播放 | 蜜臀av无码人妻精品 | 丰满人妻精品国产99aⅴ | 午夜精品久久久久久久 | 在线观看国产午夜福利片 | 国产精品爱久久久久久久 | 国产精品久久久久久无码 | 少妇高潮喷潮久久久影院 | 国产成人无码av片在线观看不卡 | 精品久久综合1区2区3区激情 | 一本久久伊人热热精品中文字幕 | 精品无人区无码乱码毛片国产 | 51国偷自产一区二区三区 | 国产亚洲精品精品国产亚洲综合 | 人妻天天爽夜夜爽一区二区 | 2020久久香蕉国产线看观看 | 亚洲日本va中文字幕 | 欧美乱妇无乱码大黄a片 | 精品 日韩 国产 欧美 视频 | 国产两女互慰高潮视频在线观看 | 色综合视频一区二区三区 | 天天拍夜夜添久久精品 | 亚洲成a人片在线观看日本 | 99精品无人区乱码1区2区3区 | 亚洲一区二区三区含羞草 | 99久久久无码国产精品免费 | 久久精品女人的天堂av | 中文字幕无码av激情不卡 | 国内精品人妻无码久久久影院蜜桃 | 久久久久成人片免费观看蜜芽 | 亚洲 日韩 欧美 成人 在线观看 | 全球成人中文在线 | 中文无码精品a∨在线观看不卡 | 国产成人精品一区二区在线小狼 | yw尤物av无码国产在线观看 | 成人免费视频一区二区 | 久久国产36精品色熟妇 | 性色欲情网站iwww九文堂 | 国产精品久久久久久亚洲毛片 | 精品人妻中文字幕有码在线 | 日本大乳高潮视频在线观看 | 国产suv精品一区二区五 | 激情人妻另类人妻伦 | 无码人中文字幕 | 亚洲区欧美区综合区自拍区 | 国产亚洲精品久久久ai换 | 中文无码成人免费视频在线观看 | 性欧美牲交在线视频 | 夜夜高潮次次欢爽av女 | 欧美阿v高清资源不卡在线播放 | 欧美猛少妇色xxxxx | 人妻少妇被猛烈进入中文字幕 | 久9re热视频这里只有精品 | 亚洲中文无码av永久不收费 | 性生交大片免费看女人按摩摩 | 午夜男女很黄的视频 | 最近中文2019字幕第二页 | 色综合久久88色综合天天 | 色五月五月丁香亚洲综合网 | 99久久精品日本一区二区免费 | 国产亚洲精品久久久久久大师 | 性色欲情网站iwww九文堂 | 亚洲精品成a人在线观看 | 久久精品99久久香蕉国产色戒 | 秋霞成人午夜鲁丝一区二区三区 | 国产另类ts人妖一区二区 | 久久成人a毛片免费观看网站 | 玩弄中年熟妇正在播放 | 亚洲精品久久久久avwww潮水 | 丰满妇女强制高潮18xxxx | 蜜臀aⅴ国产精品久久久国产老师 | 日本大香伊一区二区三区 | 99久久精品午夜一区二区 | 精品国产一区二区三区av 性色 | 色欲综合久久中文字幕网 | 日日噜噜噜噜夜夜爽亚洲精品 | 精品无人国产偷自产在线 | 精品久久8x国产免费观看 | 福利一区二区三区视频在线观看 | 亚洲乱码日产精品bd | 国产情侣作爱视频免费观看 | 久久亚洲日韩精品一区二区三区 | 最近免费中文字幕中文高清百度 | 88国产精品欧美一区二区三区 | 性做久久久久久久久 | 六月丁香婷婷色狠狠久久 | 久激情内射婷内射蜜桃人妖 | 午夜精品久久久久久久久 | 伊在人天堂亚洲香蕉精品区 | 亚洲毛片av日韩av无码 | 人人妻人人澡人人爽精品欧美 | 内射巨臀欧美在线视频 | 伊人色综合久久天天小片 | 国产精品.xx视频.xxtv | 香蕉久久久久久av成人 | 女高中生第一次破苞av | 在线观看免费人成视频 | 动漫av网站免费观看 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲欧美精品伊人久久 | 色偷偷人人澡人人爽人人模 | 妺妺窝人体色www婷婷 | 日日噜噜噜噜夜夜爽亚洲精品 | 丰腴饱满的极品熟妇 | 99久久婷婷国产综合精品青草免费 | 国产成人无码a区在线观看视频app | 377p欧洲日本亚洲大胆 | 装睡被陌生人摸出水好爽 | 草草网站影院白丝内射 | 亚洲精品久久久久久久久久久 | 亚洲精品中文字幕久久久久 | 中文毛片无遮挡高清免费 | 男人和女人高潮免费网站 | 国产香蕉尹人视频在线 | 波多野结衣av在线观看 | 亚洲精品国偷拍自产在线观看蜜桃 | 日本精品久久久久中文字幕 | 亚洲啪av永久无码精品放毛片 | 水蜜桃亚洲一二三四在线 | 国产人妻精品午夜福利免费 | 亚洲欧美色中文字幕在线 | 狠狠综合久久久久综合网 | 精品国产aⅴ无码一区二区 | 欧美精品一区二区精品久久 | 久久精品无码一区二区三区 | 亚洲精品中文字幕久久久久 | 国模大胆一区二区三区 | 在线精品国产一区二区三区 | 亚洲人成网站在线播放942 | aⅴ在线视频男人的天堂 | 欧美日韩久久久精品a片 | 日韩av无码一区二区三区不卡 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 成人亚洲精品久久久久 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 久久天天躁夜夜躁狠狠 | 中文字幕中文有码在线 | 亚洲中文字幕va福利 | 日本乱偷人妻中文字幕 | 久久精品国产99久久6动漫 | 天天摸天天透天天添 | 性色欲网站人妻丰满中文久久不卡 | 精品国产精品久久一区免费式 | 国产办公室秘书无码精品99 | 国産精品久久久久久久 | 国产午夜亚洲精品不卡下载 | 成熟妇人a片免费看网站 | 无码人妻精品一区二区三区下载 | 99久久人妻精品免费一区 | 国产精品毛片一区二区 | 国产在线精品一区二区高清不卡 | 中国女人内谢69xxxxxa片 | 玩弄人妻少妇500系列视频 | 亚洲精品一区三区三区在线观看 | 国产一区二区三区四区五区加勒比 | 中文字幕色婷婷在线视频 | 性生交大片免费看女人按摩摩 | 国产精品丝袜黑色高跟鞋 | 亚洲日韩一区二区三区 | 成人av无码一区二区三区 | 国产内射爽爽大片视频社区在线 | 大乳丰满人妻中文字幕日本 | 亚洲欧美中文字幕5发布 | 亚洲狠狠色丁香婷婷综合 | 最近的中文字幕在线看视频 | 精品久久久久久亚洲精品 | 亚洲中文字幕在线观看 | 一本久道久久综合婷婷五月 | 嫩b人妻精品一区二区三区 | 夜夜影院未满十八勿进 | 国产亚洲精品久久久久久久 | 狠狠色噜噜狠狠狠狠7777米奇 | 亚洲日韩中文字幕在线播放 | 亚洲中文字幕久久无码 | 国产精品人妻一区二区三区四 | 国产艳妇av在线观看果冻传媒 | 久久人人97超碰a片精品 | 国产精品美女久久久久av爽李琼 | 久久精品中文字幕大胸 | 日本熟妇大屁股人妻 | 成人女人看片免费视频放人 | 伊人久久婷婷五月综合97色 | 欧美日本免费一区二区三区 | 日日碰狠狠丁香久燥 | 亚洲aⅴ无码成人网站国产app | 国产亚洲美女精品久久久2020 | 日韩人妻无码一区二区三区久久99 | 一本久道高清无码视频 | 大色综合色综合网站 | 3d动漫精品啪啪一区二区中 | 老头边吃奶边弄进去呻吟 | 国产乱人无码伦av在线a | 无套内谢老熟女 | 精品久久久久久人妻无码中文字幕 | 亚洲熟悉妇女xxx妇女av | 久久国语露脸国产精品电影 | 国产成人综合色在线观看网站 | 中文字幕人妻丝袜二区 | 在线a亚洲视频播放在线观看 | 欧美兽交xxxx×视频 | 大肉大捧一进一出好爽视频 | 亚洲色成人中文字幕网站 | 国产精品久久久久无码av色戒 | 97夜夜澡人人爽人人喊中国片 | 在线天堂新版最新版在线8 | 无码国产激情在线观看 | 国产特级毛片aaaaaa高潮流水 | 西西人体www44rt大胆高清 | 久久亚洲中文字幕精品一区 | 老熟妇仑乱视频一区二区 | 久久久国产一区二区三区 | 中文字幕无码日韩专区 | 性色欲网站人妻丰满中文久久不卡 | 亚洲日韩av一区二区三区四区 | 亚洲色在线无码国产精品不卡 | 国产一区二区三区影院 | 久久久精品人妻久久影视 | 特黄特色大片免费播放器图片 | 中文字幕人妻无码一夲道 | 麻豆成人精品国产免费 | 久久久久人妻一区精品色欧美 | 久久精品中文闷骚内射 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 午夜精品一区二区三区的区别 | 日本又色又爽又黄的a片18禁 | 午夜性刺激在线视频免费 | 大屁股大乳丰满人妻 | 欧美午夜特黄aaaaaa片 | 亚洲经典千人经典日产 | 超碰97人人做人人爱少妇 | 影音先锋中文字幕无码 | 亚洲精品久久久久avwww潮水 | 日本免费一区二区三区最新 | 领导边摸边吃奶边做爽在线观看 | 精品久久久久久亚洲精品 | 丰满人妻精品国产99aⅴ | 少妇人妻av毛片在线看 | 波多野结衣 黑人 | 初尝人妻少妇中文字幕 | 天堂一区人妻无码 | 亚洲人成影院在线无码按摩店 | 精品少妇爆乳无码av无码专区 | 欧美成人免费全部网站 | 偷窥日本少妇撒尿chinese | 国产精品丝袜黑色高跟鞋 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 人人澡人人妻人人爽人人蜜桃 | 国产成人av免费观看 | 老司机亚洲精品影院 | 丰满少妇弄高潮了www | 国产精品人人妻人人爽 | 蜜臀aⅴ国产精品久久久国产老师 | 国产后入清纯学生妹 | 中文字幕无码av激情不卡 | 丰满少妇熟乱xxxxx视频 | 亚洲а∨天堂久久精品2021 | 日本精品人妻无码免费大全 | 欧美丰满少妇xxxx性 | 亚洲综合无码久久精品综合 | 亚洲啪av永久无码精品放毛片 | 在线亚洲高清揄拍自拍一品区 | 伊人久久大香线蕉亚洲 | 精品国精品国产自在久国产87 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲色欲色欲天天天www | 亚洲国产欧美日韩精品一区二区三区 | 亚洲日本在线电影 | 欧美人与禽猛交狂配 | 久久久久国色av免费观看性色 | 18精品久久久无码午夜福利 | 久激情内射婷内射蜜桃人妖 | 中文精品久久久久人妻不卡 | 日韩人妻无码一区二区三区久久99 | 国产精品美女久久久久av爽李琼 | 亚洲欧美日韩综合久久久 | 又湿又紧又大又爽a视频国产 | 又粗又大又硬毛片免费看 | 无套内谢老熟女 | 国产精品无码久久av | 国内精品久久久久久中文字幕 | 国产一区二区三区精品视频 | 三上悠亚人妻中文字幕在线 | 粗大的内捧猛烈进出视频 | 亚洲区欧美区综合区自拍区 | 国产成人精品视频ⅴa片软件竹菊 | 欧美xxxxx精品 | 一个人看的视频www在线 | 久久久久亚洲精品男人的天堂 | 玩弄中年熟妇正在播放 | 国产精品va在线观看无码 | 久久久久久国产精品无码下载 | aⅴ在线视频男人的天堂 | 18黄暴禁片在线观看 | 欧美怡红院免费全部视频 | 日韩欧美中文字幕公布 | 激情国产av做激情国产爱 | 人人妻人人澡人人爽人人精品 | 日本免费一区二区三区最新 | 国产亚洲日韩欧美另类第八页 | 人人妻人人澡人人爽精品欧美 | 精品人妻av区 | 亚洲中文字幕乱码av波多ji | 日本成熟视频免费视频 | 亚洲人亚洲人成电影网站色 | 高清国产亚洲精品自在久久 | 久久天天躁夜夜躁狠狠 | 亚无码乱人伦一区二区 | 国产在线无码精品电影网 | 国产人妻精品一区二区三区不卡 | 无码成人精品区在线观看 | 天堂亚洲免费视频 | 中文无码伦av中文字幕 | 精品国产一区av天美传媒 | 国产亚洲视频中文字幕97精品 | 日本一区二区更新不卡 | 中文字幕无码视频专区 | 精品欧美一区二区三区久久久 | 中文字幕乱码亚洲无线三区 | 成人无码精品1区2区3区免费看 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲精品久久久久久一区二区 | 老熟女乱子伦 | 成人免费视频视频在线观看 免费 | 亚洲国产成人av在线观看 | 77777熟女视频在线观看 а天堂中文在线官网 | 中文字幕 亚洲精品 第1页 | 久久久久成人片免费观看蜜芽 | 国产精品久久久久影院嫩草 | 人人妻人人澡人人爽人人精品 | 国产成人人人97超碰超爽8 | 又紧又大又爽精品一区二区 | 强伦人妻一区二区三区视频18 | 无码精品人妻一区二区三区av | 久久久久亚洲精品男人的天堂 | 久久精品人人做人人综合 | 无码成人精品区在线观看 | 国产成人综合色在线观看网站 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲国产精品久久久天堂 | 欧美 日韩 人妻 高清 中文 | 精品午夜福利在线观看 | 精品人人妻人人澡人人爽人人 | 中文无码成人免费视频在线观看 | 999久久久国产精品消防器材 | 中文字幕乱码人妻二区三区 | 成人av无码一区二区三区 | 国产激情综合五月久久 | 国产精品亚洲а∨无码播放麻豆 | 成人aaa片一区国产精品 | 亚洲精品无码人妻无码 | 少妇高潮喷潮久久久影院 | 免费无码午夜福利片69 | 少妇被粗大的猛进出69影院 | 国产熟妇另类久久久久 | 欧美精品在线观看 | 精品成人av一区二区三区 | 国产极品视觉盛宴 | 中文字幕无码日韩欧毛 | 国产sm调教视频在线观看 | 久久久精品人妻久久影视 | 国产69精品久久久久app下载 | 国产午夜视频在线观看 | 国产精品内射视频免费 | 久久人人爽人人人人片 | 丰满少妇熟乱xxxxx视频 | 成熟人妻av无码专区 | 老司机亚洲精品影院无码 | 99精品国产综合久久久久五月天 | 成年美女黄网站色大免费视频 | 人人爽人人澡人人高潮 | 国产精品久免费的黄网站 | 精品国产青草久久久久福利 | 国产成人精品优优av | 国产女主播喷水视频在线观看 | 最新国产乱人伦偷精品免费网站 | 兔费看少妇性l交大片免费 | 亚洲国产av精品一区二区蜜芽 | 丰满人妻翻云覆雨呻吟视频 | 国内丰满熟女出轨videos | 亚洲s码欧洲m码国产av | 国产精品沙发午睡系列 | 给我免费的视频在线观看 | 成熟妇人a片免费看网站 | 中文无码伦av中文字幕 | 亚洲 日韩 欧美 成人 在线观看 | 两性色午夜免费视频 | 国产精品国产三级国产专播 | 97精品国产97久久久久久免费 | 红桃av一区二区三区在线无码av | 亚洲欧洲中文日韩av乱码 | 中文字幕无码日韩专区 | 亚洲精品无码人妻无码 | 熟女少妇人妻中文字幕 | 亚洲人成影院在线观看 | 国产精品无码一区二区三区不卡 | 国产av久久久久精东av | 5858s亚洲色大成网站www | 骚片av蜜桃精品一区 | 欧美日韩人成综合在线播放 | 窝窝午夜理论片影院 | 天堂а√在线地址中文在线 | 无人区乱码一区二区三区 | 无遮挡啪啪摇乳动态图 | 人人妻人人澡人人爽欧美一区 | 玩弄少妇高潮ⅹxxxyw | 少女韩国电视剧在线观看完整 | 野外少妇愉情中文字幕 | aa片在线观看视频在线播放 | 国产成人无码区免费内射一片色欲 | 熟妇人妻激情偷爽文 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 一本久久伊人热热精品中文字幕 | 老头边吃奶边弄进去呻吟 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 日日躁夜夜躁狠狠躁 | 国产成人综合美国十次 | 中文字幕乱码人妻无码久久 | 色综合久久网 | 4hu四虎永久在线观看 | 久久国产精品_国产精品 | 一区二区传媒有限公司 | 国产xxx69麻豆国语对白 | 六十路熟妇乱子伦 | 国产亚洲精品久久久久久久 | 中文字幕乱码亚洲无线三区 | 亚洲色欲色欲天天天www | 亚洲色成人中文字幕网站 | 99精品无人区乱码1区2区3区 | 99在线 | 亚洲 | 中文字幕无码日韩欧毛 | 亚洲精品欧美二区三区中文字幕 | 女人高潮内射99精品 | 日韩av无码一区二区三区 | 国产亚洲人成a在线v网站 | 欧美亚洲日韩国产人成在线播放 | 亚洲成av人片在线观看无码不卡 | 亚洲精品综合一区二区三区在线 | 亚洲精品综合五月久久小说 | 一个人看的视频www在线 | 一二三四社区在线中文视频 | 性欧美牲交在线视频 | 麻花豆传媒剧国产免费mv在线 | 国产成人一区二区三区在线观看 | 亚洲s色大片在线观看 | 无遮挡国产高潮视频免费观看 | 亚洲精品欧美二区三区中文字幕 | 小鲜肉自慰网站xnxx | 色 综合 欧美 亚洲 国产 | 国产精品毛多多水多 | 日本成熟视频免费视频 | 无码av中文字幕免费放 | 亚洲熟熟妇xxxx | 日日碰狠狠躁久久躁蜜桃 | 99久久精品日本一区二区免费 | 初尝人妻少妇中文字幕 | 一本大道久久东京热无码av | 漂亮人妻洗澡被公强 日日躁 | 日韩精品一区二区av在线 | 精品无码国产自产拍在线观看蜜 | 伊在人天堂亚洲香蕉精品区 | 日日摸天天摸爽爽狠狠97 | 无码任你躁久久久久久久 | 一个人免费观看的www视频 | 丰满肥臀大屁股熟妇激情视频 | 综合激情五月综合激情五月激情1 | 亚洲の无码国产の无码影院 | 久久久精品456亚洲影院 | 丁香啪啪综合成人亚洲 | 国产成人一区二区三区别 | 亚洲熟女一区二区三区 | 精品国产精品久久一区免费式 | 狠狠综合久久久久综合网 | 欧美性生交xxxxx久久久 | 无码国内精品人妻少妇 | 伊人久久大香线蕉午夜 | 天堂一区人妻无码 | 久久天天躁夜夜躁狠狠 | 大肉大捧一进一出好爽视频 | 欧美xxxx黑人又粗又长 | 丰满人妻翻云覆雨呻吟视频 | 亚洲国产日韩a在线播放 | 亚洲а∨天堂久久精品2021 | 国产精品亚洲lv粉色 | 色 综合 欧美 亚洲 国产 | 一区二区传媒有限公司 | 中文亚洲成a人片在线观看 | 伊人久久大香线焦av综合影院 | 成人免费视频视频在线观看 免费 | 夜夜高潮次次欢爽av女 | 亚洲区小说区激情区图片区 | 久久99热只有频精品8 | 国产亚洲人成a在线v网站 | 亚洲欧美综合区丁香五月小说 | 无码人中文字幕 | 欧美自拍另类欧美综合图片区 | 久久亚洲中文字幕无码 | 老子影院午夜伦不卡 | 国産精品久久久久久久 | 国产9 9在线 | 中文 | 98国产精品综合一区二区三区 | 精品一区二区不卡无码av | 东京热男人av天堂 | 亚洲中文字幕无码中文字在线 | ass日本丰满熟妇pics | 欧美35页视频在线观看 | 一本加勒比波多野结衣 | 亚洲欧美日韩成人高清在线一区 | 在线欧美精品一区二区三区 | 亚洲毛片av日韩av无码 | 午夜精品久久久久久久 | 久久久www成人免费毛片 | 夜精品a片一区二区三区无码白浆 | 欧美精品一区二区精品久久 | 老子影院午夜精品无码 | 麻豆md0077饥渴少妇 | 亚洲国产精品一区二区第一页 | 亚洲中文无码av永久不收费 | 亚洲国产精品久久久天堂 | 天天拍夜夜添久久精品大 | 欧美自拍另类欧美综合图片区 | 国产精品久免费的黄网站 | 又大又硬又黄的免费视频 | 狠狠色欧美亚洲狠狠色www | 一本精品99久久精品77 | 精品厕所偷拍各类美女tp嘘嘘 | 亚洲欧美国产精品专区久久 | 高潮毛片无遮挡高清免费 | 欧美三级a做爰在线观看 | 激情爆乳一区二区三区 | 扒开双腿疯狂进出爽爽爽视频 | 久久婷婷五月综合色国产香蕉 | 男女爱爱好爽视频免费看 | 亚洲精品国偷拍自产在线麻豆 | 在线成人www免费观看视频 | 久久人妻内射无码一区三区 | 精品欧洲av无码一区二区三区 | 亚洲精品成a人在线观看 | 亚洲国产精品久久久久久 | 在线精品国产一区二区三区 | 无码人妻精品一区二区三区下载 | 日韩人妻系列无码专区 | 中文字幕人妻无码一区二区三区 | 狂野欧美激情性xxxx | 精品人人妻人人澡人人爽人人 | 午夜熟女插插xx免费视频 | 亚洲综合久久一区二区 | 在线播放免费人成毛片乱码 | 高中生自慰www网站 | 成人无码视频在线观看网站 | 国产精品.xx视频.xxtv | 久久亚洲日韩精品一区二区三区 | 国产热a欧美热a在线视频 | 色欲久久久天天天综合网精品 | 成人一在线视频日韩国产 | 欧美丰满少妇xxxx性 | 亚洲熟妇色xxxxx欧美老妇y | 风流少妇按摩来高潮 | 日本爽爽爽爽爽爽在线观看免 | 欧美日韩视频无码一区二区三 | 久久久久av无码免费网 | 国产亚洲欧美日韩亚洲中文色 | 国产午夜福利亚洲第一 | 欧美日韩人成综合在线播放 | 国产莉萝无码av在线播放 | 东京一本一道一二三区 | 中文无码精品a∨在线观看不卡 | 亚洲欧美日韩综合久久久 | 亚洲中文字幕乱码av波多ji | 在线精品国产一区二区三区 | 亚洲一区二区三区国产精华液 | 国产午夜亚洲精品不卡 | 精品一区二区不卡无码av | 国产亚洲人成a在线v网站 | 99er热精品视频 | 免费播放一区二区三区 | 久久午夜无码鲁丝片午夜精品 | 兔费看少妇性l交大片免费 | 亚洲日韩av一区二区三区中文 | 亚洲国产成人av在线观看 | 亚洲精品综合五月久久小说 | 人妻少妇精品无码专区动漫 | 偷窥日本少妇撒尿chinese | 男女猛烈xx00免费视频试看 | 亚洲国产午夜精品理论片 | 亚洲日韩精品欧美一区二区 | 白嫩日本少妇做爰 | 国产亚洲精品久久久闺蜜 | 国内综合精品午夜久久资源 | 国产精品人人爽人人做我的可爱 | 粗大的内捧猛烈进出视频 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 久激情内射婷内射蜜桃人妖 | 欧美变态另类xxxx | 亚洲国产午夜精品理论片 | 亚洲午夜福利在线观看 | 亚洲狠狠色丁香婷婷综合 | 中文字幕精品av一区二区五区 | 未满成年国产在线观看 | 99在线 | 亚洲 | 亚洲成a人片在线观看无码 | 国产一区二区三区影院 | 天干天干啦夜天干天2017 | 少妇邻居内射在线 | 国产无遮挡吃胸膜奶免费看 | 中文无码伦av中文字幕 | 成人免费视频视频在线观看 免费 | 亚洲精品一区二区三区婷婷月 | 999久久久国产精品消防器材 | 中文字幕无码免费久久9一区9 | 亚洲成av人片天堂网无码】 | 最新国产麻豆aⅴ精品无码 | av小次郎收藏 | 黑人粗大猛烈进出高潮视频 | 国产内射老熟女aaaa | 野外少妇愉情中文字幕 | 国产av无码专区亚洲awww | 又粗又大又硬毛片免费看 | 88国产精品欧美一区二区三区 | 国产精品爱久久久久久久 | 国产 精品 自在自线 | 色婷婷综合中文久久一本 | 国产精品久久精品三级 | 亚洲性无码av中文字幕 | 久久久久久国产精品无码下载 | 国产色精品久久人妻 | 国产精品国产三级国产专播 | 人妻互换免费中文字幕 | aⅴ在线视频男人的天堂 | 久久人人爽人人爽人人片ⅴ | 午夜精品一区二区三区在线观看 | 免费无码的av片在线观看 | 成人免费无码大片a毛片 | 国产成人无码av在线影院 | 欧美三级a做爰在线观看 | 久久久久久a亚洲欧洲av冫 | 一本色道久久综合亚洲精品不卡 | 美女扒开屁股让男人桶 | 大地资源网第二页免费观看 | 欧美真人作爱免费视频 | 久久精品丝袜高跟鞋 | 日日天干夜夜狠狠爱 | 亚洲成a人片在线观看无码3d | 日韩人妻系列无码专区 | 荫蒂被男人添的好舒服爽免费视频 | 内射巨臀欧美在线视频 | 久久婷婷五月综合色国产香蕉 | 久久天天躁狠狠躁夜夜免费观看 | 免费国产成人高清在线观看网站 | 一本久久伊人热热精品中文字幕 | 亚洲精品一区国产 | 丝袜 中出 制服 人妻 美腿 | 内射欧美老妇wbb | 在线观看国产一区二区三区 | 久久亚洲中文字幕精品一区 | 双乳奶水饱满少妇呻吟 | 无码吃奶揉捏奶头高潮视频 | 国产在线一区二区三区四区五区 | 乱中年女人伦av三区 | 大地资源网第二页免费观看 | 内射后入在线观看一区 | 少妇愉情理伦片bd | 亚洲欧美综合区丁香五月小说 | 午夜嘿嘿嘿影院 | 亚洲 高清 成人 动漫 | 亚洲国产高清在线观看视频 | 国产精品久久久久久亚洲影视内衣 | 无码av中文字幕免费放 | 99国产精品白浆在线观看免费 | 无码人妻丰满熟妇区五十路百度 | 天堂亚洲2017在线观看 | 亚洲成色www久久网站 | 77777熟女视频在线观看 а天堂中文在线官网 | 夫妻免费无码v看片 | 内射爽无广熟女亚洲 | 国产精品无码成人午夜电影 | 色狠狠av一区二区三区 | 国内精品久久久久久中文字幕 | 精品国精品国产自在久国产87 | 大地资源中文第3页 | 性开放的女人aaa片 | 国产成人精品视频ⅴa片软件竹菊 | 日本护士xxxxhd少妇 | 一本久久a久久精品亚洲 | 国产精品第一国产精品 | 奇米影视7777久久精品人人爽 | 狠狠色噜噜狠狠狠7777奇米 | 九九在线中文字幕无码 | 一个人看的视频www在线 | 在教室伦流澡到高潮hnp视频 | 国产亚洲人成a在线v网站 | 日本精品久久久久中文字幕 | 人人澡人摸人人添 | 欧美国产日韩亚洲中文 | 精品一二三区久久aaa片 | 久久综合网欧美色妞网 | 亲嘴扒胸摸屁股激烈网站 | 久久久久99精品成人片 | 熟妇人妻中文av无码 | 国内少妇偷人精品视频免费 | 国产精品多人p群无码 | 三级4级全黄60分钟 | 午夜男女很黄的视频 | 亚洲综合无码一区二区三区 | 99久久久国产精品无码免费 | 欧美人与牲动交xxxx | 内射白嫩少妇超碰 | 亚洲午夜无码久久 | 一本大道久久东京热无码av | 丰满少妇女裸体bbw | 成人免费视频在线观看 | 久久精品99久久香蕉国产色戒 | 亚洲а∨天堂久久精品2021 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产xxx69麻豆国语对白 | 中文字幕人妻丝袜二区 | 永久免费观看美女裸体的网站 | 欧美三级不卡在线观看 | 一个人看的www免费视频在线观看 | 国产无遮挡又黄又爽免费视频 | 国产成人av免费观看 | 国产亚洲精品久久久久久国模美 | 日产精品99久久久久久 | 无码乱肉视频免费大全合集 | 国精产品一品二品国精品69xx | 久久综合久久自在自线精品自 | 国产精品国产自线拍免费软件 | 日韩少妇白浆无码系列 | 娇妻被黑人粗大高潮白浆 | 亚洲熟妇色xxxxx欧美老妇y | 欧美喷潮久久久xxxxx | 日本一卡二卡不卡视频查询 | 国语精品一区二区三区 | 俺去俺来也在线www色官网 | 日韩精品无码一本二本三本色 | 亚洲成色在线综合网站 | 国产精品无码久久av | 日韩人妻系列无码专区 | 波多野结衣av在线观看 | 欧美性生交活xxxxxdddd | 伊人久久婷婷五月综合97色 | 精品久久久久香蕉网 | 粉嫩少妇内射浓精videos | 亚洲熟女一区二区三区 | 亚洲 激情 小说 另类 欧美 | 国产无套粉嫩白浆在线 | 人妻无码久久精品人妻 | 天天拍夜夜添久久精品 | 国产色视频一区二区三区 | 亚洲欧洲日本无在线码 | 无码人妻av免费一区二区三区 | 亚洲熟女一区二区三区 | 99麻豆久久久国产精品免费 | 97夜夜澡人人爽人人喊中国片 | 亚洲精品中文字幕乱码 | 久久久久99精品成人片 | 夜夜夜高潮夜夜爽夜夜爰爰 | 中文字幕乱码中文乱码51精品 | 国产成人无码av片在线观看不卡 | 欧美性黑人极品hd | 亚洲а∨天堂久久精品2021 | 亚洲а∨天堂久久精品2021 | 久久久久久av无码免费看大片 | 亚洲色大成网站www | 色婷婷综合激情综在线播放 | 在线视频网站www色 | 99久久婷婷国产综合精品青草免费 | 无套内谢的新婚少妇国语播放 | 国产午夜精品一区二区三区嫩草 | 丰满少妇女裸体bbw | 小泽玛莉亚一区二区视频在线 | 人人妻人人藻人人爽欧美一区 | 十八禁真人啪啪免费网站 | 午夜不卡av免费 一本久久a久久精品vr综合 | 国产麻豆精品精东影业av网站 | 无码国内精品人妻少妇 | 国产无遮挡又黄又爽又色 | 熟女少妇在线视频播放 | 性生交大片免费看l | 岛国片人妻三上悠亚 | 兔费看少妇性l交大片免费 | 免费中文字幕日韩欧美 | 中文字幕色婷婷在线视频 | 国产97人人超碰caoprom | 国产福利视频一区二区 | 强伦人妻一区二区三区视频18 | 亚洲一区二区三区香蕉 | 亚洲国精产品一二二线 | 久久久久久久久888 | 欧美人与动性行为视频 | 中文字幕人妻无码一区二区三区 | 乱人伦中文视频在线观看 | 免费人成在线视频无码 | 无码午夜成人1000部免费视频 | 久久久久久亚洲精品a片成人 | 无码乱肉视频免费大全合集 | 国产亚洲精品久久久久久 | 精品人妻人人做人人爽夜夜爽 | 六月丁香婷婷色狠狠久久 | 女高中生第一次破苞av | 中文字幕无码视频专区 | 无码精品人妻一区二区三区av | 久久www免费人成人片 | a片免费视频在线观看 | 亚洲日韩一区二区 | 国产口爆吞精在线视频 | 5858s亚洲色大成网站www | 粗大的内捧猛烈进出视频 | 成人免费视频在线观看 | 日本大香伊一区二区三区 | 大地资源网第二页免费观看 | 福利一区二区三区视频在线观看 | 亚洲成熟女人毛毛耸耸多 | 爆乳一区二区三区无码 | 无码国产乱人伦偷精品视频 | а天堂中文在线官网 | 亚洲综合无码一区二区三区 | 又湿又紧又大又爽a视频国产 | 日韩少妇内射免费播放 | 精品少妇爆乳无码av无码专区 | 性欧美疯狂xxxxbbbb | 粗大的内捧猛烈进出视频 | 澳门永久av免费网站 | 狠狠色噜噜狠狠狠狠7777米奇 | 熟妇人妻无乱码中文字幕 | 亚洲国产精品毛片av不卡在线 | 国产婷婷色一区二区三区在线 | 久久亚洲中文字幕无码 | 日日噜噜噜噜夜夜爽亚洲精品 | 久久久久久久久888 | 女人和拘做爰正片视频 | 精品亚洲韩国一区二区三区 | 性色欲网站人妻丰满中文久久不卡 | 国内老熟妇对白xxxxhd | 免费观看黄网站 | 国产猛烈高潮尖叫视频免费 | 嫩b人妻精品一区二区三区 | 欧美日韩一区二区综合 | 丰满少妇高潮惨叫视频 | 女人和拘做爰正片视频 | 婷婷六月久久综合丁香 | 久久99精品国产麻豆蜜芽 | 亚洲精品一区国产 | 久久亚洲中文字幕无码 | 国产精品久久久午夜夜伦鲁鲁 | 午夜精品久久久内射近拍高清 | 东京无码熟妇人妻av在线网址 | 亚洲色欲色欲欲www在线 | 中文字幕 人妻熟女 | av无码不卡在线观看免费 | 好爽又高潮了毛片免费下载 | 国产熟妇高潮叫床视频播放 | 久久久久久久久888 | 一区二区三区乱码在线 | 欧洲 | 大地资源中文第3页 | 亚洲无人区一区二区三区 | 亚洲精品国产精品乱码不卡 | 九九在线中文字幕无码 | 人人妻人人澡人人爽人人精品浪潮 | 熟女俱乐部五十路六十路av | 强伦人妻一区二区三区视频18 | 特黄特色大片免费播放器图片 | 少妇人妻大乳在线视频 | 久久精品人人做人人综合试看 | 久久99精品久久久久久动态图 | 日韩精品a片一区二区三区妖精 | 久久精品视频在线看15 | 久久精品国产日本波多野结衣 | 亚洲区小说区激情区图片区 | av香港经典三级级 在线 | 久久99精品国产麻豆蜜芽 | 波多野42部无码喷潮在线 | 国产特级毛片aaaaaa高潮流水 | 亚洲日本va中文字幕 | 日本又色又爽又黄的a片18禁 | 亚洲色成人中文字幕网站 | 性欧美牲交xxxxx视频 | 久久久久久久女国产乱让韩 | a在线亚洲男人的天堂 | av在线亚洲欧洲日产一区二区 | 久久精品丝袜高跟鞋 | 大肉大捧一进一出好爽视频 | 老熟妇仑乱视频一区二区 | 亲嘴扒胸摸屁股激烈网站 | 亚洲欧美国产精品专区久久 | 最新国产乱人伦偷精品免费网站 | 国产亲子乱弄免费视频 | 久久综合给久久狠狠97色 | 午夜精品久久久内射近拍高清 | 精品无码一区二区三区的天堂 | 娇妻被黑人粗大高潮白浆 | 四虎影视成人永久免费观看视频 | 高潮毛片无遮挡高清免费视频 | 亚洲熟悉妇女xxx妇女av | 人人澡人摸人人添 | 一本大道伊人av久久综合 | 亚洲乱亚洲乱妇50p | 欧美午夜特黄aaaaaa片 | 中文字幕av伊人av无码av | 国产成人精品视频ⅴa片软件竹菊 | 噜噜噜亚洲色成人网站 | 欧美黑人乱大交 | 狠狠色色综合网站 | 国产精品人妻一区二区三区四 | 伊人久久大香线蕉亚洲 | 久久伊人色av天堂九九小黄鸭 | 亚洲中文字幕乱码av波多ji | 好屌草这里只有精品 | 色狠狠av一区二区三区 | 狠狠色丁香久久婷婷综合五月 | 国产精品美女久久久久av爽李琼 | 亚洲国产精品一区二区美利坚 | 未满成年国产在线观看 | 国精品人妻无码一区二区三区蜜柚 | 国产亲子乱弄免费视频 | 欧美老人巨大xxxx做受 | 久久午夜夜伦鲁鲁片无码免费 | 久久精品视频在线看15 | 无码av岛国片在线播放 | aa片在线观看视频在线播放 | 在线观看免费人成视频 | 无码人妻丰满熟妇区五十路百度 | 300部国产真实乱 | 亚洲日韩乱码中文无码蜜桃臀网站 | 色综合久久网 | 欧美野外疯狂做受xxxx高潮 | 无码帝国www无码专区色综合 | 天天躁夜夜躁狠狠是什么心态 | 色婷婷香蕉在线一区二区 | 精品无码一区二区三区爱欲 | 午夜性刺激在线视频免费 | 精品久久久久久亚洲精品 | 中文字幕无码热在线视频 | 少妇无码一区二区二三区 | 精品久久8x国产免费观看 | 大肉大捧一进一出视频出来呀 | 扒开双腿疯狂进出爽爽爽视频 | 中文字幕亚洲情99在线 | 久久亚洲中文字幕精品一区 | 精品国产一区av天美传媒 | 97久久精品无码一区二区 | 中文字幕无码视频专区 | 色噜噜亚洲男人的天堂 | 少妇性荡欲午夜性开放视频剧场 | 久久久久久av无码免费看大片 | 黑人巨大精品欧美黑寡妇 | 亚洲大尺度无码无码专区 | 成人精品视频一区二区三区尤物 | 亚洲成av人在线观看网址 | 无码免费一区二区三区 | 曰韩少妇内射免费播放 | 亚洲狠狠色丁香婷婷综合 | 精品欧洲av无码一区二区三区 | 精品人妻av区 | 图片小说视频一区二区 | 国产精品无码一区二区三区不卡 | 青青青手机频在线观看 | 两性色午夜免费视频 | 日本又色又爽又黄的a片18禁 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 免费乱码人妻系列无码专区 | 亚洲欧美精品aaaaaa片 | 亚洲 高清 成人 动漫 | 女人被男人爽到呻吟的视频 | 色综合久久88色综合天天 | 天天躁日日躁狠狠躁免费麻豆 | 少妇人妻大乳在线视频 | 一本久道久久综合婷婷五月 | 婷婷色婷婷开心五月四房播播 | av在线亚洲欧洲日产一区二区 | 亚洲熟妇自偷自拍另类 | 亚洲综合伊人久久大杳蕉 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 国产精品成人av在线观看 | 国产深夜福利视频在线 | 中文毛片无遮挡高清免费 |