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

注解都不會用,怎讓Java對你動情

開發(fā) 后端
「注解」 也稱為 元數(shù)據(jù)。為我們在代碼中添加信息提供了一種形式化的方法,使我們可以在稍后某個時刻非常方便地使用這些數(shù)據(jù)。

[[344016]]

本文轉載自微信公眾號「小菜良記」,作者蔡不菜丶 。轉載本文請聯(lián)系小菜良記公眾號。   

初識

“「注解」 也稱為 元數(shù)據(jù)。為我們在代碼中添加信息提供了一種形式化的方法,使我們可以在稍后某個時刻非常方便地使用這些數(shù)據(jù)。

注解是在 Java 1.5 之后引入的,它可以提供用來完整地描述程序中所需的信息,可以由編譯器來測試和驗證的格式,存儲有關程序的額外信息。

注解的使用很簡單,只需要和 @ 符號搭配。有些 Java 初學者常常會把 「注解」 和「注釋」 混淆,但是兩者的作用卻大同小異,都是用來描述信息,不同的是 「注解」 描述的信息是給應用程序看的,而 「注釋」 描述的信息是給開發(fā)人員看的。

初學者對「注解」的印象可能不深,「注解」也許不起眼但是處處可見。

最常見到的便是 @Override,表示當前的方法定義將覆蓋父類的方法,如果拼寫錯誤,或者方法簽名對不上被覆蓋的方法,編譯器就會發(fā)出錯誤提示。

既然都說到@Override注解了,那仔細回憶下,腦子里估計就浮現(xiàn)出@SuppressWarnnings注解。還記得我最早見到這個注解的時候,還是Myeclipse提示我使用的,我也不管三七二十一,就給標注上了。后來才知道這個注解是用來關閉編譯器對類、方法、成員變量、變量初始化的警告。

上面兩個都說完了,那不妨再來一個,這個可能是最不常見的。那就是@Deprecated

 

不要因為這個類加了橫線感到奇怪,那是因為@Deprecated的效果。它的具體功能就是用于標識方法或類,標識該類或方法已過時,建議不要使用。如果開發(fā)人員使用了注解為它的元素,那么編譯器就會發(fā)出警告信息。

剛剛開局不久,我們就已經(jīng)學到了三個注解的使用,雖然只是基本的,但接下來我們就通過這三個注解為導線通關打怪吧。

首關之程媧造注

注解一旦構造出來,就享有編譯器的類型檢查保護。讓我們先看下一組代碼熱熱身:

  1. public class TestService { 
  2.  
  3.     @MyAnnotation 
  4.     public void runTset() { 
  5.         System.out.println("annotation test"); 
  6.     } 
  7.  

不要納悶,Java 中確實沒有一個注解名為MyAnnotation,但這個怎么來的呢,就是我們自己造的。

那么關子賣完了,接下來就來揭秘注解的制造:

  1. @Target(ElementType.METHOD) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface MyAnnotation { 

這樣子,一個簡單的注解就新鮮出爐了。需要注意的是這可不是一個接口,需要留言interface前面還有一個@,這個標識要是漏掉了,那可以天差地別。

細心的小伙伴可能注意到了,定義的注解頭上怎么還有注解。

 

這就是接下來要講到,敲黑板,注意看!

元注解來幫忙

在定義注解時,會需要一些元注解。上面出現(xiàn)了兩個,分別是@Target和@Retention.

其中@Target用來定義你的注解將應用于什么地方(例如一個方法或一個域),@Retention用來定義該注解在哪一個級別可用,在源代碼中(「SOURCE」),類文件中(「CLASS」)或者運行時(「RUNTIME」)。Java 提供了四種元注解,如下:

名稱 用處
「@Target」 標識該注解可以用于什么地方。其中 ElementType 參數(shù)包括:
1. CONSTARUCTOR:構造器的聲明
2. FIELD:域聲明(包括enum實例)
3. LOCAL_VARIABLE:局部變量聲明
4. METHOD:方法聲明
5. PACKAGE:包聲明
6. TYPE:類、接口(包括注解類型)或enum 聲明
「@Retention」 表示需要在什么級別保存該注解信息,其中RetentionPolicy參數(shù)包括:
1.SOURCE:注解將被編譯器丟棄
2.CLASS:注解在 class 文件中可用,但會被 VM 丟棄
3. RUNTIME:VM 將在運行期也保留注解,因此可以通過反射機制讀取注解的信息
「@Documented」 將此注解包含在 JavaDoc 中
「@Inherited」 允許子類繼承父類的注解

注解也分類

我們在上面示例中創(chuàng)建了一個 @MyAnnotation 注解。看起來很簡單,沒什么內(nèi)容,因此這種注解我們也稱為 「標記注解」,注解也分幾類:

  • 標記注解:注解內(nèi)部沒有屬性。使用方式:「@注解名」
  1. //定義 
  2. @Target(ElementType.METHOD) 
  3. @Retention(RetentionPolicy.RUNTIME) 
  4. public @interface MyAnnotation { 
  • 單值注解:注解內(nèi)部只有一個屬性。使用方式:「@注解名(key = value)」
  1. //定義 
  2. @Target(ElementType.METHOD) 
  3. @Retention(RetentionPolicy.RUNTIME) 
  4. public @interface SingleValueAnnotation { 
  5.     String name(); 
  6. //使用 
  7. @SingleValueAnnotation(name = "test"
  8. public void singleTest() {} 
  • 多值注解:注解內(nèi)部有過個屬性。使用方式:「@注解名(key = value, key = value, ...)」
  1. //定義 
  2. @Target(ElementType.METHOD) 
  3. @Retention(RetentionPolicy.RUNTIME) 
  4. public @interface MultiValueAnnotation { 
  5.     String name(); 
  6.     int num(); 
  7. //使用 
  8. @MultiValueAnnotation(name = "test", num = 1) 
  9. public void multiTest() {} 

值也有默認

當我們使用的不是標記注解時,如果在使用注解的時候不給注解中的屬性賦上值,那么編譯器就會報錯,提示我們需要賦值。

 

這樣子是很不方便,有時候我們并沒有使用到或值是固定的不想重復寫,那么這個時候就需要借助「default」關鍵字來幫忙我們解決這種問題。

  1. @Target(ElementType.METHOD) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface MultiValueAnnotation { 
  4.      
  5.     String name(); 
  6.      
  7.     int num() default 0; 

我們在屬性上使用了 default 關鍵字來聲明 num 屬性的默認值為 0 ,這樣子我們在使用上述那個注解的時候就可以不用手動給num賦值了。

次關之造器解注

注解具有讓編譯器進行編譯檢查的作用,但是如果沒有用來讀取注解的工具,那注解也不會比注釋更有用,起碼注釋可以讓開發(fā)人員更直觀的看到此段代碼的用處。

重回反射想要創(chuàng)建與使用 「注解處理器」,我們還需要借助反射機制來構造這類工具。以下是簡單的例子:

  1. public class AnnotationHandle { 
  2.  
  3.     public static void track(Class<?> c) { 
  4.         for (Method m : c.getDeclaredMethods()) { 
  5.             MultiValueAnnotation annotation = m.getAnnotation(MultiValueAnnotation.class); 
  6.             if (annotation != null) { 
  7.                 System.out.println("name:" + annotation.name() + 
  8.                         "\n num:" + annotation.num()); 
  9.             } 
  10.         } 
  11.     } 
  12.  
  13.     public static void main(String[] args) { 
  14.         track(TestService.class); 
  15.     } 
  16.  
  17. /*  OUTPUT
  18.   name:test 
  19.    num:0 
  20. */ 

在上述例子中我們用到了兩個反射的方法:getDeclaredMethods()和getAnnotation()。

其中getDeclaredMethods() 用來返回該類的所有方法,getAnnotation()用來獲取指定類型的注解對象。如果方法上沒有該注解則會返回 「null」 值。

注解元素可用類型

上述@MultiValueAnnotation注解中我們定義了 String類型的 「name」 和 int類型的 「num」,除此之外我們還可以使用其他類型如下:

  • 「基本類型」(「int、float、boolean等」)
  • 「String」
  • 「Class」
  • 「enum」
  • 「Annotation」
  • 「以上類型的數(shù)組」

如果使用了上面以外的其他類型,那么編譯器就會報錯。而且要注意的是,「也不能使用基本類型的包裝類型」

默認值的限制

上述例子中我們也看到了,我們可以在使用注解的時候給注解屬性賦值,也可以在定義注解的時候給注解一個默認值,但是這兩者都說明了一件事:「那就是,注解元素不能有不確定的值,要么具有默認值,要么在使用注解時提供元素的值」

基本元素不存在null值,因此對于非基本類型的元素,無論是在使用中聲明,還是在定義時聲明, 「都不能將 null 值作為其值」。因此在實際開發(fā)中,我們往往會定義一些特殊值作為不存在的標識,例如 「負數(shù)」 或 「空字符串」

三關之運注帷幄

在前面兩關中,我們學會了定義注解和創(chuàng)建注解處理器。接下來我們就要來更加深入掌握注解!

注解也能嵌套

在修飾注解元素的時候我們看到可以使用Annotation來修飾,估計看到那的時候會覺得有點奇怪。在這里就來為你來揭秘。

先來看一組注解:

@Constraints

  1. @Target(ElementType.FIELD) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface Constraints { 
  4.     boolean primaryKey() default false
  5.     boolean unique() default false

@SQLString

  1. @Target(ElementType.FIELD) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface SQLString { 
  4.     String name() default ""
  5.     Constraints constraints() default @Constraints; 

我們在@SQLString注解中使用Constraints注解元素,并將默認值設為@Constraints。這個時候Constraints中的值都是@Constraints注解中定義的默認值,如果我們要使用自定義的話,做法如下:

  1. @Target(ElementType.FIELD) 
  2. @Retention(RetentionPolicy.RUNTIME) 
  3. public @interface SQLString { 
  4.     String name() default ""
  5.     Constraints constraints() default @Constraints(primaryKey = true); 

這樣子我們就可以使用自己定義的「value」

注解不支持繼承

我們不能使用extends來繼承某個@interface,但是可以通過嵌套的方式來解決這一煩惱。

AOP與注解的搭配

「AOP」 在當今開發(fā)中我們并不陌生,那么 「AOP」 和 「注解」 能產(chǎn)生什么化學反應呢,請看以下代碼:

@ApiLog:

  1. @Retention(RetentionPolicy.RUNTIME) 
  2. @Target({ElementType.METHOD, ElementType.TYPE}) 
  3. public @interface ApiLog { 
  4.     /** 
  5.      * 接口名稱 
  6.      */ 
  7.     String name(); 

使用:

  1. @GetMapping(value = "/getConfig"
  2. @ApiLog(name = "獲取系統(tǒng)相關配置"
  3. public Result getConfig() throws Exception { 
  4.     return sendOK(SystemService.getConfig(type)); 

Aop使用:

  1. @Aspect 
  2. @Component 
  3. public class SysLogAspect { 
  4.     @Autowired 
  5.     private LogService logService; 
  6.      
  7.     @Pointcut("@annotation(cbuc.life.annotation.ApiLog)"
  8.     public void logPointCut() {         
  9.     } 
  10.  
  11.     @Around("logPointCut()"
  12.     public Object around(ProceedingJoinPoint point) throws Throwable { 
  13.         long beginTime = System.currentTimeMillis(); 
  14.         //執(zhí)行方法 
  15.         Object result = point.proceed(); 
  16.         //執(zhí)行時長(毫秒) 
  17.         long time = System.currentTimeMillis() - beginTime; 
  18.         //保存日志 
  19.         saveSysLog(point, time); 
  20.         return result; 
  21.     } 
  22.  
  23.     private void saveSysLog(ProceedingJoinPoint joinPoint, long time) { 
  24.         MethodSignature signature = (MethodSignature) joinPoint.getSignature(); 
  25.         Method method = signature.getMethod(); 
  26.  
  27.         LogEntity log = new LogEntity(); 
  28.         ApiLog apiLog = method.getAnnotation(ApiLog.class); 
  29.         if(apiLog != null){ 
  30.             //注解上的描述 
  31.             log.setMethodDescribe(syslog.value()); 
  32.         } 
  33.  
  34.         //請求的方法名 
  35.         String className = joinPoint.getTarget().getClass().getName(); 
  36.         String methodName = signature.getName(); 
  37.         log.setMethod(className + "." + methodName + "()"); 
  38.  
  39.         //請求的參數(shù) 
  40.         Object[] args = joinPoint.getArgs(); 
  41.         String params = JSON.toJSONString(args[0]); 
  42.         log.setParams(params); 
  43.  
  44.         //獲取request 
  45.         HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 
  46.  
  47.         //設置IP地址 
  48.         log.setIp(ServletUtil.getIpAddress(request)); 
  49.  
  50.         //用戶名 
  51.         String username = LoginInfo.getUsername(); 
  52.         log.setUsername(username); 
  53.  
  54.         //保存系統(tǒng)日志 
  55.         logService.save(log); 
  56.     } 

 

通過以上代碼,我們可以在期望記錄日志的方法上增加@ApiLog注解,該方法的動作就會被記錄進日志表,不管方法叫什么名字,類在什么位置,都可以輕松的解決,而且沒有代碼入侵!

 

責任編輯:武曉燕 來源: 小菜良記
相關推薦

2020-08-26 14:40:38

explainMySQL數(shù)據(jù)庫

2021-03-16 15:12:57

CompletableFuture機制java

2024-08-12 12:25:25

SpringMVC開發(fā)

2015-03-16 11:33:16

程序員代碼bug

2021-01-28 09:40:33

運維監(jiān)控工具軟件

2020-05-14 08:59:28

API網(wǎng)關性能

2020-09-01 14:17:03

WindowsDefender微軟

2022-02-22 08:25:51

typeScript泛型概念泛型使用

2024-09-09 08:36:36

Java操作遠程服務器

2022-03-27 22:07:35

元宇宙虛擬人IBM

2019-12-26 09:56:34

Java多線程內(nèi)部鎖

2019-09-03 09:30:46

ss 命令SocketLinux

2020-03-06 10:25:10

注解Java代碼

2021-07-07 06:54:37

網(wǎng)頁Selenium瀏覽器

2017-02-08 19:49:03

內(nèi)存SSDDRAM

2020-08-03 07:54:33

神經(jīng)網(wǎng)絡通用近似定理機器學習

2020-12-18 09:45:33

DockerLinux命令

2023-05-16 07:15:11

架構模型對象

2020-10-30 07:09:52

Lombok架構師

2025-07-04 02:00:00

點贊
收藏

51CTO技術棧公眾號

欧美日产一区二区三区在线观看| 日韩视频免费观看| 99精品在线免费视频| 五月婷婷在线播放| 日本女优在线视频一区二区| 久久九九国产精品怡红院| 亚洲欧美激情一区二区三区| 国产精品yjizz视频网| 久久天天做天天爱综合色| 国产精品国产福利国产秒拍| 久草视频免费在线| 欧美欧美黄在线二区| 777午夜精品视频在线播放| 欧美成人精品免费| 成人精品福利| 成人av免费观看| 国产精品自拍网| 日本少妇bbwbbw精品| 久久电影院7| 亚洲国产精品免费| 天天操狠狠操夜夜操| 国产福利片在线观看| 136国产福利精品导航| 久久亚洲午夜电影| 性色av蜜臀av| 蜜臀av性久久久久av蜜臀妖精| 久久久久久美女| 青青青视频在线免费观看| 免费看成人人体视频| 欧美一区二区国产| 免费一级特黄录像| 国产不卡网站| 亚洲国产精品一区二区www| 亚洲综合欧美日韩| 美女欧美视频在线观看免费| 成人国产精品免费观看动漫 | 久草视频手机在线观看| 日韩.com| 国产午夜精品美女视频明星a级| 欧美极品jizzhd欧美仙踪林| 精品伊人久久| 在线电影一区二区三区| 亚洲精品怡红院| 国产免费不卡| 天天综合网 天天综合色| 在线观看污视频| 麻豆网在线观看| 中文在线一区二区 | 乳色吐息在线观看| 3d动漫一区二区三区在线观看| 色网站国产精品| 国产三区在线视频| 涩涩视频在线| 狠狠做深爱婷婷久久综合一区 | 在线成人午夜影院| 五月婷婷之婷婷| 色8久久久久| 欧美人xxxx| 日本中文字幕影院| 久久精品超碰| 91精品国产综合久久福利| 久久成年人网站| 9.1麻豆精品| 日韩一区二区三区四区| 丰满少妇中文字幕| jizz久久精品永久免费| 亚洲国产成人精品久久| 久久久久成人精品无码中文字幕| 美国成人xxx| 亚洲精品久久久久中文字幕欢迎你 | 欧美久久天堂| 在线观看区一区二| 最新天堂在线视频| 国产一区一区| 亚洲精品一区二区三区福利| 国产真实乱人偷精品| 免费一区二区三区视频导航| 伊人av综合网| 亚洲av无一区二区三区| 中文字幕一区二区三区欧美日韩| 欧美激情视频三区| 日韩av一二三区| 久久久www| 成人久久久久久| 亚洲成人中文字幕在线| 97精品久久久久中文字幕| 欧美性天天影院| 免费大片在线观看www| 一区二区三区中文字幕电影| 777精品久无码人妻蜜桃| 亚洲伦理影院| 91精品国产高清一区二区三区| 精品人妻伦一二三区久| 国产成人高清| 久久夜色精品国产欧美乱| 国产真实乱偷精品视频| 老**午夜毛片一区二区三区| 91精品国产综合久久久久久久久| 性欧美8khd高清极品| 久久综合久久鬼色中文字| 一个色的综合| av最新在线| 欧美三级视频在线播放| 国产成人精品一区二区三区在线观看| 欧亚精品一区| 久久精品国产99国产精品澳门 | 亚洲午夜电影| 国产精品久久久久久久久| 精品国产伦一区二区三| 久久久不卡影院| 警花观音坐莲激情销魂小说| 欧美成人免费电影| 日韩免费一区二区三区在线播放| 亚洲综合色一区| 国一区二区在线观看| 国产精品福利在线观看| 欧美熟妇另类久久久久久不卡| 久久精品亚洲一区二区三区浴池| 国产精品久久国产| h1515四虎成人| 日韩成人av网址| 欧美久久久久久久久久久久| 日本在线不卡视频一二三区| 精品国产一区二区三区免费| 黄色网址视频在线观看| 91搞黄在线观看| 日本在线不卡一区二区| 一区二区三区网站| 国产精品青青在线观看爽香蕉| 无码国产精品高潮久久99| 亚洲蜜臀av乱码久久精品| 成人亚洲视频在线观看| 亚洲精品中文字幕99999| 欧美大片免费观看在线观看网站推荐| 中文字幕一二三四| 国产视频一区在线播放| www一区二区www免费| 国产成人福利av| 九九久久综合网站| 国产精品丝袜黑色高跟鞋| 亚洲国产精品高清| 亚洲色精品三区二区一区| 欧美电影完整版在线观看| 久久久久中文字幕2018| www.桃色av嫩草.com| 18欧美乱大交hd1984| 天堂中文av在线| 99国产**精品****| 国产日韩中文字幕| a√资源在线| 欧美老女人在线| 天堂网av2018| 国产在线视频精品一区| 在线看视频不卡| 欧美成人家庭影院| 日韩在线精品一区| 一本色道久久综合熟妇| 国产精品卡一卡二| 亚洲精品免费一区亚洲精品免费精品一区| 波多野结衣在线播放一区| 国产精品黄视频| 日本中文字幕电影在线免费观看 | 亚洲成色www.777999| 国产毛片一区二区三区| 国产成人a亚洲精品| 国产女主播在线写真| 欧美亚一区二区| 美女三级黄色片| 国产在线精品一区在线观看麻豆| 国产又黄又爽免费视频| 1769国产精品视频| 91高清在线免费观看| 免费在线黄色影片| 欧美体内she精视频| 免费看一级黄色| 国产成人免费视频网站高清观看视频| 日本一本中文字幕| 精品99久久| 91久久精品国产91性色| av资源一区| 一区二区欧美亚洲| 国产乱码久久久久| 一区二区久久久| 新91视频在线观看| 激情欧美日韩一区二区| 无码中文字幕色专区| 国产探花在线精品一区二区| 91欧美日韩一区| 欧亚在线中文字幕免费| www.国产一区| 五月婷婷激情在线| 日本道在线观看一区二区| 美国黄色小视频| 久久久久久久久久美女| 视频区 图片区 小说区| 国产精品亚洲欧美| 亚洲国产精品女人| 亚洲肉体裸体xxxx137| 91老司机在线| 亚洲wwww| 欧美极品少妇xxxxx| 国产精品影院在线| 亚洲第一男人av| 91精品在线视频观看| 天天色图综合网| 国产成人av免费在线观看| 91小视频免费观看| 黄色a级三级三级三级| 欧美亚洲一区二区三区| 国产综合精品一区二区三区| 成人一区视频| 久久久噜噜噜久久| 国产网友自拍视频导航网站在线观看| 亚洲第一偷拍网| 伊人网av在线| 欧美视频一二三| 99视频只有精品| 久久精品亚洲精品国产欧美| 能看毛片的网站| 久久97超碰色| 韩国日本在线视频| 欧美午夜电影在线观看| 亚洲春色在线视频| 亚洲精品播放| 国产精品亚洲一区| 欧美videos粗暴| 国产精品亚洲综合天堂夜夜| 三妻四妾完整版在线观看电视剧 | aaa在线免费观看| 亚洲精品动漫久久久久| 蜜桃在线一区二区| 欧美丰满高潮xxxx喷水动漫| 99精品在线播放| 亚洲图片有声小说| 欧美成人精品欧美一级| 国产精品人人做人人爽人人添| 久久人妻一区二区| 国产成人精品午夜视频免费| 国产精品探花在线播放| 免费成人在线影院| aaa毛片在线观看| 亚洲免费婷婷| 国产男女免费视频| 国产精品vip| 91精品一区二区三区四区| 国产高清久久| 一区二区冒白浆视频| 狠狠做六月爱婷婷综合aⅴ| 久久天天狠狠| 色婷婷久久久| 久久久久一区二区三区| 国产精品极品国产中出| 国产精品日韩二区| 亚洲日本va午夜在线电影| 69堂成人精品视频免费| 涩涩涩久久久成人精品 | 精品三级在线| 国产精品欧美日韩久久| 欧美伊人亚洲伊人色综合动图| 国产精品久久在线观看| 亚州一区二区三区| 日本高清+成人网在线观看| 性xxxxfreexxxxx欧美丶| 57pao国产精品一区| 妞干网免费在线视频| 国产成人高清激情视频在线观看| 少妇一区视频| 国产精品视频男人的天堂| 欧美成a人片在线观看久| 青青草原成人在线视频| 伊人久久综合一区二区| 日本高清视频精品| 亚洲成人a级片| 91gao视频| 国产精品极品国产中出| 日本视频一区二区不卡| 日韩精品电影| 日本一区二区精品| 欧美第十八页| 99亚洲精品视频| 中文字幕免费一区二区三区| 国产精品视频一二三四区| 黄色成人在线网址| 丰满爆乳一区二区三区| 奇米精品一区二区三区在线观看| 手机av在线网| 国产成人精品亚洲777人妖| 少妇特黄一区二区三区| 国产精品女人毛片| 欧美丰满艳妇bbwbbw| 欧美日韩性生活视频| 亚洲男人天堂网址| 911精品国产一区二区在线| 精品国产一级片| 亚洲性av在线| 99在线播放| 456亚洲影院| 成人精品在线| 久久精精品视频| 日韩精品看片| 凹凸国产熟女精品视频| 毛片av一区二区| 蜜臀av粉嫩av懂色av| 中文字幕制服丝袜成人av| 国产在线精品观看| 欧美亚洲禁片免费| 国产aⅴ爽av久久久久成人| 亚洲区在线播放| 伊人影院在线视频| 日本国产一区二区三区| 伊色综合久久之综合久久| 日本一区视频在线播放| 欧美精品91| 91pony九色| 久久综合色天天久久综合图片| 国产精品视频一区二区在线观看| 日韩欧美一区二区三区| 99国产成人精品| 国产亚洲欧洲黄色| 天堂av中文在线观看| 91精品免费视频| 希岛爱理av免费一区二区| 超碰超碰超碰超碰超碰| 老司机午夜精品视频| 欧美体内she精高潮| 亚洲国产岛国毛片在线| 三级黄色在线视频| 欧美一级午夜免费电影| 免费av网站在线观看| 欧美一级大胆视频| 在线精品国产亚洲| 杨幂一区欧美专区| 秋霞电影一区二区| 日本aaa视频| 黑人巨大精品欧美一区二区三区| 国产情侣在线播放| 正在播放亚洲1区| 蜜桃视频成人m3u8| 蜜桃传媒视频第一区入口在线看| 欧美激情视频一区二区三区在线播放| 最新国产黄色网址| 欧美国产日韩一二三区| 91porny在线| 日韩精品免费在线播放| www欧美xxxx| 国产v亚洲v天堂无码| 海角社区69精品视频| 亚洲一区二区图片| 亚洲色图欧洲色图| 国产欧美一区二区三区视频在线观看| 最近中文字幕日韩精品| 国产超碰精品| 亚洲国产精品一区在线观看不卡 | 久久久久久久久久久成人| crdy在线观看欧美| 麻豆映画在线观看| 激情久久久久久久久久久久久久久久| 日韩精品电影一区二区三区| 欧美日韩美少妇| 免费观看在线黄色网| 成人高清视频观看www| 女同性一区二区三区人了人一| 亚洲综合123| 亚洲精品成a人| 亚洲精品久久久久久无码色欲四季 | 国产乱码精品一区二区| 另类天堂视频在线观看| av综合网页| 日韩精品 欧美| 2023国产精品视频| 依依成人在线视频| 神马久久久久久| 欧美视频三区| 69堂免费视频| 欧美国产日韩a欧美在线观看| jizz国产在线| 日韩在线观看免费全集电视剧网站 | 999精品视频在线观看| 国产又黄又爽免费视频| 99久久综合精品| 国产亚洲欧美在线精品| 亚洲人成毛片在线播放| 成人污版视频| 国产在线播放观看| 国产精品毛片久久久久久| 亚洲中文一区二区三区| 欧美xxxx综合视频| 亚洲精品中文字幕99999| 天天操,天天操| 亚洲精品写真福利| 免费在线性爱视频| 国产拍精品一二三| 欧美在线观看天堂一区二区三区| 亚洲观看黄色网| 欧美三级三级三级| 国产激情在线观看| 精品婷婷色一区二区三区蜜桃| 欧美aaaaaa午夜精品| 国产在线免费视频| 亚洲香蕉成视频在线观看|