久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

詳解Spring事件發布與監聽機制

瀏覽:69日期:2023-07-05 14:44:49
目錄一、ApplicationContext 事件機制二、ApplicationListener 監聽器三、ApplicationEvent 事件四、自定義事件和監聽器五、注解式監聽器一、ApplicationContext 事件機制

ApplicationContext 事件機制采用觀察者設計模式來實現,通過 ApplicationEvent 事件類和 ApplicationListener 監聽器接口,可以實現 ApplicationContext 事件發布與處理。

每當 ApplicationContext 發布 ApplicationEvent 時,如果 Spring 容器中有 ApplicationListener bean,則監聽器會被觸發執行相應的處理。當然,ApplicationEvent 事件的發布需要顯示觸發,要么 Spring 顯示觸發,要么我們顯示觸發。

二、ApplicationListener 監聽器

定義應用監聽器需要實現的接口。此接口繼承了 JDK 標準的事件監聽器接口 EventListener,EventListener 接口是一個空的標記接口,推薦所有事件監聽器必須要繼承它。

package org.springframework.context;import java.util.EventListener;@FunctionalInterfacepublic interface ApplicationListener<E extends ApplicationEvent> extends EventListener {/** * 處理應用事件 */void onApplicationEvent(E event);}

package java.util;public interface EventListener {}

ApplicationListener 是個泛型接口,我們自定義此接口的實現類時,如果指定了泛型的具體事件類,那么只會監聽此事件。如果不指定具體的泛型,則會監聽 ApplicationEvent 抽象類的所有子類事件。

如下我們定義一個監聽器,監聽具體的事件,例如監聽 ApplicationStartedEvent 事件。

package com.chenpi;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.context.event.ApplicationStartedEvent;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;@Slf4j@Componentpublic class MyApplicationListener implements ApplicationListener<ApplicationStartedEvent> { @Override public void onApplicationEvent(ApplicationStartedEvent event) {log.info('>>> MyApplicationListener:{}', event); }}

啟動服務,會發現在服務啟動后,此監聽器被觸發了。

詳解Spring事件發布與監聽機制

如果不指定具體的泛型類,則會監聽 ApplicationEvent 抽象類的所有子類事件。如下所示:

package com.chenpi;import lombok.extern.slf4j.Slf4j;import org.springframework.context.ApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;@Slf4j@Componentpublic class MyApplicationListener implements ApplicationListener { @Override public void onApplicationEvent(ApplicationEvent event) {log.info('>>> MyApplicationListener:{}', event); }}

詳解Spring事件發布與監聽機制

注意,監聽器類的 bean 要注入到 Spring 容器中,不然不會生效。一種是使用注解注入,例如 @Component。另外可以使用 SpringApplicationBuilder.listeners() 方法添加,不過這兩種方式有區別的,看以下示例。

首先我們使用 @Component 注解方式,服務啟動時,監視到了2個事件:

ApplicationStartedEvent ApplicationReadyEvent

package com.chenpi;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.context.event.SpringApplicationEvent;import org.springframework.context.ApplicationListener;import org.springframework.stereotype.Component;@Slf4j@Componentpublic class MyApplicationListener implements ApplicationListener<SpringApplicationEvent> { @Override public void onApplicationEvent(SpringApplicationEvent event) {log.info('>>> MyApplicationListener:{}', event); }}

詳解Spring事件發布與監聽機制

而使用 SpringApplicationBuilder.listeners() 方法添加監聽器,服務啟動時,監聽到了5個事件:

ApplicationEnvironmentPreparedEvent ApplicationContextInitializedEvent ApplicationPreparedEvent ApplicationStartedEvent ApplicationReadyEvent

package com.chenpi;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class Application { public static void main(String[] args) {// SpringApplication.run(Application.class, args);SpringApplication app = new SpringApplicationBuilder(Application.class).listeners(new MyApplicationListener()).build();app.run(args); }}

詳解Spring事件發布與監聽機制

其實這是和監聽器 bean 注冊的時機有關,@component 注解的監聽器 bean 只有在 bean 初始化注冊完后才能使用;而通過 SpringApplicationBuilder.listeners() 添加的監聽器 bean 是在容器啟動前,所以監聽到的事件比較多。但是注意,這兩個不要同時使用,不然監聽器會重復執行兩遍。

如果你想在監聽器 bean 中注入其他 bean(例如 @Autowired),那最好是使用注解形式,因為如果太早發布監聽器,可能其他 bean 還未初始化完成,可能會報錯。

三、ApplicationEvent 事件

ApplicationEvent 是所有應用事件需要繼承的抽象類。它繼承了 EventObject 類,EventObject 是所有事件的根類,這個類有個 Object 類型的對象 source,代表事件源。所有繼承它的類的構造函數都必須要顯示傳遞這個事件源。

package org.springframework.context;import java.util.EventObject;public abstract class ApplicationEvent extends EventObject {private static final long serialVersionUID = 7099057708183571937L;// 發布事件的系統時間private final long timestamp;public ApplicationEvent(Object source) {super(source);this.timestamp = System.currentTimeMillis();}public final long getTimestamp() {return this.timestamp;}}

package java.util;public class EventObject implements java.io.Serializable { private static final long serialVersionUID = 5516075349620653480L; protected transient Object source; public EventObject(Object source) {if (source == null) throw new IllegalArgumentException('null source');this.source = source; } public Object getSource() {return source; } public String toString() {return getClass().getName() + '[source=' + source + ']'; }}

在 Spring 中,比較重要的事件類是 SpringApplicationEvent。Spring 有一些內置的事件,當完成某種操作時會觸發某些事件。這些內置事件繼承 SpringApplicationEvent 抽象類。SpringApplicationEvent 繼承 ApplicationEvent 并增加了字符串數組參數字段 args。

@SuppressWarnings('serial')public abstract class SpringApplicationEvent extends ApplicationEvent {private final String[] args;public SpringApplicationEvent(SpringApplication application, String[] args) {super(application);this.args = args;}public SpringApplication getSpringApplication() {return (SpringApplication) getSource();}public final String[] getArgs() {return this.args;}}

詳解Spring事件發布與監聽機制

我們可以編寫自己的監聽器,然后監聽這些事件,實現自己的業務邏輯。例如編寫 ApplicationListener 接口的實現類,監聽 ContextStartedEvent 事件,當應用容器 ApplicationContext 啟動時,會發布該事件,所以我們編寫的監聽器會被觸發。

ContextRefreshedEvent:ApplicationContext 被初始化或刷新時,事件被發布。ConfigurableApplicationContext接口中的 refresh() 方法被調用也會觸發事件發布。初始化是指所有的 Bean 被成功裝載,后處理 Bean 被檢測并激活,所有單例 Bean 被預實例化,ApplicationContext 容器已就緒可用。 ContextStartedEvent:應用程序上下文被刷新后,但在任何 ApplicationRunner 和 CommandLineRunner 被調用之前,發布此事件。 ApplicationReadyEvent:此事件會盡可能晚地被發布,以表明應用程序已準備好為請求提供服務。事件源是SpringApplication 本身,但是要注意修改它的內部狀態,因為到那時所有初始化步驟都已經完成了。 ContextStoppedEvent:ConfigurableApplicationContext 接口的 stop() 被調用停止 ApplicationContext 時,事件被發布。 ContextClosedEvent:ConfigurableApplicationContext 接口的 close() 被調用關閉 ApplicationContext 時,事件被發布。注意,一個已關閉的上下文到達生命周期末端后,它不能被刷新或重啟。 ApplicationFailedEvent:當應用啟動失敗后發布事件。 ApplicationEnvironmentPreparedEvent:事件是在 SpringApplication 啟動時發布的,并且首次檢查和修改 Environment 時,此時上 ApplicationContext 還沒有創建。 ApplicationPreparedEvent:事件發布時,SpringApplication 正在啟動,ApplicationContext 已經完全準備好,但沒有刷新。在這個階段,將加載 bean definitions 并準備使用 Environment。 RequestHandledEvent:這是一個 web 事件,只能應用于使用 DispatcherServlet 的 Web 應用。在使用 Spring 作為前端的 MVC 控制器時,當 Spring 處理用戶請求結束后,系統會自動觸發該事件。四、自定義事件和監聽器

前面介紹了自定義監聽器,然后監聽 Spring 原有的事件。下面介紹自定義事件和自定義監聽器,然后在程序中發布事件,觸發監聽器執行,實現自己的業務邏輯。

首先自定義事件,繼承 ApplicationEvent,當然事件可以自定義自己的屬性。

package com.chenpi;import lombok.Getter;import lombok.Setter;import lombok.ToString;import org.springframework.context.ApplicationEvent;@Getter@Setterpublic class MyApplicationEvent extends ApplicationEvent { // 事件可以增加自己的屬性 private String myField; public MyApplicationEvent(Object source, String myField) {// 綁定事件源super(source);this.myField = myField; } @Override public String toString() {return 'MyApplicationEvent{' + 'myField=’' + myField + ’’’ + ', source=' + source + ’}’; }}

然后自定義監聽器,監聽我們自定義的事件。

package com.chenpi;import lombok.extern.slf4j.Slf4j;import org.springframework.context.ApplicationListener;@Slf4jpublic class MyApplicationListener implements ApplicationListener<MyApplicationEvent> { @Override public void onApplicationEvent(MyApplicationEvent event) {log.info('>>> MyApplicationListener:{}', event); }}

注冊監聽器和發布事件。注冊監聽器上面講解了有兩種方式。事件的發布可以通過 ApplicationEventPublisher.publishEvent() 方法。此處演示直接用 configurableApplicationContext 發布,它實現了 ApplicationEventPublisher 接口。

package com.chenpi;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.context.ConfigurableApplicationContext;@SpringBootApplicationpublic class Application { public static void main(String[] args) {// SpringApplication.run(Application.class, args);// 注冊監聽器SpringApplication app = new SpringApplicationBuilder(Application.class).listeners(new MyApplicationListener()).build();ConfigurableApplicationContext configurableApplicationContext = app.run(args);// 方便演示,在項目啟動后發布事件,當然也可以在其他操作和其他時間點發布事件configurableApplicationContext.publishEvent(new MyApplicationEvent('我是事件源,項目啟動成功后發布事件', '我是自定義事件屬性')); }}

啟動服務,結果顯示確實監聽到發布的事件了。

2021-06-26 16:15:09.584  INFO 10992 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8081 (http) with context path ’’

2021-06-26 16:15:09.601  INFO 10992 --- [           main] com.chenpi.Application                   : Started Application in 2.563 seconds (JVM running for 4.012)

2021-06-26 16:15:09.606  INFO 10992 --- [           main] com.chenpi.MyApplicationListener         : >>> MyApplicationListener:MyApplicationEvent{myField=’我是自定義事件屬性’, source=我是事件源,項目啟動成功后發布事件}

事件監聽機制能達到分發,解耦效果。例如可以在業務類中發布事件,讓監聽在此事件的監聽器執行自己的業務處理。例如:

package com.chenpi;import org.springframework.context.ApplicationEventPublisher;import org.springframework.context.ApplicationEventPublisherAware;import org.springframework.stereotype.Service;@Servicepublic class MyService implements ApplicationEventPublisherAware { private ApplicationEventPublisher applicationEventPublisher; @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher = applicationEventPublisher; } public void testEvent() {applicationEventPublisher.publishEvent(new MyApplicationEvent('我是事件源', '我是自定義事件屬性')); }}五、注解式監聽器

除了實現 ApplicationListener 接口創建監聽器外,Spring 還提供了注解 @EventListener 來創建監聽器。

package com.chenpi;import org.springframework.context.event.EventListener;import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;@Slf4j@Componentpublic class MyApplicationListener01 { @EventListener public void onApplicationEvent(MyApplicationEvent event) {log.info('>>> MyApplicationListener:{}', event); }}

而且注解還可以通過條件過濾只監聽指定條件的事件。例如事件的 myField 屬性的值等于'陳皮'的事件。

package com.chenpi;import org.springframework.context.event.EventListener;import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;@Slf4j@Componentpublic class MyApplicationListener01 { @EventListener(condition = '#event.myField.equals(’陳皮’)') public void onApplicationEvent(MyApplicationEvent event) {log.info('>>> MyApplicationListener:{}', event); }}

還可以在同一個類中定義多個監聽,對同一個事件的不同監聽還可以指定順序。order 值越小越先執行。

package com.chenpi;import org.springframework.context.event.EventListener;import org.springframework.core.annotation.Order;import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;@Slf4j@Componentpublic class MyApplicationListener01 { @Order(2) @EventListener public void onApplicationEvent(MyApplicationEvent event) {log.info('>>> onApplicationEvent order=2:{}', event); } @Order(1) @EventListener public void onApplicationEvent01(MyApplicationEvent event) {log.info('>>> onApplicationEvent order=1:{}', event); } @EventListener public void otherEvent(YourApplicationEvent event) {log.info('>>> otherEvent:{}', event); }}

執行結果如下:

>>> onApplicationEvent order=1:MyApplicationEvent{myField=’陳皮’, source=我是事件源}

>>> onApplicationEvent order=2:MyApplicationEvent{myField=’陳皮’, source=我是事件源}

>>> otherEvent:MyApplicationEvent{myField=’我是自定義事件屬性01’, source=我是事件源01}

事件的監聽處理是同步的,如下:

package com.chenpi;import lombok.extern.slf4j.Slf4j;import org.springframework.context.ApplicationEventPublisher;import org.springframework.context.ApplicationEventPublisherAware;import org.springframework.stereotype.Service;@Service@Slf4jpublic class MyService implements ApplicationEventPublisherAware { private ApplicationEventPublisher applicationEventPublisher; @Override public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {this.applicationEventPublisher = applicationEventPublisher; } public void testEvent() {log.info('>>> testEvent begin');applicationEventPublisher.publishEvent(new MyApplicationEvent('我是事件源', '陳皮'));applicationEventPublisher.publishEvent(new YourApplicationEvent('我是事件源01', '我是自定義事件屬性01'));log.info('>>> testEvent end'); }}

執行結果如下:

2021-06-26 20:34:27.990  INFO 12936 --- [nio-8081-exec-1] com.chenpi.MyService                     : >>> testEvent begin

2021-06-26 20:34:27.990  INFO 12936 --- [nio-8081-exec-1] com.chenpi.MyApplicationListener01       : >>> onApplicationEvent order=1:MyApplicationEvent{myField=’陳皮’, source=我是事件源}

2021-06-26 20:34:27.991  INFO 12936 --- [nio-8081-exec-1] com.chenpi.MyApplicationListener01       : >>> onApplicationEvent order=2:MyApplicationEvent{myField=’陳皮’, source=我是事件源}

2021-06-26 20:34:27.992  INFO 12936 --- [nio-8081-exec-1] com.chenpi.MyApplicationListener01       : >>> otherEvent:MyApplicationEvent{myField=’我是自定義事件屬性01’, source=我是事件源01}

2021-06-26 20:34:27.992  INFO 12936 --- [nio-8081-exec-1] com.chenpi.MyService                     : >>> testEvent end

不過,我們也可以顯示指定異步方式去執行監聽器,記得在服務添加 @EnableAsync 注解開啟異步注解。

package com.chenpi;import org.springframework.context.event.EventListener;import org.springframework.core.annotation.Order;import org.springframework.scheduling.annotation.Async;import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;@Slf4j@Componentpublic class MyApplicationListener01 { @Async @Order(2) @EventListener public void onApplicationEvent(MyApplicationEvent event) {log.info('>>> onApplicationEvent order=2:{}', event); } @Order(1) @EventListener public void onApplicationEvent01(MyApplicationEvent event) {log.info('>>> onApplicationEvent order=1:{}', event); } @Async @EventListener public void otherEvent(YourApplicationEvent event) {log.info('>>> otherEvent:{}', event); }}

執行結果如下,注意打印的線程名。

2021-06-26 20:37:04.807  INFO 9092 --- [nio-8081-exec-1] com.chenpi.MyService                     : >>> testEvent begin

2021-06-26 20:37:04.819  INFO 9092 --- [nio-8081-exec-1] com.chenpi.MyApplicationListener01       : >>> onApplicationEvent order=1:MyApplicationEvent{myField=’陳皮’, source=我是事件源}

2021-06-26 20:37:04.831  INFO 9092 --- [         task-1] com.chenpi.MyApplicationListener01       : >>> onApplicationEvent order=2:MyApplicationEvent{myField=’陳皮’, source=我是事件源}

2021-06-26 20:37:04.831  INFO 9092 --- [nio-8081-exec-1] com.chenpi.MyService                     : >>> testEvent end

2021-06-26 20:37:04.831  INFO 9092 --- [         task-2] com.chenpi.MyApplicationListener01       : >>> otherEvent:MyApplicationEvent{myField=’我是自定義事件屬性01’, source=我是事件源01}

以上就是詳解Spring事件發布與監聽機制的詳細內容,更多關于Spring事件發布與監聽機制的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
主站蜘蛛池模板: 日韩精品视频在线 | 成人欧美一区二区三区白人 | 国产精品美女久久久久久久久久久 | 久草热线视频 | 99视频免费| 日韩成人在线播放 | 色爱综合网 | 成年人毛片视频 | 色久天堂 | 极品久久 | 久久男人天堂 | 国产精品久久久久久久久久久新郎 | 在线播放中文字幕 | 日本成人中文字幕在线观看 | 久久久亚洲综合 | 欧美成人免费观看 | 91视频网址 | 色偷偷噜噜噜亚洲男人 | 欧美日韩高清 | 国产精品久久久久久久久久妞妞 | 男人视频网站 | 九九免费视频 | 国产精品一区二区三 | 午夜不卡视频 | 久久久久国产精品 | 色天天综合久久久久综合片 | 在线欧美亚洲 | 黄频免费在线观看 | 色香蕉在线 | 成人亚洲精品久久久久软件 | av在线一区二区 | 日韩精品视频三区 | 成av在线| 伦乱视频| 在线视频一区二区三区 | 99久久婷婷国产精品综合 | 婷婷色国产偷v国产偷v小说 | 亚洲不卡免费视频 | 色婷婷国产精品综合在线观看 | www.毛片| 日韩城人免费 | 黄色一级免费看 | 91在线免费看 | 欧美精品久久一区 | 精品中文久久 | 国内久久精品 | 日韩毛片一级 | 夜夜艹 | 国产精品18 | 欧美视频在线播放 | www.99热| 欧美在线视频一区 | 视频一区二区国产 | 君岛美绪一区二区三区在线视频 | 91麻豆精品国产91久久久资源速度 | 另类一区 | 欧美午夜精品久久久 | 在线a电影 | 亚洲综合一区二区 | 天天干天天曰天天操 | 欧美在线观看一区 | 国产91对白叫床清晰播放 | 福利二区 | 国产成人精品久久 | 国产不卡精品视频 | 国产伦精品一区二区三区在线 | 国产一区二区精品久久岳 | 欧美精品一区二区在线观看 | 一级特黄毛片 | 午夜寂寞少妇aaa片毛片 | 国产成人精品电影 | 亚洲精品国产电影 | 国产精品无码永久免费888 | 在线视频国产一区 | 亚洲一区 中文字幕 | 欧美一卡二卡在线观看 | 午夜精品一区二区三区免费视频 | 久久青青| 久久精品一二三四 | 国产情侣免费视频 | 欧美成人综合在线 | 久久66| 国产精品久久久久久久久免费桃花 | 久久午夜电影 | 黄色高清视频在线观看 | 亚洲视频在线看 | 日韩高清在线一区 | 91超碰在线播放 | 久久精品这里只有精品 | 在线看免费观看日本 | 国产51人人成人人人人爽色哟哟 | 日韩高清国产一区在线 | 午夜看片 | 九九久久精品 | 国产欧美精品区一区二区三区 | 久久一 | 亚洲乱码在线 | 久在线视频 | 日韩一级视频 | 男女深夜视频 | 国产亚洲精品精品国产亚洲综合 | 国产免费av在线 | 狠狠影院| av免费网 | 夜夜艹| 久久久久久网址 | 自拍偷拍在线视频 | 成人aaa| 狠狠躁日日躁夜夜躁东南亚 | 欧美黑人一级爽快片淫片高清 | 久久国产精品久久精品 | 国产精品一区二 | 一级毛片在线播放 | 国产精品视频一区二区三区 | 成人免费看| 成人精品在线观看 | 国产一区二区在线免费观看 | 天堂男人在线 | 国产福利91精品一区二区三区 | 免费观看一级特黄欧美大片 | 欧美第一色 | 国产精品黄视频 | 国产成人精品亚洲777人妖 | 亚洲另类视频 | 久久九九视频 | 麻豆精品国产91久久久久久 | 国内精品一区二区三区视频 | 国产精品日韩欧美一区二区三区 | 欧美精品久久一区 | av在线免费播放 | 91 在线观看 | 亚洲精品日本 | 国产欧美日韩综合精品 | 久久国产精品久久久久久电车 | 日本久久精品电影 | 亚洲视频中文字幕 | 欧美日韩在线观看视频 | 国产精品亚洲欧美日韩一区在线 | 亚洲午夜性视频 | 一区二区精品在线观看 | 欧美在线二区 | 欧美高清dvd| 国产高清免费 | 久草视频在线播放 | 天天操天天插 | 91午夜在线 | 在线观看www | 大香伊在人线免97 | 成人免费看片 | 激情五月婷婷 | 中文字幕在线免费 | 亚洲国产精品久久 | 日韩福利视频导航 | 精品国产精品 | 亚洲综合精品 | 久久亚洲精品国产精品紫薇 | 亚洲天堂久久 | 国产资源在线观看 | 日韩一区免费在线观看 | 五月激情六月婷婷 | 黄桃av | 一级黄色片子看看 | 亚洲欧美日韩在线 | 一区二区三区视频在线播放 | www.欧美.com | 激情小视频在线观看 | 亚洲综合久久网 | www.av在线| 在线视频中文字幕 | 国产97碰免费视频 | 久久国产精品久久久久久电车 | 精品国产成人 | 久久福利 | 欧美国产日韩一区 | 日本一本在线 | 久久国产精品精品国产 | 久久久久亚洲精品 | 国产精品一区av | 欧美日韩在线一区二区三区 | 国产中文视频 | 国产一区二区三区久久久 | 日韩福利视频 | 成人国产精品视频 | 久久久国产精品 | 欧美黄 片免费观看 | 亚洲精品久久 | 懂色一区二区三区av片 | 国产日韩一区二区 | 国产精品一区久久久久 | 国产精品毛片久久久久久久 | 国产中文在线 | 狠狠综合久久 | 久久99爱视频| av电影中文字幕在线观看 | 久久免费电影 | 午夜激情视频 | 日本免费一区二区视频 | 黄色小视频在线观看 | 欧美成人a | 一区二区三区四区av | 欧美乱码久久久久久蜜桃 | 在线中文字幕av | 视频一区 国产精品 | 伊人电影综合 | 91av免费在线 | 成人精品久久 | 国产成人午夜 | 91精品国产91久久综合桃花 | 国产一级毛片在线视频 | 亚洲美乳中文字幕 | 日本阿v视频高清在线中文 中文二区 | 91在线免费视频 | 日韩欧美专区 | 一区久久 | 成人免费在线观看 | 亚洲国产aⅴ成人精品无吗 一区视频在线 | 欧美在线观看视频 | 99精品欧美一区二区三区综合在线 | 欧美精品在欧美一区二区少妇 | 99视频精品| 亚洲成人影院在线观看 | 欧美日韩免费在线 | 日p视频免费看 | 亚洲精品乱码久久久久久花季 | 五月激情综合网 | 日韩一区二区三区福利视频 | 国产亚洲精品精品国产亚洲综合 | 黄色片免费看. | 最新日韩av | 国产一区二区精品丝袜 | 欧美精品一区二区三区四区 | 国产精品香蕉在线观看 | av网站在线免费看 | 精品国产一区二区三区成人影院 | 国产成人av在线 | 成人精品 | 国产91在线视频 | 欧美性一区二区三区 | 一区免费在线观看 | 亚洲一区二区在线播放 | 国产精品美女久久久久久久久久久 | 一级黄色片日本 | 日本免费视频 | 天堂在线中文字幕 | 999精品视频 | 久久精品一区二区三区四区 | 91精品国产综合久久久久久丝袜 | 久久久www成人免费精品 | 免费成人在线电影 | 一级黄色片aaa | 亚洲国产精品一区二区久久 | 国产亚洲综合精品 | 国产麻豆乱码精品一区二区三区 | 欧美日韩精品一区二区在线观看 | 亚洲一区二区三区免费观看 | 国产极品视频在线观看 | 成人a视频在线观看 | 求av网址| 日韩另类| 国产精品久久久久久妇女6080 | 成人免费影院 | 日韩成人av在线 | 欧美中文 | 在线视频中文字幕 | 成人免费毛片高清视频 | 亚洲精品影院在线 | 成人午夜免费视频 | 午夜视频在线免费观看 | a久久 | 最新久久精品 | 国产一区二区三区av在线 | 视频专区一区二区 | 一级毛片免费播放 | 久久久.com| 欧美午夜精品久久久久久人妖 | jizz在线观看| 久久久国产精品视频 | h视频在线免费 | 福利三区 | 欧美精品一区二区在线观看 | 韩日一区二区 | 欧美日韩在线一 | 成人免费一区二区三区视频网站 | 日韩欧洲亚洲 | 国产美女黄色片 | 先锋资源在线观看 | 一区二区三区亚洲精品国 | 成人aaaa| 在线日韩欧美 | 久久亚洲欧美日韩精品专区 | 三级精品 | 特黄一级 | 多p视频 | 日韩欧美精品一区二区三区 | 看一级黄色大片 | 国产视频第一区 | 精品视频一区二区三区 | 美女福利网站 | 日韩国产一区二区 | 永久精品 | 久久另类| 免费v片 | 一级片在线观看网站 | 欧美激情一区二区三区蜜桃视频 | 人妖天堂狠狠ts人妖天堂狠狠 | 在线观看成人 | 国产人妖一区 | 国产午夜精品一区二区三区免费 | 91av在线免费看 | 国产一区二区视频在线播放 | 婷婷综合激情 | 久久91精品国产 | 亚洲一区精品在线 | 91精品国产91久久久久久密臀 | 久久久久久av | 久久99一区 | 午夜三级在线 | 日韩在线观看毛片 | 欧美自拍视频 | 精品一区av | 成人精品一区二区 | 日韩国产在线 | 久久久久久精 | 日韩精品免费在线观看 | 免费看国产片在线观看 | 久久精品亚洲一区二区 | 精品视频在线免费观看 | 成人小视频在线观看 | 九色在线观看 | 久久久久久久 | 日韩一区二区精品视频 | 香蕉在线影院 | 亚洲国产中文字幕 | 欧美激情视频一区二区三区 | 美女一区二区三区在线观看 | 7799精品视频 | 国产亚洲精品美女久久久久久久久久 | 国产一页| 欧美二三区| 日本免费一区二区视频 | 精品一区二区视频 | 久久久久久久久久久免费视频 | 国产精品久久久久久久午夜 | 一二三区不卡视频 | 亚洲一区二区三区四区五区中文 | 亚洲精品一区二区网址 | 呦一呦二在线精品视频 | 亚洲高清久久 | 中文字幕精品一区久久久久 | 中文在线一区 | 久久人人爽人人爽人人片av高清 | 北条麻妃99精品青青久久主播 | 欧美性大战久久久久久久蜜臀 | 国产精品久久久久久久久久妞妞 | 一区二区三区成人久久爱 | 亚洲精选一区 | 精品久久久成人 | 亚洲国产精品精华液com | 欧美a在线 | 色天天综合网 | 国产福利电影一区 | 亚洲第一黄 | 日韩一区二区在线观看 | 久久久久久久国产 | 一区二区三区免费在线 | 99精品一区二区 | baoyu133. con永久免费视频 | 欧美一区二区三区在线视频 | 国产精品一区二区三区免费视频 | 精品久久久久久久久久久 | 极品女神高潮呻吟av久久 | 日韩视频久久 | 亚洲精品乱码久久久久久花季 | 成人黄色短视频在线观看 | 久久男人天堂 | 国产成人99久久亚洲综合精品 | 青青草久 | 亚洲专区中文字幕 | 精品国产不卡一区二区三区 | 国产欧美综合一区二区三区 | 一区二区三区国产视频 | 国产欧美久久久久久 | 亚洲欧美高清 | 久久久国产精品视频 | 国产91在线 | 亚洲 | 久久精品一 | 国产一区二区三区在线免费观看 | 色婷婷精品国产一区二区三区 | 不卡一区 | 自拍偷拍在线视频 | 日韩免费在线观看视频 | 亚洲精品夜夜夜 | 精品在线看 | 欧美伦理电影一区二区 | 日韩在线免费观看av | 97久久精品 | 五月激情六月婷婷 | 99视频免费看 | 成人av免费在线观看 | 在线免费毛片 | 久久成人免费观看 | 视频一区二区中文字幕日韩 | 曰批视频在线观看 | 国产精品久久婷婷六月丁香 | 大吊一区二区 | 精品一区久久 | 中文一区| 久热在线视频 | 亚洲国产视频网站 | 91国在线高清视频 | 久久九精品 | 成版人性视频 | 久久午夜精品 | 国产日韩欧美 | 欧美精品久久久 | 国产福利片在线 | 91亚洲成人| 九九色综合| 久久综合久 | 一区二区视频网站 | 欧美日韩第一页 | 国产精品日本一区二区不卡视频 | 91精品国产综合久久久久久丝袜 | 狠狠综合久久 | 亚洲欧洲免费视频 | 国产人成精品一区二区三 | 国产无套一区二区三区久久 | 99久久精品国产毛片 | 国产综合视频 | 国产精品久久久久久久午夜片 | 国产精品久久久久久久久免费 | 亚洲伦理影院 | 伊人久久视频 | 91精品国产91久久久久久吃药 | 欧美黑人做爰xxxⅹ 国产精品一区二区视频 | 精品国产91 | 麻豆专区一区二区三区四区五区 | 欧美日本免费一区二区三区 | 日韩成人免费 | 国产伦精品一区二区三区四区视频 | 韩日中文字幕 | 亚洲一区二区三区免费在线观看 | 日本中文字幕在线视频 | 日韩美女av在线 | 成人免费在线视频播放 | 免费爱爱视频 | 国产精品永久免费视频 | 黄色一级片在线观看 | 久久久久久久久成人 | 污色视频在线观看 | 国产精品视频免费 | 波多野结衣先锋影音 | av网站推荐 | 91高清免费看 | 亚洲欧美另类在线 | 中文字幕亚洲欧美日韩在线不卡 | 久久草视频 | 欧美久久久久久久久久 | 日本欧美久久久久免费播放网 | 三级成人在线 | 国产精品久久久久久中文字 | 久久免费精品 | 国产在线看片 | 国产免费亚洲 | 亚洲一区中文字幕在线观看 | 国产成人激情 | a级在线| 黑人巨大精品欧美黑白配亚洲 | 久久精品一级 | 国产精品一二区 | 在线精品日韩 | 中文字幕亚洲区 | 午夜婷婷丁香 | 久久久久久影院 | 欧美精品在线免费观看 | 久久av一区| 一级黄色片子看看 | 国产一区二区三区在线免费 | 一区在线视频 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | 在线精品国产 | 久久久美女 | 精品视频在线免费观看 | 国产精品美女视频一区二区三区 | 国产欧美精品一区二区色综合朱莉 | av片在线免费观看 | 息与子猛烈交尾一区二区 | 91精品久久久久久久久久入口 | 日韩国产欧美在线观看 | 欧美日韩亚洲成人 | 国产成人精品一区二区视频免费 | 亚洲v日韩v综合v精品v | 欧美 日韩 在线播放 | 黄色视频a级毛片 | 久久九精品 | 亚洲 欧美 精品 | 日本三级视频 | 亚洲在线视频 | 午夜午夜精品一区二区三区文 | 国产精品1区2区3区 中文字幕一区二区三区四区 | 天堂福利影院 | 青娱乐99| 亚洲网站免费 | 日韩成人在线视频 | 欧美xxxⅹ性欧美大片 | 高清久久 | 国产精品成人国产乱一区 | 毛片天堂| 成人一级毛片 | 国产一区二区在线免费观看 | 91精品国产日韩91久久久久久 | 国产精品69久久久久水密桃 | 精品久久久久久久久久 | 麻豆专区一区二区三区四区五区 | 二区国产 | 国产高清在线精品一区二区三区 | 国产综合亚洲精品一区二 | 99热精品视 | 亚洲h在线观看 | 中文字幕av网站 | 狠狠综合久久av一区二区老牛 | 欧美成人一区二区 | 欧美激情综合色综合啪啪五月 | 国产日韩成人 | 91短视频版在线观看免费大全 | 国产性久久 | 久久88 | 日韩在线免费观看网站 | 日本一区二区三区四区 | 精品国产一区二区三区久久久蜜 | 亚洲欧洲日韩 | 一区二区三区四区av | 日韩av成人 | 免费观看一区二区三区毛片 | 欧美视频在线播放 | 亚洲男人天堂2023 | 电影k8一区二区三区久久 | 欧美一级片在线观看 | 波多野结衣一区二区三区中文字幕 | 欧洲一区二区三区 | 黑人巨大精品欧美一区二区小视频 | 中国大陆高清aⅴ毛片 | 香蕉国产精品 | 日本三级在线网站 | 欧美a在线 | 中文字幕免费在线观看视频 | 一级毛片免费看 | 日韩中文不卡 | 亚洲色图综合 | 久久精品小视频 | 亚洲一区二区三区四区五区午夜 | 国产三级在线 | 国产精久久久久久久妇剪断 | www.久草.com| 国产亚洲综合一区二区 | 欧美午夜在线观看 | 亚洲一区av | 无码日韩精品一区二区免费 | 久操草 | 一区二区三区自拍 | 欧美日韩亚洲在线 | 狠狠综合久久av一区二区老牛 | 久久亚洲欧美日韩精品专区 | 国产日韩一区二区三区 | 亚洲国产二区 | 五月婷婷综合网 | 久久99精品久久久久久园产越南 | 亚洲精品乱码久久久久久久 | 国产综合精品 | 国产三级久久久久 | 国产99久久久久久免费看农村 | 激情综合色综合久久综合 | 欧美在线观看一区二区 | 99久久夜色精品国产亚洲1000部 | 成人国产电影 | 国产综合视频 | 91精品国产综合久久福利软件 | 一区二区三区在线播放 | 丁香久久 | 国产精品久久久爽爽爽麻豆色哟哟 | 狠狠综合久久av一区二区老牛 | 日韩中文视频 | 欧美成人h版在线观看 | 久草热8精品视频在线观看 亚洲区在线 | 热久久久 | 91色在线观看 | 伊人青青草 | 一区二区三区在线播放视频 | 91av在线视频播放 | 欧美二区视频 | 在线观看中文视频 | 亚洲欧美另类久久久精品2019 | 久久青草国产 | 91精品久久久久久久久久入口 | 成人免费在线观看视频 | 亚洲综合精品久久 | 免费v片| 亚洲欧美视频在线 | 天天色av | 2018国产大陆天天弄 | 美女视频黄色免费 | 精品国产一区二区三区四 | 国产一区二区三区免费 | 国产精品久久国产精品 | 日韩成人精品视频在线观看 | 国产精品久久久一区二区 | 国产偷录视频叫床高潮对白 | 天天操天天色天天 | a免费观看 | 国产18av| 婷婷成人在线 | 在线不卡一区 | 国产欧美综合一区二区三区 | 91麻豆精品国产91久久久资源速度 | www在线观看国产 |