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

Spring容器啟動過程中發布的核心事件及事件處理機制詳解

開發 項目管理
到Spring 4.2為止,事件基礎設施得到了顯著改進,提供了基于注釋的模型以及發布任意事件的能力(也就是說,不一定是從ApplicationEvent擴展的對象)。當這樣的對象被發布時,我們將它包裝在一個事件中。

核心事件

ApplicationContext中的事件處理是通過ApplicationEvent類和ApplicationListener接口提供的。如果將實現一個Bean實現了ApplicationListener接口,那么每當ApplicationEvent發布到ApplicationContext時,就會通知該bean。本質上,這是標準的觀察者設計模式。

到Spring 4.2為止,事件基礎設施得到了顯著改進,提供了基于注釋的模型以及發布任意事件的能力(也就是說,不一定是從ApplicationEvent擴展的對象)。當這樣的對象被發布時,我們將它包裝在一個事件中。

下表列出了Spring提供的標準事件:

Event

Explanation

ContextRefreshedEvent

在ApplicationContext被初始化或刷新時發布(例如,通過使用ConfigurableApplicationContext接口上的refresh()方法)。這里的“初始化”意味著加載了所有bean,檢測并激活了后處理器bean,預實例化了單例,并且ApplicationContext對象已經準備好可以使用。只要上下文沒有關閉,就可以多次觸發刷新,前提是所選擇的ApplicationContext實際上支持這種“熱”刷新。

ContextStartedEvent

通過使用ConfigurableApplicationContext接口上的start()方法啟動ApplicationContext時發布。在這里,“started”意味著所有生命周期bean都接收一個顯式的開始信號。通常,該信號用于在顯式停止之后重新啟動bean,但也可以用于啟動未配置為自動啟動的組件(例如,在初始化時尚未啟動的組件)。

ContextStoppedEvent

當通過使用ConfigurableApplicationContext接口上的stop()方法停止ApplicationContext時發布。在這里,“stopped”意味著所有生命周期bean都接收一個明確的停止信號。停止的上下文可以通過start()調用重新啟動。

ContextClosedEvent

使用ConfigurableApplicationContext接口上的close()方法或通過JVM關閉掛鉤關閉ApplicationContext時發布。在這里,“closed”意味著所有的單例bean都會被銷毀。一旦上下文被關閉,它就會到達生命的終點,并且不能被刷新或重啟。

RequestHandledEvent

一個特定于web的事件,告訴所有bean一個HTTP請求已經得到了服務。此事件在請求完成后發布。這個事件只適用于使用Spring的DispatcherServlet的web應用程序。

ServletRequestHandledEvent

RequestHandledEvent的一個子類,用于添加特定于servlet的上下文信息。

以上事件發布時機:

  • ContextRefreshedEvent

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {
public void refresh() {
// ...
finishRefresh();
}
}

  • ContextStartedEvent

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {
public void refresh() {
// ...
finishRefresh();
}
protected void finishRefresh() {
// 初始化LifecycleProcessor(DefaultLifecycleProcessor)
initLifecycleProcessor();
getLifecycleProcessor().onRefresh();
}
public void start() {
getLifecycleProcessor().start();
publishEvent(new ContextStartedEvent(this));
}
}
public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactoryAware {
public void start() {
startBeans(false);
this.running = true;
}
}

  • ContextStoppedEvent

該事件與上面的started是對應的

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {
public void stop() {
getLifecycleProcessor().stop();
publishEvent(new ContextStoppedEvent(this));
}
}
public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactoryAware {
public void stop() {
stopBeans();
this.running = false;
}
}

  • ContextClosedEvent

public abstract class AbstractApplicationContext extends DefaultResourceLoader implements ConfigurableApplicationContext {
public void close() {
synchronized (this.startupShutdownMonitor) {
doClose();
}
}
protected void doClose() {
publishEvent(new ContextClosedEvent(this));
}
}

  • ServletRequestHandledEvent

public abstract class FrameworkServlet {
protected final void processRequest(HttpServletRequest request, HttpServletResponse response) {
publishRequestHandledEvent(request, response, startTime, failureCause);
}
private void publishRequestHandledEvent(HttpServletRequest request, HttpServletResponse response, long startTime, @Nullable Throwable failureCause) {
if (this.publishEvents && this.webApplicationContext != null) {
// Whether or not we succeeded, publish an event.
long processingTime = System.currentTimeMillis() - startTime;
this.webApplicationContext.publishEvent(
new ServletRequestHandledEvent(this,
request.getRequestURI(), request.getRemoteAddr(),
request.getMethod(), getServletConfig().getServletName(),
WebUtils.getSessionId(request), getUsernameForRequest(request),
processingTime, failureCause, response.getStatus()));
}
}
}

你還可以創建和發布自己的自定義事件。下面的例子展示了一個簡單的類,它擴展了Spring的ApplicationEvent基類:

public class BlockedListEvent extends ApplicationEvent {


private final String address;
private final String content;


public BlockedListEvent(Object source, String address, String content) {
super(source);
this.address = address;
this.content = content;
}
}

要發布自定義的ApplicationEvent,需要調用ApplicationEventPublisher的publishEvent()方法。通常,這是通過創建一個實現ApplicationEventPublisherAware的類并將其注冊為Spring bean來完成的。下面的例子展示了這樣一個類:

public class EmailService implements ApplicationEventPublisherAware {


private List<String> blockedList;
private ApplicationEventPublisher publisher;


public void setBlockedList(List<String> blockedList) {
this.blockedList = blockedList;
}


public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
this.publisher = publisher;
}


public void sendEmail(String address, String content) {
if (blockedList.contains(address)) {
publisher.publishEvent(new BlockedListEvent(this, address, content));
return;
}
}
}

在配置時,Spring容器檢測到EmailService實現了ApplicationEventPublisherAware,并自動調用
setApplicationEventPublisher()。實際上,傳入的參數是Spring容器本身。通過ApplicationEventPublisher接口與應用程序上下文進行交互。

要接收自定義的ApplicationEvent,可以創建一個實現ApplicationListener的類,并將其注冊為Spring bean。下面的例子展示了這樣一個類:

public class BlockedListNotifier implements ApplicationListener<BlockedListEvent> {


private String notificationAddress;


public void setNotificationAddress(String notificationAddress) {
this.notificationAddress = notificationAddress;
}


public void onApplicationEvent(BlockedListEvent event) {
}
}

請注意,ApplicationListener通常參數化為自定義事件的類型。這意味著onApplicationEvent()方法可以保持類型安全,避免任何向下轉換的需要。你可以注冊任意數量的事件監聽器,但請注意,默認情況下,事件監聽器是同步接收事件的。這意味著publishEvent()方法會阻塞,直到所有監聽器都完成事件處理。這種同步和單線程方法的一個優點是,當偵聽器接收到事件時,如果事務上下文可用,它將在發布者的事務上下文內操作。

通過注解監聽事件

可以使用@EventListener注解在托管bean的任何方法上注冊事件監聽器。可以將BlockedListNotifier重寫為:

public class BlockedListNotifier {


private String notificationAddress;


public void setNotificationAddress(String notificationAddress) {
this.notificationAddress = notificationAddress;
}


@EventListener
public void processBlockedListEvent(BlockedListEvent event) {
}
}

同時監聽多個事件

@EventListener({ContextStartedEvent.class, ContextRefreshedEvent.class})
public void handleContextStart() {
}

異步事件

如果希望特定的監聽器異步處理事件,可以重用常規的@Async支持。如下面的例子所示:

@EventListener
@Async
public void processBlockedListEvent(BlockedListEvent event) {
}

在使用異步事件時,請注意以下限制:

  1. 如果異步事件監聽器拋出異常,則異常不會傳播到調用者。
  2. 異步事件監聽器方法無法通過返回值發布后續事件。如果你需要發布另一個事件作為處理的結果,注入一個ApplicationEventPublisher來手動發布事件。

事件監聽順序

如果需要在調用另一個監聽器之前調用一個監聽器,可以在方法聲明中添加@Order注解,如下面的例子所示:

@EventListener
@Order(1)
public void processBlockedListEvent(BlockedListEvent event) {
}

通用的事件

你還可以使用泛型來進一步定義事件的結構。考慮使用EntityCreatedEvent<T>,其中T是實際創建的實體的類型。例如,你可以創建以下監聽器定義,只接收Person的EntityCreatedEvent:

@EventListener
public void onPersonCreated(EntityCreatedEvent<Person> event) {
}

由于類型擦除,只有當觸發的事件解析了事件監聽器過濾的泛型參數(即類似于PersonCreatedEvent類擴展EntityCreatedEvent<Person>{…})時,才會起作用。

事件觸發原理

方式1:ApplicationEventPublisher

AbstractApplicationContext實現了ApplicationEventPublisher接口,那么只要ApplicationContext繼承自AbstractApplicationContext都可以直接發布事件:

public abstract class AbstractApplicationContext {
protected void publishEvent(Object event, @Nullable ResolvableType eventType) {
ApplicationEvent applicationEvent;
if (event instanceof ApplicationEvent) {
applicationEvent = (ApplicationEvent) event;
} else {
applicationEvent = new PayloadApplicationEvent<>(this, event);
if (eventType == null) {
eventType = ((PayloadApplicationEvent<?>) applicationEvent).getResolvableType();
}
}
if (this.earlyApplicationEvents != null) {
this.earlyApplicationEvents.add(applicationEvent);
} else {
getApplicationEventMulticaster().multicastEvent(applicationEvent, eventType);
}
if (this.parent != null) {
if (this.parent instanceof AbstractApplicationContext) {
((AbstractApplicationContext) this.parent).publishEvent(event, eventType);
} else {
this.parent.publishEvent(event);
}
}
}
}

方式2:通過@EventListener注解

該注解是由EventListenerMethodProcessor處理器處理的。

public class EventListenerMethodProcessor implements SmartInitializingSingleton, ApplicationContextAware, BeanFactoryPostProcessor {
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) {
// 獲取容器中注冊的事件監聽工廠,可以有多個
Map<String, EventListenerFactory> beans = beanFactory.getBeansOfType(EventListenerFactory.class, false, false);
}
public void afterSingletonsInstantiated() {
String[] beanNames = beanFactory.getBeanNamesForType(Object.class);
for (String beanName : beanNames) {
processBean(beanName, type);
}
}
private void processBean(final String beanName, final Class<?> targetType) {
Map<Method, EventListener> annotatedMethods = null;
try {
// 取得Bean內帶有@EventListener注解的方法
annotatedMethods = MethodIntrospector.selectMethods(targetType, (MethodIntrospector.MetadataLookup<EventListener>) method ->
AnnotatedElementUtils.findMergedAnnotation(method, EventListener.class));
}
// 遍歷找到的所有@EventListener注解的方法
for (Method method : annotatedMethods.keySet()) {
// 遍歷所有的EventListenerFactory
for (EventListenerFactory factory : factories) {
// 判斷當前的事件監聽工廠是否支持當前的方法
if (factory.supportsMethod(method)) {
Method methodToUse = AopUtils.selectInvocableMethod(method, context.getType(beanName));
// 創建對應的事件監聽程序
ApplicationListener<?> applicationListener = factory.createApplicationListener(beanName, targetType, methodToUse);
if (applicationListener instanceof ApplicationListenerMethodAdapter) {
((ApplicationListenerMethodAdapter) applicationListener).init(context, this.evaluator);
}
context.addApplicationListener(applicationListener);
break;
}
}
}
}
}


責任編輯:武曉燕 來源: 實戰案例錦集
相關推薦

2009-09-02 18:34:28

C#鼠標事件

2011-07-01 14:20:59

Qt 事件

2011-07-01 14:14:34

Qt 事件

2023-02-23 08:15:33

Spring異常處理機制

2011-03-17 09:20:05

異常處理機制

2023-06-15 14:09:00

解析器Servlet容器

2011-09-05 17:35:18

MTK啟動過程RTOS

2013-08-07 14:48:00

HTML5

2011-06-28 13:27:13

ARM Linux

2023-09-07 10:31:27

2010-09-16 09:37:21

JavaScript事

2023-09-14 15:15:36

2015-11-06 13:59:01

JavaScript事件處理

2010-03-05 15:40:16

Python異常

2021-09-28 15:03:06

Linux內核arm

2011-07-04 14:38:43

QT Qevent

2017-01-11 18:44:43

React Nativ觸摸事件Android

2009-08-04 13:53:58

C#委托類C#事件

2025-09-23 06:15:00

Linux系統程序

2021-03-02 09:12:25

Java異常機制
點贊
收藏

51CTO技術棧公眾號

欧美日韩高清| 久久uomeier| 国产成人精品免费在线| 97视频在线播放| 久久中文字幕人妻| 国产精品久久久久久吹潮| 亚洲精品写真福利| 久久精品第九区免费观看| 在线黄色av网站| 尹人成人综合网| 一本大道久久加勒比香蕉| 亚洲精品中文字幕乱码无线| 神马久久午夜| 亚洲女子a中天字幕| 麻豆av一区二区三区| 国产精品久久欧美久久一区| 国产视频一区在线观看一区免费| y97精品国产97久久久久久| 好男人香蕉影院| 欧美成a人片免费观看久久五月天| 亚洲国产综合色| 亚洲三区四区| 青青操视频在线| 国产毛片精品国产一区二区三区| 国产精品7m视频| 日韩精品一区二区三| 亚洲人metart人体| 亚洲美女福利视频网站| 亚洲最大视频网| www.91精品| 在线观看日韩精品| 熟女少妇在线视频播放| av片在线观看免费| 国产精品嫩草99a| 免费精品视频一区| 欧美一级特黄aaaaaa大片在线观看 | 免费成人你懂的| 欧洲亚洲女同hd| 国产精品第九页| 中文在线日韩| 久久精品精品电影网| 免费成人深夜天涯网站| 伊人成综合网yiren22| 欧美精品一区二区三区蜜臀| 亚洲精品乱码久久久久久动漫| 电影亚洲一区| 欧洲一区二区av| 日韩精品一区二区三区不卡 | 精品国产户外野外| 欧美另类videosbestsex日本| 日本精品一区二区三区在线播放| 久久精品视频免费| 欧美激情专区| 噜噜噜噜噜在线视频| 99精品黄色片免费大全| 精品国产乱码一区二区三区四区| 风流老熟女一区二区三区| 国产成人免费xxxxxxxx| 99在线热播| 亚洲福利在线观看视频| 国产成人av电影在线| 成人黄视频免费| 囯产精品久久久久久| 东方aⅴ免费观看久久av| 成人在线免费网站| 日韩在线观看视频网站| 99久久婷婷国产综合精品| 国产一区免费在线| 性插视频在线观看| 久久九九全国免费| 亚洲看片网站| av在线免费观看网址| 亚洲线精品一区二区三区| 精品少妇在线视频| 综合另类专区| 欧美日韩精品一区二区三区 | 国产成人一二片| 精品国产凹凸成av人网站| 中文字幕乱码在线| 国产成人精品免费视| 视频在线观看99| 精品国产欧美日韩不卡在线观看| 午夜欧美理论片| 欧美一级淫片丝袜脚交| 亚洲永久精品一区| 国产精品一品二品| 国产一区免费在线| 77导航福利在线| 亚洲午夜久久久久久久久电影院 | 一区二区三区的久久的视频| 黄色一级大片在线免费看产| 亚洲午夜三级在线| 999精品网站| 国产999精品在线观看| 精品久久久久久最新网址| 蜜桃传媒一区二区亚洲av| 欧美韩日高清| 91精品国产九九九久久久亚洲| www.五月婷婷.com| 岛国精品一区二区| 亚洲 国产 欧美一区| 牛牛在线精品视频| 欧美午夜理伦三级在线观看| 制服.丝袜.亚洲.中文.综合懂| 自拍自偷一区二区三区| 久久6精品影院| 免费黄色片视频| 成人免费看黄yyy456| 亚洲电影一二三区| √天堂8资源中文在线| 欧美精品18+| 国产伦精品一区二区三区妓女 | 午夜精品www| 91女人18毛片水多国产| 久久午夜羞羞影院免费观看| 女人床在线观看| 粉嫩91精品久久久久久久99蜜桃| 精品sm捆绑视频| 永久久久久久久| 日韩1区2区日韩1区2区| 久久av二区| 牛牛电影国产一区二区| 欧美日韩国产美| 男生草女生视频| 一区二区三区福利| 国产精华一区| 最近中文字幕免费mv2018在线| 欧美性猛片xxxx免费看久爱| 熟妇高潮精品一区二区三区| 国内视频精品| 亚洲综合国产精品| 免费在线观看黄| 欧美日本一区二区在线观看| 成都免费高清电影| 亚洲一区二区毛片| 精品免费一区二区三区蜜桃| heyzo高清在线| 日韩精品一区二区三区在线观看| 三级黄色在线观看| 美女网站在线免费欧美精品| 日本午夜精品一区二区| 欧美一区国产| 亚洲性日韩精品一区二区| 亚洲精品男人的天堂| 91美女片黄在线观看91美女| 97超碰青青草| 精品一区在线| 国产成人在线亚洲欧美| 国产三级视频在线播放线观看| 日韩欧美主播在线| www在线观看免费视频| 六月天综合网| 日韩一区国产在线观看| 国产一区二区主播在线| 在线观看91久久久久久| 亚洲视频一区在线播放| 亚洲欧洲日本在线| 亚洲第一成肉网| 午夜视频精品| 国产亚洲福利社区| 在线观看涩涩| 国产一区二区三区直播精品电影| 亚洲视屏在线观看| 亚洲欧洲av另类| 日本女人黄色片| 在线观看一区| 久久综合九色综合网站| 韩日精品一区| 不卡毛片在线看| 狠狠躁日日躁夜夜躁av| 欧美日韩中文字幕综合视频| 国产又粗又猛又爽视频| 男女男精品视频| 女女百合国产免费网站| 超碰在线一区| 国产91免费观看| 国产乱色在线观看| 精品国内片67194| 亚洲欧美综合自拍| 中文字幕日本不卡| 国产二级一片内射视频播放| 日本亚洲视频在线| 中国一级黄色录像| 欧美人与动xxxxz0oz| 国产精品久久久久久一区二区| 蜜桃视频网站在线| 精品香蕉一区二区三区| 91中文字幕在线播放| 亚洲国产成人tv| 日本一二三不卡视频| 国产高清在线观看免费不卡| 欧洲av无码放荡人妇网站| 久久一区二区三区喷水| 国产伦精品一区二区三区免| 色猫猫成人app| 国产69精品久久久久9| 风间由美一区| 亚洲第一精品福利| 中文字幕在线一| 欧美日韩国产一区在线| 疯狂试爱三2浴室激情视频| 91丝袜高跟美女视频| 亚洲综合20p| 爽爽淫人综合网网站| 国产一级不卡视频| 久久高清免费| 欧美日韩国产综合视频在线| 在线观看视频一区二区三区| 国产精品欧美日韩| 亚洲女同志freevdieo| 欧美成人午夜激情| av在线播放免费| 日韩精品在线观看视频| 国产高清免费在线观看| 欧美视频一区二区三区四区| 91午夜视频在线观看| 国产成人高清精品免费5388| 国产精品色在线| 911亚洲精选| 韩国女主播成人在线观看| 国产裸体舞一区二区三区| 亚洲小说区图片区| 中文字幕剧情在线观看一区| 欧洲乱码伦视频免费| 久久riav| 精品三级av在线导航| 91精品视频在线免费观看| 欧美色网在线| 日本久久久久亚洲中字幕| 91资源在线观看| 九色91av视频| 日韩免费影院| 久久天天躁狠狠躁夜夜爽蜜月| 成人午夜影视| 国产亚洲人成网站在线观看| 色视频在线观看| 日韩不卡在线观看| 午夜在线视频免费| 亚洲激情在线视频| 欧美一区二区三区激情| 精品国产一区二区精华| 国产高清第一页| 欧美va在线播放| 成人av手机在线| 日韩欧美成人一区二区| 精品国自产拍在线观看| 日韩欧美色综合网站| 国产成人精品免费看视频| 日韩欧美在线网站| 国产欧美熟妇另类久久久| 欧美肥妇毛茸茸| www.热久久| 亚洲精品在线观| 欧洲成人一区二区三区| 亚洲激情视频在线| 你懂得网站在线| 在线观看久久av| 日本最新在线视频| 久久高清视频免费| 国产乱妇乱子在线播视频播放网站| 欧美成人免费全部| av中文在线资源库| 欧美综合一区第一页| 蜜桃成人精品| 91久久国产精品91久久性色| 亚洲精品黑牛一区二区三区| 国产精品免费一区二区三区| 欧美大胆视频| 久久久水蜜桃| 久久蜜桃av| 久久综合亚洲精品| 一区二区三区福利| 国产三级国产精品国产专区50| 韩国成人福利片在线播放| 又色又爽又黄18网站| 97久久精品人人澡人人爽| 免费视频91蜜桃| 亚洲黄色免费电影| 国产精品国产三级国产专区52| 色av成人天堂桃色av| 国产精品视频久久久久久| 亚洲福利一区| 久久久国产精品视频| 久久不射影院| 国产成人精品久久| 免费观看亚洲天堂| 久久一区二区精品| 亚州av乱码久久精品蜜桃| 日本手机在线视频| 日本91福利区| 亚洲av成人精品一区二区三区| 欧美国产国产综合| 国产性猛交普通话对白| 欧美综合在线视频| 亚洲美女性生活| 在线国产精品播放| 超碰97免费在线| 国产美女久久精品| 五月国产精品| 男人草女人视频| 免费在线一区观看| av无码一区二区三区| 亚洲欧洲另类国产综合| 一级黄色在线视频| 亚洲国产成人精品女人久久久 | 国产一区二区观看| 分分操这里只有精品| 激情综合色播五月| 麻豆精品免费视频| 亚洲大片在线观看| 国产精品久久久久久在线| 亚洲视频第一页| 九九精品调教| 国产在线视频91| 国产不卡av一区二区| 久久精品无码中文字幕| 精品一区在线看| 精品欧美一区二区久久久| 性做久久久久久久久| 国产av精国产传媒| 俺去了亚洲欧美日韩| 欧美成人app| 欧美日韩高清在线一区| 中日韩男男gay无套| 国产无套精品一区二区三区| 国产精品久久久久久久第一福利| 久久久久久久久黄色| 亚洲国产精品嫩草影院久久| 日本在线视频中文有码| 成人中文字幕+乱码+中文字幕| 波多野结衣在线播放一区| 成年人免费在线播放| 99re热视频精品| 青青草av在线播放| 亚洲第一免费网站| 99久久精品免费看国产小宝寻花 | 亚洲国产精品二区| 精品中文字幕在线2019| 国产视频一区二| 中文字幕色呦呦| 国产精品456| 成人羞羞国产免费| 欧美日韩尤物久久| 日韩欧美99| 日韩精品国产欧美| 精品人妻中文无码av在线 | 中文在线资源观看网站视频免费不卡 | 黄色在线网站| 国产精品91久久久久久| 国产探花一区在线观看| 天天影视综合色| 中文字幕精品综合| 91麻豆国产在线| 欧美大尺度激情区在线播放| 亚洲欧美日本国产| 97视频在线免费| www久久精品| 久久久久精彩视频| 日韩在线一区二区三区免费视频| 婷婷久久免费视频| 日韩成人午夜影院| 成人av网站大全| 在线观看日本视频| 一区二区成人av| 亚洲tv在线| 国产女教师bbwbbwbbw| www.66久久| 国产午夜无码视频在线观看| 自拍视频国产精品| 欧美三级一区| 久激情内射婷内射蜜桃| 久久精品一区二区三区不卡| 在线免费观看日韩视频| 麻豆成人在线看| 日韩丝袜视频| 校园春色 亚洲色图| 亚洲精品久久久蜜桃| 全色精品综合影院| 成人激情在线播放| 亚洲毛片在线| www.黄色com| 亚洲成年人影院在线| 高清av一区| 性高湖久久久久久久久aaaaa| 久久久无码精品亚洲日韩按摩| 亚洲综合免费视频| 性金发美女69hd大尺寸| 欧美在线色图| 先锋资源av在线| 欧美日韩中文字幕一区二区| bl在线肉h视频大尺度| 亚洲精品在线视频观看| av一二三不卡影片| 日本一区二区三区久久| 久久久噜噜噜久久| 色狮一区二区三区四区视频| 少妇精品无码一区二区三区| 欧美色偷偷大香| 色多多在线观看| 做爰高潮hd色即是空|