久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

如何在SpringBoot中配置提示功能

本篇文章為大家展示了如何在SpringBoot 中配置提示功能,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)公司是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,服務(wù)器托管,海外高防服務(wù)器,大帶寬服務(wù)器,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。

實(shí)戰(zhàn)

<!-- 引入相關(guān)依賴 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
</dependency>
@Configuration
@ConfigurationProperties(prefix = "file.upload")
public class FileUploadConfig {
 /** Maximum number of bytes per file */
 private String maxSize = "1024M";

 /** 不允許的文件后綴 */
 private String rejectSuffix;
 //注意:使用的時(shí)候必須要有g(shù)etter/setter,否則不會(huì)自動(dòng)生成該屬性對(duì)應(yīng)的提示
 //此處因?yàn)槠蚴÷?nbsp;getter/setter
}
@Configuration
@ConfigurationProperties("map.test")
public class MapTestConfig {
 /** 測(cè)試Map類型數(shù)據(jù)的提示 */
 private Map<String, Object> data;
 //注意:使用的時(shí)候必須要有g(shù)etter/setter,否則不會(huì)自動(dòng)生成該屬性對(duì)應(yīng)的提示
 //此處因?yàn)槠蚴÷?nbsp;getter/setter
}

中文注釋會(huì)亂碼,以上故意用中文注釋的地方,會(huì)在下面文件中指定對(duì)應(yīng)的描述,看是否會(huì)覆蓋。

additional-spring-configuration-metadata.json

{
 "properties": [
 {
 "name": "file.upload.reject-suffix",
 "type": "java.lang.String",
 "defaultValue": "exe,jar",
 "description": "The file suffix is not allowed.",
 "sourceType": "com.lw.metadata.config.FileUploadConfig"
 },
 {
 "name": "map.test.data",
 "type": "java.util.Map",
 "description": "Tips for testing Map type data.",
 "sourceType": "com.lw.metadata.config.MapTestConfig"
 }
 ],
 "hints": [
 {
 "name": "map.test.data.keys",
 "values": [
 {
  "value": "name",
  "description": "The name of the person."
 },
 {
  "value": "sex",
  "description": "The sex of the person."
 }
 ]
 }
 ]
}

maven compile 之后,生成的 additional-spring-configuration-metadata.json 與源碼中的一樣,生成的 spring-configuration-metadata.json 如下:

{
 "groups": [
 {
 "name": "file.upload",
 "type": "com.lw.metadata.config.FileUploadConfig",
 "sourceType": "com.lw.metadata.config.FileUploadConfig"
 },
 {
 "name": "map.test",
 "type": "com.lw.metadata.config.MapTestConfig",
 "sourceType": "com.lw.metadata.config.MapTestConfig"
 }
 ],
 "properties": [
 {
 "name": "file.upload.max-size",
 "type": "java.lang.String",
 "description": "Maximum number of bytes per file",
 "sourceType": "com.lw.metadata.config.FileUploadConfig",
 "defaultValue": "1024M"
 },
 {
 "name": "file.upload.reject-suffix",
 "type": "java.lang.String",
 "description": "The file suffix is not allowed.",
 "sourceType": "com.lw.metadata.config.FileUploadConfig",
 "defaultValue": "exe,jar"
 },
 {
 "name": "map.test.data",
 "type": "java.util.Map<java.lang.String,java.lang.Object>",
 "description": "Tips for testing Map type data.",
 "sourceType": "com.lw.metadata.config.MapTestConfig"
 }
 ],
 "hints": [
 {
 "name": "map.test.data.keys",
 "values": [
 {
  "value": "name",
  "description": "The name of the person."
 },
 {
  "value": "sex",
  "description": "The sex of the person."
 }
 ]
 }
 ]
}

效果

如何在SpringBoot 中配置提示功能

由此可以看到以下現(xiàn)象:

  • 代碼中的默認(rèn)值會(huì)自動(dòng)生成到提示文件中,如:FileUploadConfig#maxSize

  • 代碼中的注釋會(huì)自動(dòng)生成到提示文件中,如:FileUploadConfig#maxSize

  • additional-spring-configuration-metadata.json 文件中存在的提示會(huì)覆蓋自動(dòng)生成的對(duì)應(yīng)屬性,若自動(dòng)生成的沒有此屬性則自動(dòng)增加。

手動(dòng)寫提示文件

示例

{
 "groups": [
  {
   "name": "server",
   "type": "org.springframework.boot.autoconfigure.web.ServerProperties",
   "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
  },
  {
   "name": "spring.jpa.hibernate",
   "type": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate",
   "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties",
   "sourceMethod": "getHibernate()"
  }
 ],
 "properties": [
  {
   "name": "server.port",
   "type": "java.lang.Integer",
   "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
  },
  {
   "name": "server.address",
   "type": "java.net.InetAddress",
   "sourceType": "org.springframework.boot.autoconfigure.web.ServerProperties"
  },
  {
    "name": "spring.jpa.hibernate.ddl-auto",
    "type": "java.lang.String",
    "description": "DDL mode. This is actually a shortcut for the \"hibernate.hbm2ddl.auto\" property.",
    "sourceType": "org.springframework.boot.autoconfigure.orm.jpa.JpaProperties$Hibernate"
  }
 ],
 "hints": [
  {
   "name": "spring.jpa.hibernate.ddl-auto",
   "values": [
    {
     "value": "none",
     "description": "Disable DDL handling."
    },
    {
     "value": "validate",
     "description": "Validate the schema, make no changes to the database."
    },
    {
     "value": "update",
     "description": "Update the schema if necessary."
    },
    {
     "value": "create",
     "description": "Create the schema and destroy previous data."
    },
    {
     "value": "create-drop",
     "description": "Create and then destroy the schema at the end of the session."
    }
   ]
  }
 ]
}

groups

分組,將配置類分組。

可以按照文件來分組,即:將同一個(gè)配置文件的所有屬性放在同一個(gè)組

屬性類型是否必須用途
nameStringY分組的完整名稱
typeStringN分組數(shù)據(jù)類型的類名(如:使用@ConfigurationProperties注釋的完整類名、使用@Bean注釋的方法返回類型)
descriptionStringN分組的簡(jiǎn)短描述。
sourceTypeStringN提供分組來源的類名。
sourceMethodStringN提供分組的方法,包含括號(hào)和參數(shù)類型。

properties

提示主體,必須

屬性類型是否必須用途
nameStringY屬性的完整名稱。名稱采用小寫句點(diǎn)分隔格式,如:server.address
typeStringN屬性數(shù)據(jù)類型的完整簽名(如:java.lang.String)或完整的泛型類型(如:java.util.Map<java.util.String,acme.Myenum>)。此屬性提示用戶輸入值得類型。原生類型在此處使用其包裝類型(如:boolean使用java.lang.Boolean)。
descriptionStringN分組的簡(jiǎn)短描述。
sourceTypeStringN提供分組來源的類名。
defaultValueObjectN默認(rèn)值。當(dāng)屬性為指定時(shí)使用。
deprecationDeprecationN指定屬性是否已棄用。

deprecation屬性如下:

屬性類型是否必須用途
levelStringN棄用級(jí)別,可以是 warning(默認(rèn)值) 或 error。warning:屬性應(yīng)該仍然可以使用;error:屬性不保證可以使用
reasonStringN屬性棄用的簡(jiǎn)短原因。
replacementStringN替換此棄用屬性的新屬性全名。可為空

 注意:Spring Boot 1.3 版本之前,是使用 boolean 類型的 deprecated。

以下示例來源于官方文檔,展示了如何處理這種場(chǎng)景:

@ConfigurationProperties("app.acme")
public class AcmeProperties {

 private String name;

 public String getName() { ... }

 public void setName(String name) { ... }

 @DeprecatedConfigurationProperty(replacement = "app.acme.name")
 @Deprecated
 public String getTarget() {
  return getName();
 }

 @Deprecated
 public void setTarget(String target) {
  setName(target);
 }
}

一旦 getTarget 和 setTarget 方法從公共 API 中刪除,元數(shù)據(jù)中的自動(dòng)棄用提示也會(huì)消失。 如果要保留提示,則添加具有 error 棄用級(jí)別的手動(dòng)元數(shù)據(jù)可以確保用戶仍然了解該屬性。在提供替代品時(shí),這樣做特別有用。

hints

輔助提示,非必須

屬性類型是否必須用途
nameStringY提示關(guān)聯(lián)的屬性的完整名稱。名稱是小寫句點(diǎn)分隔格式(如:spring.mvc.servlet.path),如果屬性關(guān)聯(lián)map類型(如:system.contexts),提示可以關(guān)聯(lián)map的鍵(system.contexts.keys)或者值(system.contexts.values)。
valuesValueHint[]N有效值集合。(下表詳述)
providersValueProvider[]N提供者集合。(下表詳述)

values 屬性如下:

@ConfigurationProperties("sample")
public class SampleProperties {

 private Map<String,Integer> contexts;
 // getters and setters
}
{"hints": [
 {
  "name": "sample.contexts.keys",
  "values": [
   {
    "value": "sample1"
   },
   {
    "value": "sample2"
   }
  ]
 }
]}

提示是對(duì)Map內(nèi)每一對(duì) key-value 的提示。

.keys 和 .values 前綴必須分別關(guān)聯(lián) Map 的 keys 和 values。

providers 屬性如下:

屬性類型是否必須用途
nameStringN用于為提示所引用的元素提供其他內(nèi)容幫助的 provider 的名稱。
parametersJSON objectNprovider 所支持的任何其他參數(shù)(有關(guān)詳細(xì)信息,請(qǐng)查看 provider 的文檔)。

 ValueProvider

一般用不到,建議跳過

下表總結(jié)了支持的 providers 列表:

屬性描述
any允許提供任何附加值。
class-reference自動(dòng)完成項(xiàng)目中可用的類。通常由目標(biāo)參數(shù)指定的基類約束。
handle-as處理屬性,就像它是由必須的 target 參數(shù)定義的類型定義的一樣。
logger-name自動(dòng)完成有效的記錄器名稱和記錄器組。通常,當(dāng)前項(xiàng)目中可用的包和類名可以自動(dòng)完成,也可以定義組。
spring-bean-reference自動(dòng)完成當(dāng)前項(xiàng)目中可用的bean名稱。通常由 target 參數(shù)指定的基類約束。
spring-profile-name自動(dòng)完成項(xiàng)目中可用的 spring 配置文件名稱。

 any

符合屬性類型的所有值。

{"hints": [
 {
  "name": "system.state",
  "values": [
   {
    "value": "on"
   },
   {
    "value": "off"
   }
  ],
  "providers": [
   {
    "name": "any"
   }
  ]
 }
]}
class-reference

提供以下參數(shù):

 {"hints": [
 {
  "name": "server.servlet.jsp.class-name",
  "providers": [
   {
    "name": "class-reference",
    "parameters": {
     "target": "javax.servlet.http.HttpServlet"
    }
   }
  ]
 }
]}

handle-as

允許您將屬性的類型替換為更高級(jí)的類型。

這通常在屬性具有 java.lang.String 類型時(shí)發(fā)生,因?yàn)槟幌M渲妙愐蕾囉诓辉陬惵窂缴系念悺?/p>

參數(shù)類型默認(rèn)值
描述
targetString(Class)Y為屬性考慮的類型的完全限定名。

可用的值如下:

任何 java.lang.Enum: 列出屬性的可能值。

java.nio.charset.Charset: 支持自動(dòng)完成字符集/編碼值(如 utf-8)

java.util.Locale:自動(dòng)完成區(qū)域設(shè)置(如:en_US)

org.springframework.util.MimeType:支持自動(dòng)完成 content-type 值(如:text/plain)

org.springframework.core.io.Resource: 支持自動(dòng)完成spring的資源抽象以引用文件系統(tǒng)或類路徑上的文件 (如:

classpath:/sample.properties)

注意:如果要提供多個(gè)值,用 Collection 或 數(shù)組類型

{"hints": [
 {
  "name": "spring.liquibase.change-log",
  "providers": [
   {
    "name": "handle-as",
    "parameters": {
     "target": "org.springframework.core.io.Resource"
    }
   }
  ]
 }
]}

logger-name

logger-name provider 自動(dòng)完成有效的記錄器名稱和記錄器組。 通常,當(dāng)前項(xiàng)目中可用的包和類名可以自動(dòng)完成。 如果組已啟用(默認(rèn)),并且配置中標(biāo)識(shí)了自定義記錄器組,則應(yīng)提供該組的自動(dòng)完成。

支持以下參數(shù):

參數(shù)類型默認(rèn)值描述
groupbooleantrue指定是否應(yīng)考慮已知組。

由于記錄器名稱可以是任意名稱,此 provider 應(yīng)允許任何值,但可以突出顯示項(xiàng)目的類路徑中不可用的有效包和類名。

以下是 logging.level 屬性。keys 是 logger 名,values 關(guān)聯(lián)標(biāo)準(zhǔn)的 log levels 或 自定義的 level,

{"hints": [
 {
  "name": "logging.level.keys",
  "values": [
   {
    "value": "root",
    "description": "Root logger used to assign the default logging level."
   },
   {
    "value": "sql",
    "description": "SQL logging group including Hibernate SQL logger."
   },
   {
    "value": "web",
    "description": "Web logging group including codecs."
   }
  ],
  "providers": [
   {
    "name": "logger-name"
   }
  ]
 },
 {
  "name": "logging.level.values",
  "values": [
   {
    "value": "trace"
   },
   {
    "value": "debug"
   },
   {
    "value": "info"
   },
   {
    "value": "warn"
   },
   {
    "value": "error"
   },
   {
    "value": "fatal"
   },
   {
    "value": "off"
   }

  ],
  "providers": [
   {
    "name": "any"
   }
  ]
 }
]}

spring-bean-reference

此 provider 自動(dòng)完成在當(dāng)前項(xiàng)目的配置中定義的bean。 支持以下參數(shù):

參數(shù)類型默認(rèn)值描述
targetString(Class)應(yīng)該分配給候選對(duì)象的bean類的完全限定名。通常用于篩選非候選bean。

以下示例表示:spring.jmx.server 屬性定義了使用 MBeanServer

{"hints": [
 {
  "name": "spring.jmx.server",
  "providers": [
   {
    "name": "spring-bean-reference",
    "parameters": {
     "target": "javax.management.MBeanServer"
    }
   }
  ]
 }
]}

spring-profile-name

此 provider 自動(dòng)完成在當(dāng)前項(xiàng)目的配置中定義的spring配置文件。

以下示例表示:spring.profiles.active屬性可啟用的配置文件名稱。

{"hints": [
 {
  "name": "spring.profiles.active",
  "providers": [
   {
    "name": "spring-profile-name"
   }
  ]
 }
]}

可重復(fù)的元數(shù)據(jù)項(xiàng)

具有相同“property”和“group”名稱的對(duì)象可以在元數(shù)據(jù)文件中多次出現(xiàn)。 例如,可以將兩個(gè)單獨(dú)的類綁定到同一前綴,每個(gè)類都有可能重疊的屬性名。 雖然多次出現(xiàn)在元數(shù)據(jù)中的相同名稱不應(yīng)是常見的,但元數(shù)據(jù)的使用者應(yīng)注意確保他們支持該名稱。

自動(dòng)生成提示文件

通過使用 spring-boot-configuration-processor jar,您可以從用 @ConfigurationProperties 注釋的類中輕松生成自己的配置元數(shù)據(jù)文件。 jar包含一個(gè)java注釋處理器,在編譯項(xiàng)目時(shí)調(diào)用它。 用此處理器,需要引入 spring-boot-configuration-processor 依賴。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-configuration-processor</artifactId>
 <optional>true</optional>
</dependency>

處理器獲取用@configurationproperties注釋的類和方法。 配置類中字段值的 javadoc 用于填充 description 屬性。

注意:僅僅只應(yīng)將簡(jiǎn)單文本與@configurationproperties字段javadoc一起使用,因?yàn)樵趯⑺鼈兲砑拥絡(luò)son之前不會(huì)對(duì)它們進(jìn)行處理。

如果類有一個(gè)“至少一個(gè)參數(shù)”的構(gòu)造函數(shù),則為每個(gè)構(gòu)造函數(shù)參數(shù)創(chuàng)建一個(gè)屬性。 否則,通過標(biāo)準(zhǔn)getter和setter來發(fā)現(xiàn)屬性,這些getter和setter對(duì)集合類型進(jìn)行了特殊處理(即使只有g(shù)etter存在,也會(huì)檢測(cè)到)。

注解處理器還支持使用@data、@getter和@setter 的 lombok 注解。

注解處理器無法自動(dòng)檢測(cè) Enum 和 Collections 的默認(rèn)值。在集合或枚舉屬性具有非空默認(rèn)值的情況下,應(yīng)提供手動(dòng)元數(shù)據(jù)。

@ConfigurationProperties(prefix="acme.messaging")
public class MessagingProperties {

 private List<String> addresses = new ArrayList<>(Arrays.asList("a", "b")) ;

 private ContainerType = ContainerType.SIMPLE;

 // ... getter and setters

 public enum ContainerType {
  SIMPLE,
  DIRECT
 }
}

為了提示上述屬性的默認(rèn)值,應(yīng)該手動(dòng)添加如下元數(shù)據(jù):

{"properties": [
 {
  "name": "acme.messaging.addresses",
  "defaultValue": ["a", "b"]
 },
 {
  "name": "acme.messaging.container-type",
  "defaultValue": "simple"
 }
]}

注意: 如果在項(xiàng)目中使用 AspectJ,則需要確保注解處理器只運(yùn)行一次。 使用 Maven 時(shí), 可以顯式地配置 maven-apt-plugin插件,并僅在那里向注解處理器添加依賴項(xiàng)。 還可以讓 AspectJ 插件運(yùn)行于所有的處理且在 maven-compiler-plugin 的 configuration 中禁用注解處理,如下:

<plugin>
 <groupId>org.apache.maven.plugins</groupId>
 <artifactId>maven-compiler-plugin</artifactId>
 <configuration>
  <proc>none</proc>
 </configuration>
</plugin>

綁定屬性

注解處理器自動(dòng)將內(nèi)部類視為嵌套屬性。

@ConfigurationProperties(prefix="server")
public class ServerProperties {
 private String name;
 private Host host;
 // ... getter and setters
 public static class Host {
  private String ip;
  private int port;
  // ... getter and setters
 }
}

上述示例生成 server.name、server.host.ip 和 server.host.port 屬性的元數(shù)據(jù)信息。 可以在字段上使用@NestedconfigurationProperty 注解來指示應(yīng)將常規(guī)(非內(nèi)部)類視為嵌套類。

注意: 這對(duì)集合和映射沒有影響,因?yàn)檫@些類型是自動(dòng)標(biāo)識(shí)的,并且為每個(gè)類型生成一個(gè)元數(shù)據(jù)屬性。

添加額外的元數(shù)據(jù)

Spring Boot 的配置文件處理非常靈活,通常情況下,可能存在不綁定到 @ConfigurationProperties bean的屬性。 您還可能需要調(diào)整現(xiàn)有key的某些屬性,為了支持這種情況并讓您提供自定義的“提示”,注解處理器會(huì)自動(dòng)將 META-INF/additional-spring-configuration-metadata.json 中的提示項(xiàng)合并到主要元數(shù)據(jù)文件(spring-configuration-metadata.json)中。

如果引用已自動(dòng)檢測(cè)到的屬性,則將覆蓋描述、默認(rèn)值和棄用信息(如果指定)。 如果當(dāng)前模塊中沒有標(biāo)識(shí)手動(dòng)屬性中的聲明,則將其作為新屬性添加。

additional-spring-configuration-metadata.json 文件的格式與 spring-configuration-metadata.json 文件一樣。 附加屬性文件是可選的。如果沒有任何其他屬性,就不要添加文件。

springboot是什么

springboot一種全新的編程規(guī)范,其設(shè)計(jì)目的是用來簡(jiǎn)化新Spring應(yīng)用的初始搭建以及開發(fā)過程,SpringBoot也是一個(gè)服務(wù)于框架的框架,服務(wù)范圍是簡(jiǎn)化配置文件。

上述內(nèi)容就是如何在SpringBoot 中配置提示功能,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:如何在SpringBoot中配置提示功能
本文URL:http://www.js-pz168.com/article44/jipoee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google響應(yīng)式網(wǎng)站云服務(wù)器軟件開發(fā)App開發(fā)面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
午夜影院在线观看欧美| 91视频国产资源| 国产精品一区二区欧美黑人喷潮水| 欧美日韩一区二区视频在线| 欧美亚洲高清一区| 国产欧美一区二区精品秋霞影院| 亚洲高清免费观看| 成人av资源网站| 色婷婷精品国产一区二区三区| 欧美一区二区三区色| 亚洲精品中文在线观看| 国产综合成人久久大片91| 国产原创精品| 欧美绝品在线观看成人午夜影视| 国产精品国产自产拍在线| 久久精品国内一区二区三区| 成人av免费看| 欧美性三三影院| 欧美国产日本视频| 男人操女人的视频在线观看欧美| 999视频在线免费观看| 色噜噜偷拍精品综合在线| 国产欧美日韩精品一区| 久久国产精品区| 精品在线观看一区二区| 91麻豆精品91久久久久久清纯| 亚洲伦在线观看| 白白色亚洲国产精品| 亚洲自拍偷拍二区| 国产三级精品三级| 久久9热精品视频| 久久国产精品高清| 欧美大胆一级视频| 日韩精品免费视频人成| 国产91aaa| 91精品国模一区二区三区| 亚洲午夜久久久久久久久久久 | 亚洲摸摸操操av| 国产传媒一区在线| 亚洲精品不卡| 日本一区二区视频在线观看| 国内精品嫩模私拍在线| 日韩av一区二区三区美女毛片| 2020国产成人综合网| 久久国产剧场电影| 日韩av不卡播放| 日本一区二区不卡视频| 国产一区二区91| 亚洲精品中文字幕在线| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产区日韩欧美| 日韩精品专区在线影院观看| 琪琪一区二区三区| 欧美综合激情| 国产三级精品三级在线专区| 国产经典欧美精品| 日本韩国欧美国产| 一区二区三区久久久| 国产成人成网站在线播放青青| 91精品国产一区二区| 青草av.久久免费一区| 欧美少妇一区| 国产精品久久久久久久久久久免费看 | 欧美精品一区二区精品网| 久久精品国产久精国产| 污视频在线免费观看一区二区三区 | 中文久久乱码一区二区| 处破女av一区二区| 欧美日韩美少妇| 日本伊人精品一区二区三区观看方式| 欧美一区2区视频在线观看| 性久久久久久久| 久久天天狠狠| 中文字幕精品在线不卡| thepron国产精品| 在线播放视频一区| 麻豆久久一区二区| 中文字幕在线亚洲三区| 亚洲精品成人天堂一二三| 国产乱码精品一区二区三区中文 | 国产超碰在线一区| 欧美色综合网站| 日本va欧美va瓶| 亚洲一区二三| 亚洲图片有声小说| 欧美一级爱爱| 亚洲素人一区二区| 国产日韩欧美二区| 亚洲国产成人私人影院tom| 91婷婷韩国欧美一区二区| 日韩欧美一二三区| 国产成人av资源| 88在线观看91蜜桃国自产| 麻豆91在线观看| 色婷婷精品大视频在线蜜桃视频| 亚洲午夜视频在线观看| 日本精品免费| 亚洲最色的网站| 日本免费高清一区| 曰韩精品一区二区| 日本一区美女| 亚洲国产日韩a在线播放| 欧美一区1区三区3区公司| 亚洲柠檬福利资源导航| 久久影院理伦片| 亚洲色图另类专区| 免费成人深夜夜行视频| 一区二区在线观看视频| 日本一区免费| 亚洲成av人片观看| 在线观看国产一区| 热久久免费视频| 欧美揉bbbbb揉bbbbb| 国产毛片精品视频| 日韩午夜精品视频| av在线不卡免费看| 欧美—级在线免费片| 国产无套精品一区二区| 亚洲视频免费看| 日韩精彩视频| 日韩二区三区四区| 欧美日韩一区二区电影| 国产美女主播视频一区| 日韩一二三四区| 91农村精品一区二区在线| 欧美经典一区二区| 开心色怡人综合网站| 亚洲国产美女搞黄色| 色婷婷av一区二区三区大白胸| 九色porny丨国产精品| 欧美一区二区三区视频在线| 99精品视频免费在线观看| 中文字幕免费不卡| 欧美日韩在线高清| 日韩精品成人一区二区三区| 欧美色中文字幕| 成人性视频免费网站| 国产欧美综合在线观看第十页| 久久久一本精品99久久精品66| 一区二区理论电影在线观看| 中国人体摄影一区二区三区| 国产一区二区视频在线播放| 精品国产1区2区3区| 国产一区二区三区无遮挡| 亚洲一区中文在线| 欧美午夜影院一区| 国产**成人网毛片九色 | 日韩精品亚洲专区| 91精品福利在线一区二区三区| 91蜜桃网址入口| 亚洲欧美日韩系列| 色婷婷av一区二区三区gif | 精品国产乱码久久久久久88av| 亚洲一二三区在线观看| 欧美日韩不卡在线| 91亚色免费| 亚洲一区二区三区自拍| 欧美日韩视频在线观看一区二区三区| 成人av资源在线观看| 亚洲欧美在线视频观看| 中文字幕一区二区三区四区五区六区| 国产露脸91国语对白| 国产欧美一区二区精品仙草咪| 日韩亚洲视频| 国产成人av电影在线| 国产精品久久久久久久久免费樱桃| 亚洲欧洲久久| 国产成人a级片| 亚洲日本乱码在线观看| 精品视频一区二区三区免费| 91精品久久久久久蜜桃| 亚洲成人激情av| 日韩欧美三级在线| 明星裸体视频一区二区| 国内精品嫩模私拍在线| 国产精品网站在线观看| 色琪琪一区二区三区亚洲区| 99久久99久久久精品齐齐| 亚洲午夜影视影院在线观看| 欧美一区二区福利视频| 你懂的网址一区二区三区| 国产在线精品一区二区三区不卡 | 91精品国产综合久久久久久| 国产精品久久久久久久久久久久冷 | 亚洲欧美一区二区三区孕妇| 精品视频资源站| 国产精选在线观看91| 久草精品在线观看| 国产精品国产三级国产普通话99| 欧美伊人久久大香线蕉综合69| 国产成人看片| 久99久精品视频免费观看| 国产精品国产自产拍在线| 欧美日韩美女一区二区| 九九九九九精品| 国产成人午夜高潮毛片| 亚洲综合免费观看高清完整版 | 欧美日韩国产免费一区二区三区| 国产精品一线二线三线| 一区二区三区免费看视频|