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

查漏補(bǔ)缺@DateTimeFormat到底干了些啥

開發(fā) 前端
Spring中的轉(zhuǎn)換器、格式化器是整個(gè)Spring技術(shù)棧體系中非常重要的一份子,是眾多高級特性的基礎(chǔ)支撐。

[[385892]]

本文轉(zhuǎn)載自微信公眾號「BAT的烏托邦」,作者YourBatman。轉(zhuǎn)載本文請聯(lián)系BAT的烏托邦公眾號。

本文提綱

版本約定

  • Spring Framework:5.3.x
  • Spring Boot:2.4.x

正文

Spring中的轉(zhuǎn)換器、格式化器是整個(gè)Spring技術(shù)棧體系中非常重要的一份子,是眾多高級特性的基礎(chǔ)支撐。

作為一個(gè)Spring的使用者,也許你工作了好幾年都只接觸到@DateTimeFormat這個(gè)注解才感知到Spring是有格式化能力的;也許你在使用xml配置、Spring MVC時(shí)全然不知自動(dòng)化封裝的流程,也就感知不到Converter轉(zhuǎn)換器模塊的存在;也許你還一直不確定@DateTimeFormat能標(biāo)注在哪些類型上,每次使用時(shí)都得用谷歌百度一下......

作為一個(gè)Spring的開發(fā)者,以上不應(yīng)該再成為問題。而是能說會道,滾瓜爛熟。下面將本文補(bǔ)充內(nèi)容傳遞給你,坐穩(wěn)發(fā)車嘍。

@DateTimeFormat注解到底做了什么?

不用猜,很多程序員同學(xué)知道/使用@DateTimeFormat注解是在Spring MVC場景,甚至只是在此場景:前端傳一個(gè)日期時(shí)間格式的值,后端使用Date/LocalDateTime接收此值時(shí)使用。

Request的請求實(shí)體形如這樣:

  1. @Data 
  2. public class Person{ 
  3.   
  4.  @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss"
  5.  private LocalDateTime arriveTime; 

這么一來,前端傳入"2021-03-07 21:00:00"這種格式的字符串就能被自動(dòng)封裝進(jìn)arriveTime了。

說明:String -> LocalDateTime arriveTime屬于Parser功能(也稱作輸入),此注解在xxx -> String輸出時(shí)(Printer功能)也會生效的?

使用了@DateTimeFormat這么久,你是否知道它并不屬于spring-web/spring-webmvc模塊的類,而是屬于spring-context:org.springframework.format.annotation.DateTimeFormat。換句話講:@DateTimeForma它屬于基礎(chǔ)設(shè)施類,并不是只能用于web層,而是可用于所有有需要轉(zhuǎn)換的地方。

通過上篇文章 我們知道了,@DateTimeFormat和@NumberFormat注解的功能底層是依賴于AnnotationFormatterFactory以及格式化器注冊中心FormatterRegistry核心API去完成的。那么這個(gè)流程是怎樣的呢?

可能這么說還是覺得比較抽象,那么我嘗試畫了一幅流程圖,可助你掌握這部分的核心工作原理(執(zhí)行流程):

該流程可釋義為:通過格式化器注冊中心FormatterRegistry的API向其注冊注解工廠AnnotationFormatterFactory以支持格式化注解。但是,底層其實(shí)都(為每個(gè)FieldType類型)適配為了Converter才注冊到FormatterRegistry進(jìn)去的。換句話講:FormatterRegistry(其實(shí)是ConverterRegistry)底層管理的永遠(yuǎn)是一些簡單的Converter轉(zhuǎn)換器們,這便也符合了越底層越抽象,越上層越具體的設(shè)計(jì)原則,是一種良好的設(shè)計(jì)方案。

值得注意:ConverterRegistry管理的底層這些Converter是分為三大類的喲。1:1、1:N、N:N?

向注冊中心注冊完成后,轉(zhuǎn)換服務(wù)就具備了AnnotationFormatterFactory所支持的類型FieldType <-> String互相轉(zhuǎn)換的能力了。當(dāng)然嘍,讓其能執(zhí)行轉(zhuǎn)換動(dòng)作還有個(gè)前提條件是FieldType上必須標(biāo)注有AnnotationFormatterFactory指定的注解類型才行,這個(gè)時(shí)候@DateTimeFormat就發(fā)揮作用啦。

這么來看,@DateTimeFormat注解自己其實(shí)并未做什么,只是純被當(dāng)做Field上的一個(gè)元數(shù)據(jù)被用作參與判斷、格式化時(shí)所需參數(shù)的指定,此注解它是面向開發(fā)者的。真正做了“很多事”的其實(shí)是AnnotationFormatterFactory和FormatterRegistry等底層核心API,它們在初始化階段就默默全部完成,而這一切(較為復(fù)雜)的邏輯對開發(fā)者是完全透明的。

JSR 310日期時(shí)間注冊員

上篇文章 介紹了Spring格式化器倒排思想,其具體體現(xiàn)在FormatterRegistrar接口的設(shè)計(jì),上文用“比較古老”的支持java.util.Date類型的DateFormatterRegistrar打了個(gè)樣,體驗(yàn)了一把倒排設(shè)計(jì)的好處。

我們知道在Java領(lǐng)域日期時(shí)間類型分為三大領(lǐng)域:老Date體系、JSR 310體系、Joda-time體系。這不FormatterRegistrar接口的繼承體系三個(gè)實(shí)現(xiàn)類剛好與之對應(yīng):

A哥不建議在開發(fā)中再以任何理由再使用Date類型,而是用JSR 310取以代之。因此接下來,就看看DateTimeFormatterRegistrar注冊員為我們做了哪些事。

DateTimeFormatterRegistrar:JSR 310注冊員

Since 4.0。在Spring下使用以支持JSR 310日期時(shí)間的格式化/轉(zhuǎn)換。

我們知道,JSR 310對日期時(shí)間的格式化其實(shí)已經(jīng)非常完善了,具體都體現(xiàn)在java.time.format.DateTimeFormatter這個(gè)Java原生API里。Spring針對于JSR 310日期時(shí)間類型格式化只是在DateTimeFormatter的基礎(chǔ)上做了簡單封裝和適配,讓它使用起來的姿勢盡量和Date/JodaTime保持一致,以便對開發(fā)者更加友好,代碼結(jié)構(gòu)設(shè)計(jì)上也能夠趨近于統(tǒng)一。

本系列前面文章介紹過的DateTimeFormatterFactory便是對DateTimeFormatter的簡單包裝,用于生產(chǎn)格式化器實(shí)例的工廠。此處的DateTimeFormatterRegistrar就使用它倆來進(jìn)行一系列注冊動(dòng)作,因此可理解為他是更上層的封裝形式。

源碼分析

下面從源碼下手一探究竟。

截圖里示例出該實(shí)現(xiàn)類支持的類型,這里用自定義的枚舉類來更抽象的方式定義為三類了,即日期、時(shí)間、日期時(shí)間。這三大類其實(shí)包含了JSR 310類型的主要API,包括:LocalDate、LocalTime、LocalDateTime、ZonedDateTime、OffsetDateTime、OffsetTime共計(jì)6個(gè)API。對比一下這不正就是Jsr310DateTimeFormatAnnotationFormatterFactory所支持的六大類型么,如下截圖所示:

說明:該份截圖是說明@DateTimeFormat只能標(biāo)注在JSR 310日期時(shí)間的這6種類型上才有效哦。

其實(shí),在任何時(shí)候Spring都不建議你直接使用原生的DateTimeFormatter這個(gè)API,而是用其封裝過的org.springframework.format.datetime.standard.DateTimeFormatterFactory來獲得一個(gè)DateTimeFormatter實(shí)例,以便使用起來更具統(tǒng)一性和靈活性。

這不DateTimeFormatterRegistrar它就是這么來干的:

這是唯一構(gòu)造器:3個(gè)類型對應(yīng)的DateTimeFormatter均由Spring封裝過的DateTimeFormatterFactory工廠來“動(dòng)態(tài)”產(chǎn)生,而非直接綁定。由于DateTimeFormatter被設(shè)計(jì)為不可變,若初始化時(shí)就綁定上,后面將無法做定制化設(shè)置。這也是引入DateTimeFormatterFactory來做定制化參數(shù)“緩存”的又一作用~

由于使用DateTimeFormatterFactory而并非直接使用DateTimeFormatter,就可以很方便的對不同類型做參數(shù)定制化,如下方法們,它們是作用在DateTimeFormatterFactory上的,從而可以確保多個(gè)條件共存:

當(dāng)然,最重要的當(dāng)屬對FormatterRegistrar 接口方法 的實(shí)現(xiàn)邏輯:

①:這個(gè) 步驟類似于上文講述DateFormatterRegistrar時(shí)調(diào)用其public靜態(tài)方法addDateConverters(registry),作用為注冊基礎(chǔ)轉(zhuǎn)換器(如Date -> Calendar,Date -> Long的Converter轉(zhuǎn)換器),從而提供基本的轉(zhuǎn)換能力。值得注意的是:DateTimeConverters.registerConverters(registry)內(nèi)部調(diào)用了DateFormatterRegistrar.addDateConverters(registry),并且額外增加了LocalDate、Calendar、Long、Instant等等的Converter轉(zhuǎn)換器(如ZonedDateTimeToLocalDateConverter、LongToInstantConverter等等),后者是前者的超集。

無獨(dú)有偶:jodaTime的JodaTimeConverters.registerConverters(registry)內(nèi)部必然也調(diào)用了DateFormatterRegistrar.addDateConverters(registry)嘍,感興趣可自己去瞅瞅確認(rèn)下?

②:生成每個(gè)類型對應(yīng)的格式化器。簡單的講就是通過DateTimeFormatterFactory創(chuàng)建出對應(yīng)的格式化器DateTimeFormatter③:這一步的作用在源碼中的注釋部分解釋得很清楚了,這一大段代碼的作用是使用ISO_LOCAL_*這種變種格式化器來代替執(zhí)行,效果是性能提升2倍

?說明:這個(gè)做法在前文提到的Jsr310DateTimeFormatAnnotationFormatterFactory里getPrinter()生成格式化器時(shí)也被用到了用以成倍提升轉(zhuǎn)換性能?

④:對于不需要特殊提速的類型,注冊綁定上專用的格式化器org.springframework.format.Formatter即可。如PeriodFormatter、DurationFormatter等

⑤:讓@DateTimeFormat注解對JSR 310日期時(shí)間提供支持。關(guān)于格式化注解方面的知識,請向上爬2層樓 or 點(diǎn)擊文首/文末推薦鏈接均可進(jìn)入文章進(jìn)行詳細(xì)了解,加深記憶。

代碼示例

下面介紹DateTimeFormatterRegistrar注冊員的使用示例,其中包括API使用方式,以及面向注解的使用方式。

API使用方式

此類使用方式一般門檻較高,需要對底層API有較熟了解才能運(yùn)用自如,一般是需要在Spring基礎(chǔ)上做二次開發(fā)的小伙伴才會用到,用個(gè)簡單示例了解一下用法:

  1. @Test 
  2. public void test1() { 
  3.     FormattingConversionService conversionService = new FormattingConversionService(); 
  4.     // 注冊員負(fù)責(zé)添加格式化器以支持Date系列的轉(zhuǎn)換 
  5.     new DateTimeFormatterRegistrar().registerFormatters((FormatterRegistry) conversionService); 
  6.  
  7.     // 1、普通使用(API方式) 
  8.     LocalDateTime now = LocalDateTime.now(); 
  9.     System.out.println("當(dāng)前時(shí)間:" + now); 
  10.     System.out.println("LocalDateTime轉(zhuǎn)為LocalDate:" + conversionService.convert(now, LocalDate.class)); 
  11.     System.out.println("LocalDateTime轉(zhuǎn)為LocalTime:" + conversionService.convert(now, LocalTime.class)); 
  12.  
  13.     // 時(shí)間戳轉(zhuǎn)Instant 
  14.     long currMills = System.currentTimeMillis(); 
  15.     System.out.println("當(dāng)前時(shí)間戳:" + currMills); 
  16.     System.out.println("時(shí)間戳轉(zhuǎn)Instant:" + conversionService.convert(currMills, Instant.class)); 

運(yùn)行程序,輸出:

  1. 當(dāng)前時(shí)間:2021-03-07T21:19:39.752 
  2. LocalDateTime轉(zhuǎn)為LocalDate:2021-03-07 
  3. LocalDateTime轉(zhuǎn)為LocalTime:21:19:39.752 
  4. 當(dāng)前時(shí)間戳:1615123179763 
  5. 時(shí)間戳轉(zhuǎn)Instant:2021-03-07T13:19:39.763Z 

完美。

通過這個(gè)示例,現(xiàn)在知道為啥前端傳個(gè)時(shí)間戳,后端不用Long而使用Instant也能“接得住”不報(bào)錯(cuò)了吧~

注解使用方式

見與Spring MVC整合使用方式章節(jié),詳細(xì)解釋。

JodaTimeFormatterRegistrar:joda-time注冊員

@deprecated as of 5.3,請使用Java標(biāo)準(zhǔn)的JSR 310日期時(shí)間代替

Tips:JodaDateTimeFormatAnnotationFormatterFactoryy也一樣在5.3版本被標(biāo)記為過期了?

jodaTime曾經(jīng)乃是絕對的王者,拯救Java日期時(shí)間于水火,直到JSR 310體系的出現(xiàn)。同樣的那句話送給你:建議不要在(新)項(xiàng)目中以任何理由去使用jodaTime,而是和Date一樣完全放棄,使用JSR 310足矣。

說明:現(xiàn)在不建議再使用JodaTime并非卸磨殺驢,而是JSR 310就是jodaTime的作者/組織捐贈給Java的(你看那語法,多像!),所以現(xiàn)在叫功成身退更為恰當(dāng)?

由于jodaTime不像Date一樣有那么重的歷史包袱(關(guān)鍵Date還是JDK內(nèi)置的核心類),并且它和JSR 310一脈相承,因此在可預(yù)見的將來它將徹底告別Java舞臺,逐漸消亡。所以呢,我個(gè)人認(rèn)為,再去學(xué)習(xí)jodaTime(包括周邊)已再無必要,so此part就暫且略過嘍。

總結(jié)

作為“失聯(lián)”很久的“第一篇”文章,本文沒有太多新內(nèi)容,主要是對前兩篇收個(gè)尾,為下一場做足鋪墊。本文雖為補(bǔ)充性內(nèi)容,但“含金量”依舊還是有的,希望對你有所幫助,敬請期待本系列接下來的精彩內(nèi)容。

本文思考題

本文所屬專欄:Spring類型轉(zhuǎn)換,后臺回復(fù)專欄名即可獲取全部內(nèi)容,已被https://yourbatman.cn收錄。

看完了不一定懂,看懂了不一定會。來,文末3個(gè)思考題幫你復(fù)盤:

@DateTimeFormat能標(biāo)注在LocalDateTime上面嗎?

JSR 310日期時(shí)間有哪些常見API?

@DateTimeFormat注解如何在普通Java Bean上使用?

 

責(zé)任編輯:武曉燕 來源: BAT的烏托邦
相關(guān)推薦

2020-06-02 16:30:20

Redis數(shù)據(jù)庫字符串

2024-02-26 09:36:10

toggleAPIweb

2021-03-17 13:44:14

隱私信息安全手機(jī)

2021-03-04 08:26:17

synchronizeReentrantLojava

2018-12-05 10:44:41

Redis缺點(diǎn)程序員

2021-11-04 12:42:55

RocketMQ啟動(dòng)消費(fèi)

2023-10-09 08:31:19

2022-02-17 10:56:33

Redis數(shù)據(jù)系統(tǒng)

2018-04-04 09:00:00

區(qū)塊鏈X即服務(wù)微軟

2019-09-24 09:46:35

Tomcat連接器Lifecycle

2022-09-21 16:25:17

Redis性能

2020-01-09 13:31:50

AI 數(shù)據(jù)人工智能

2015-07-07 17:21:46

2021-03-17 10:20:14

網(wǎng)絡(luò)安全網(wǎng)絡(luò)安全技術(shù)周刊

2024-04-26 06:46:27

量化剪枝模型

2021-02-27 11:03:26

算法職責(zé)ICBU

2015-03-02 10:35:25

百度專利經(jīng)費(fèi)

2020-04-07 16:21:38

疫情科技企業(yè)

2009-06-03 09:08:36

2020-11-24 08:05:18

5G衛(wèi)星通信
點(diǎn)贊
收藏

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

国产日韩欧美精品电影三级在线 | 外国成人在线视频| 婷婷开心激情综合| 热舞福利精品大尺度视频| 国产精品久久久久久免费播放| 国产精品多人| 中文字幕日韩精品在线| 亚洲一区二区图片| 超碰国产一区| 亚洲一区二区在线免费观看视频 | 天堂91在线| 精品无码三级在线观看视频 | 中国黄色录像片| 美女欧美视频在线观看免费| 国产麻豆一精品一av一免费| 国产91在线播放九色快色| 国产精品久久国产精麻豆96堂| 红杏视频成人| 欧美一区二区私人影院日本| 成人免费aaa| 91一区二区三区在线| 欧美激情在线一区二区三区| 久久精品二区| 蜜臀久久99精品久久久| 国产在线国偷精品免费看| 国产脚交av在线一区二区| 国产极品在线播放| 国产69视频在线观看| 性中国古装videossex| 日韩精品福利网| 国内精久久久久久久久久人| 日本爱爱爱视频| 欧美一区二区三区红桃小说| 日韩丝袜美女视频| 国产免费黄色av| 嗯啊主人调教在线播放视频| 中文字幕视频一区二区三区久| 欧美午夜精品久久久久久蜜| 少妇激情av一区二区| 成人av在线看| 国产精品国产三级国产专区53 | 国产精品中文字幕日韩精品| 国产精品亚洲第一区| av一级在线观看| 亚洲一区亚洲| 欧美激情xxxxx| 久草免费在线视频观看| 亚洲91久久| 日韩专区在线观看| 免费精品在线视频| 97欧美在线视频| 久久久av免费| 久久精品免费电影| 欧美日韩一级二级| 韩国成人一区| 亚洲精品一区二区三区不卡| 中文字幕一区二区三区人妻四季| 欧美一区二区三区黄片| 久久精品国产一区二区| 国产精品www色诱视频| 销魂美女一区二区| 蜜臀91精品一区二区三区| 国产精品一区电影| 亚洲手机在线观看| 国产乱妇无码大片在线观看| 99久久99| 亚州视频一区二区三区| 国产午夜亚洲精品午夜鲁丝片| 欧洲在线视频一区| 无遮挡动作视频在线观看免费入口| 国产精品成人免费在线| 中文字幕剧情在线观看一区| 亚洲性图自拍| 欧美日在线观看| 亚洲免费一级视频| 欧美经典一区| 日韩成人在线免费观看| 人与嘼交av免费| 久久久久电影| 久久久久久亚洲精品中文字幕 | 亚洲va在线| 欧美裸体xxxx极品少妇| 国产无遮挡又黄又爽| 亚洲综合日韩| 国产欧美欧洲在线观看| 亚洲第一大网站| 久久久久久久网| 韩国黄色一级大片| 国产在线看片免费视频在线观看| 在线观看视频一区| 337p日本欧洲亚洲大胆张筱雨| 小嫩嫩12欧美| 久久亚洲国产精品| 久久精品国产成人av| 麻豆精品一区二区| 国产欧美一区二区三区另类精品 | 日韩欧美xxxx| 韩国三级成人在线| 亚洲精品视频播放| 黄视频网站免费看| 久久精品30| 99精品欧美一区二区三区| 黄网在线观看| 午夜亚洲福利老司机| 色一情一乱一伦一区二区三区日本| 精品久久亚洲| 中文字幕亚洲一区二区三区五十路| 国产亚洲精品久久777777| 日韩成人精品在线观看| 国产欧美一区二区三区不卡高清| 免费黄色电影在线观看| 欧美午夜影院在线视频| 91av免费观看| 99精品综合| 日本亚洲欧洲色| 亚洲va欧美va| 亚洲欧美色图小说| 91极品视频在线观看| 啪啪国产精品| 国产精品资源站在线| 国产精品入口免费视| 午夜在线观看视频18| 韩国精品视频在线观看| 在线观看视频91| 日本丰满少妇裸体自慰| 女人色偷偷aa久久天堂| 国产精品爽爽爽爽爽爽在线观看| 台湾av在线二三区观看| 亚洲高清不卡在线观看| 日批视频在线看| 国产精品久久久久久影院8一贰佰| 国产成人自拍视频在线观看| 午夜影院免费视频| 五月婷婷激情综合网| 潘金莲一级淫片aaaaa| 影音先锋日韩精品| 91精品久久久久久久久| 天堂中文а√在线| 欧美天堂亚洲电影院在线播放| theav精尽人亡av| 国产欧美日韩综合一区在线播放| 国产精品果冻传媒潘| 在线中文字幕-区二区三区四区| 欧美日韩一区二区三区在线| 欧美人妻一区二区三区| 日本不卡视频在线观看| 日韩一区二区三区资源| 欧洲av一区二区| 亚洲最新在线视频| 国产在线一级片| 国产精品视频在线看| 男女男精品视频站| 色婷婷一区二区三区| 国产日韩欧美综合| 韩国av网站在线| 日韩一区二区免费视频| 久久久久久久久97| 99久久精品国产毛片| 91九色在线观看视频| 久久综合影院| 国产免费一区二区三区在线能观看 | 亚洲电影免费| 欧美亚洲福利| 欧美男插女视频| 天堂在线视频免费观看| 色哟哟精品一区| 日本免费www| 狠狠网亚洲精品| 国产一二三区在线播放| 亚洲电影男人天堂| 国产精品吴梦梦| 污污的网站在线免费观看| 亚洲高清在线观看| 日韩久久久久久久久久| 亚洲欧美色一区| 黄色av网址在线观看| 日韩不卡在线观看日韩不卡视频| 一区二区三区四区欧美| 91成人午夜| 日韩免费观看av| 久久亚洲天堂| 亚洲精品久久久久久久久久久久久 | 国产在线精品一区免费香蕉| 成人福利电影| 国产午夜精品一区理论片飘花| 国产精品人妻一区二区三区| 亚洲1区2区3区4区| 少妇的滋味中文字幕bd| 丰满少妇久久久久久久| 欧美日韩在线免费播放| 欧美一区网站| 欧美成人蜜桃| 麻豆精品一区| 国产福利精品av综合导导航| yellow91字幕网在线| 国产丝袜一区二区| 国产精品久久久久久久成人午夜| 精品国产91久久久| 加勒比婷婷色综合久久| 337p粉嫩大胆色噜噜噜噜亚洲| www,av在线| 三级亚洲高清视频| 久久综合久久网| 99热在线成人| 欧美日韩精品免费观看| 日韩免费一级| 国产精品视频精品视频| 日本在线啊啊| 九九久久久久久久久激情| 黄色大片在线免费观看| 精品国一区二区三区| 中文字幕日韩国产| 欧美午夜精品在线| 免费在线一级片| 中文字幕亚洲电影| av黄色在线免费观看| www.av精品| 97免费公开视频| 久久国产精品第一页| 苍井空浴缸大战猛男120分钟| 国产综合欧美| 日韩欧美猛交xxxxx无码| 日韩免费高清| 色一情一乱一伦一区二区三区| 欧美日韩看看2015永久免费| 国产伦精品一区二区| 国产精品美女久久久久| 国产在线视频2019最新视频| 123成人网| 国产精品福利久久久| 成人福利av| 91av在线免费观看视频| 国产黄色大片在线观看| 欧美精品一二区| av在线app| 欧美精品一区二区免费| av在线免费网址| 欧美不卡视频一区发布| 国产cdts系列另类在线观看| 精品精品国产国产自在线| 色欧美激情视频在线| 中文字幕欧美精品日韩中文字幕| 国产午夜视频在线观看| 亚洲一区999| 韩国三级av在线免费观看| 亚洲精品日韩在线| 国产黄在线观看| 中文字幕亚洲无线码a| 男人的天堂在线视频免费观看| 这里只有精品在线播放| 麻豆tv入口在线看| 欧美刺激性大交免费视频| 欧美xxxx做受欧美88bbw| 欧美高清不卡在线| 99riav视频在线观看| 欧美一级高清免费播放| 黄瓜视频成人app免费| 国产精品久久久久久亚洲影视| 97人人做人人爽香蕉精品| 国产欧美精品久久久| 精品国产三区在线| 国产精品成人一区二区三区| 久久aimee| 欧美亚洲另类久久综合| 精品久久电影| 18视频在线观看娇喘| 激情视频一区| 久久久精品在线视频| 喷水一区二区三区| 日本特黄在线观看| 91丨国产丨九色丨pron| 卡一卡二卡三在线观看| 亚洲欧美国产77777| 久久精品99国产精| 黄色成人av网| 91精品国产乱码久久久久| 欧美大片在线观看一区二区| 四虎精品在永久在线观看 | 久久久久久99| 日韩大片在线播放| 日韩一二区视频| 国产精品久久久久久模特| 男人舔女人下面高潮视频| 国产精品自在欧美一区| 亚洲自拍偷拍一区二区| 亚洲三级小视频| 毛片基地在线观看| 在线播放/欧美激情| 天堂中文在线资源| 丝袜亚洲欧美日韩综合| 国产理论在线| 国产日韩欧美黄色| 欧美影院天天5g天天爽| 天天综合中文字幕| 国产日韩精品视频一区二区三区 | 亚洲免费观看高清| 国产精品视频123| 日韩一级黄色片| 福利在线播放| 91成人天堂久久成人| 精品久久亚洲| 亚洲国产精品一区在线观看不卡 | 日本三区在线观看| 国产不卡视频一区二区三区| 丁香花五月婷婷| 五月婷婷综合网| 国产情侣av在线| 在线免费观看羞羞视频一区二区| 波多野结衣乳巨码无在线观看| 成人激情视频网| 精品成人影院| 无码播放一区二区三区| 国产精品一区二区在线播放| 天美传媒免费在线观看| 色综合久久综合网| 天天干天天舔天天射| 久久精品99久久香蕉国产色戒| 亚洲校园激情春色| 操人视频欧美| 亚洲a一区二区三区| 日本免费色视频| 中文字幕精品一区二区三区精品 | 这里是久久伊人| 成人在线观看黄色| 国产97色在线| 黄色免费大全亚洲| 黄色特一级视频| 国产综合成人久久大片91| 欧美成人久久久免费播放| 在线观看日韩毛片| 国产视频三级在线观看播放| 欧美整片在线观看| 欧美绝顶高潮抽搐喷水合集| 波多野结衣综合网| 成人亚洲一区二区一| 麻豆亚洲av成人无码久久精品| 日韩免费视频线观看| a级在线观看| 91久久精品www人人做人人爽| 91精品国产调教在线观看| 五月婷婷之婷婷| 国产精品对白交换视频| 在线观看免费高清视频| 中文字幕av一区| 成人午夜sm精品久久久久久久| 色一情一乱一伦一区二区三区丨| 日本系列欧美系列| 999精品久久久| 欧美精品在线观看一区二区| 免费人成在线观看播放视频| 成人网址在线观看| 欧美日韩 国产精品| 制服.丝袜.亚洲.中文.综合懂| 亚洲一区二区中文在线| 天天操天天干天天| 日本中文字幕久久看| 欧美手机在线| 亚洲第一成肉网| 亚洲一区二区三区中文字幕| 婷婷在线免费观看| 欧洲亚洲在线视频| 日韩精品一区二区久久| 91免费视频污| 亚洲综合一二区| 青青久在线视频免费观看| 国产精品久久久久一区二区| 午夜久久免费观看| 天堂www中文在线资源| 欧美视频在线观看免费| 99精品老司机免费视频| 亚洲va久久久噜噜噜| 激情久久久久久久| 国产真实乱人偷精品人妻| 欧美日韩视频在线观看一区二区三区 | 国产一精品一av一免费爽爽| 800av在线免费观看| 久久综合久久综合久久综合| 亚洲怡红院av| 久久久久久久亚洲精品| 国产伦精品一区二区三区千人斩| 九九热精品国产| 亚洲国产精品久久久男人的天堂| 飘雪影院手机免费高清版在线观看 | 亚洲欧美专区| 成人免费毛片在线观看| 国产欧美一区二区精品性色| 午夜久久久久久久久久| 日韩免费观看网站| 在线精品小视频| 免费看污片网站| 欧美成人精品高清在线播放| 巨胸喷奶水www久久久| 日本a级片在线播放| 国产色产综合产在线视频| 亚洲av无码国产综合专区| 国产精品久久久久久久7电影| 激情综合网址| 欧美日韩色视频| 精品亚洲一区二区| 91精品啪在线观看国产爱臀 |