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

SpringBoot 內置工具類, 這也太好用了!

開發 開發工具
通過本文的介紹,相信你已經對 SpringBoot 內置工具類有了更深入的了解。這些工具類不僅能提高開發效率,還能讓代碼更加優雅、健壯。

兄弟們,今天咱們要聊一個能讓你代碼量直接砍半的神器 ——SpringBoot 內置工具類!

你有沒有過這樣的經歷?寫代碼時突然遇到一個常見需求,比如處理字符串、操作集合、性能監控,然后本能地打開搜索引擎,開始瘋狂復制粘貼自己寫過的工具類?結果發現要么代碼冗余,要么有 bug,最后還得花時間調試。

但自從用了 SpringBoot,我發現這些需求早就被安排得明明白白!SpringBoot 就像一個瑞士軍刀,內置了各種開箱即用的工具類,從字符串處理到資源加載,從類型轉換到性能監控,幾乎涵蓋了日常開發的方方面面。

更絕的是,這些工具類不僅功能強大,還特別人性化。比如 StringUtils 類,判斷字符串是否為空的方法比女朋友的心思還細膩;CollectionUtils 類,處理集合就像在玩俄羅斯方塊,各種操作行云流水;StopWatch 類,性能監控比游戲里的計時器還直觀。

接下來,咱們就來逐一揭開這些工具類的神秘面紗,看看它們是如何讓你的代碼變得更優雅、更高效的。

一、字符串處理:StringUtils 的魔法

在 Java 開發中,字符串處理是最常見的操作之一。比如用戶輸入的用戶名是否為空,郵箱格式是否正確,日志信息的拼接等等。以前處理這些問題,我們可能需要自己寫一堆 if-else 判斷,或者依賴 Apache Commons Lang 等第三方庫。但現在,SpringBoot 內置的 StringUtils 類就能輕松搞定。

1.1 字符串判空:比女朋友的心思還細膩

字符串判空是最常見的操作之一,但不同的場景可能需要不同的判斷方式。比如,有的需求只需要判斷字符串是否為 null,有的則需要判斷是否為空字符串,還有的需要排除空格后的判斷。

StringUtils 類提供了多個方法來滿足這些需求:

  • isEmpty(String str):判斷字符串是否為 null 或空字符串("")。
  • isNotEmpty(String str):與isEmpty相反,判斷字符串不為 null 且不為空。
  • hasLength(String str):判斷字符串是否有長度(即不為 null 且長度大于 0)。
  • hasText(String str):判斷字符串是否有實際內容,即不為 null,長度大于 0,且至少包含一個非空格字符。

舉個栗子:

String username = "  張三   ";
boolean isEmpty = StringUtils.isEmpty(username); // false,因為字符串不為null且長度大于0
boolean isNotEmpty = StringUtils.isNotEmpty(username); // true
boolean hasLength = StringUtils.hasLength(username); // true
boolean hasText = StringUtils.hasText(username); // true,因為包含非空格字符

如果我們想判斷用戶輸入的用戶名是否有效(非空且不含空格),可以這樣寫:

if (StringUtils.hasText(username.trim())) {
    // 處理有效用戶名
} else {
    // 提示用戶輸入有效用戶名
}

1.2 字符串操作:懶人福音

除了判空,StringUtils 還提供了豐富的字符串操作方法,比如拼接、分割、替換等。

  • join(Collection<?> coll, String separator):將集合中的元素用指定分隔符拼接成字符串。
  • split(String str, String delimiter):按指定分隔符分割字符串,返回數組。
  • replace(String inString, String oldPattern, String newPattern):替換字符串中的指定內容。
  • deleteWhitespace(String str):刪除字符串中的所有空格。

比如,我們有一個用戶列表,需要將他們的名字用逗號拼接成一個字符串:

List<String> names = Arrays.asList("張三", "李四", "王五");
String result = StringUtils.join(names, ","); // 結果:"張三,李四,王五"

再比如,我們想刪除字符串中的所有空格:

String str = "  Hello World!  ";
String trimmedStr = StringUtils.deleteWhitespace(str); // 結果:"HelloWorld!"

1.3 其他實用方法:驚喜不斷

StringUtils 還有一些不太為人知但非常實用的方法,比如:

  • endsWithIgnoreCase(String str, String suffix):忽略大小寫判斷字符串是否以指定后綴結尾。
  • startsWithIgnoreCase(String str, String prefix):忽略大小寫判斷字符串是否以指定前綴開始。
  • abbreviate(String str, int maxLength):截斷字符串到指定長度,超出部分用省略號表示。

舉個栗子:

String url = "https://www.baidu.com";
boolean endsWithCom = StringUtils.endsWithIgnoreCase(url, ".com"); // true
boolean startsWithHttps = StringUtils.startsWithIgnoreCase(url, "https"); // true
String longText = "這是一個很長很長很長的字符串,需要截斷到10個字符";
String abbreviatedText = StringUtils.abbreviate(longText, 10); // 結果:"這是一個..."

二、集合操作:CollectionUtils 的十八般武藝

集合操作也是日常開發中的高頻需求,比如判斷集合是否為空、合并集合、查找元素等。SpringBoot 的 CollectionUtils 類提供了一系列便捷的方法,讓集合操作變得輕松愉快。

2.1 集合判空:簡單粗暴

CollectionUtils 提供了兩個方法來判斷集合是否為空:

  • isEmpty(Collection<?> collection):判斷集合是否為 null 或沒有元素。
  • isNotEmpty(Collection<?> collection):與isEmpty相反,判斷集合不為 null 且至少有一個元素。

比如:

List<String> list = new ArrayList<>();
boolean isEmpty = CollectionUtils.isEmpty(list); // true
boolean isNotEmpty = CollectionUtils.isNotEmpty(list); // false

對于 Map 類型,CollectionUtils 也提供了類似的方法:

  • isEmpty(Map<?,?> map):判斷 Map 是否為 null 或沒有鍵值對。
  • isNotEmpty(Map<?,?> map):與isEmpty相反。

2.2 集合操作:玩出花樣

除了判空,CollectionUtils 還提供了很多實用的操作方法:

  • mergeArrayIntoCollection(Object array, Collection<E> collection):將數組中的元素添加到集合中。
  • findFirstMatch(Collection<?> source, Collection<?> candidates):在 source 集合中查找第一個出現在 candidates 集合中的元素。
  • findValueOfType(Collection<?> collection, Class<T> type):在集合中查找指定類型的元素。

舉個栗子:

String[] array = {"a", "b", "c"};
List<String> list = new ArrayList<>();
CollectionUtils.mergeArrayIntoCollection(array, list); // list變為["a", "b", "c"]
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> candidates = Arrays.asList(3, 6, 9);
Integer firstMatch = CollectionUtils.findFirstMatch(numbers, candidates); // 結果:3
List<Object> objects = Arrays.asList(1, "hello", 3.14);
Integer integerValue = CollectionUtils.findValueOfType(objects, Integer.class); // 結果:1
String stringValue = CollectionUtils.findValueOfType(objects, String.class); // 結果:"hello"

2.3 注意事項:避坑指南

雖然 CollectionUtils 很強大,但也有一些需要注意的地方。比如,hasUniqueObject(Collection<?> collection)方法用于判斷集合中的元素是否唯一,但該方法存在 bug!它使用==運算符來比較元素,而不是equals方法。如果集合中的元素是對象,且沒有重寫equals和hashCode方法,可能會得到錯誤的結果。

因此,在實際開發中,不建議使用hasUniqueObject方法,而是應該自己實現邏輯來判斷集合元素的唯一性。

三、性能監控:StopWatch 的精準計時

在開發過程中,我們經常需要了解某個代碼塊的執行時間,以便進行性能優化。SpringBoot 的 StopWatch 類就是一個簡單而強大的性能監控工具。

3.1 基本用法:簡單幾步

使用 StopWatch 非常簡單,只需以下幾步:

  1. 創建 StopWatch 實例。
  2. 調用start()方法開始計時。
  3. 執行需要計時的代碼塊。
  4. 調用stop()方法停止計時。
  5. 調用getTotalTimeMillis()方法獲取總執行時間(毫秒),或prettyPrint()方法輸出格式化的結果。

舉個栗子:

StopWatch stopWatch = new StopWatch();
stopWatch.start("任務1");
// 執行耗時操作
try {
    Thread.sleep(1000);
} catch (InterruptedException e) {
    e.printStackTrace();
}
stopWatch.stop();
stopWatch.start("任務2");
// 執行另一個耗時操作
try {
    Thread.sleep(500);
} catch (InterruptedException e) {
    e.printStackTrace();
}
stopWatch.stop();
System.out.println(stopWatch.prettyPrint());

輸出結果:

StopWatch '': running time (millis) = 1504
-----------------------------------------
ms % Task name
-----------------------------------------
1001 66% 任務1
503 33% 任務2

3.2 高級用法:靈活控制

StopWatch 還支持更靈活的使用方式,比如:

  • start(String taskName):為指定的任務名稱開始計時。
  • getTotalTimeMillis():獲取所有任務的總執行時間。
  • getTaskCount():獲取已完成的任務數量。
  • getLastTaskInfo():獲取最后一個任務的信息。

例如,我們可以在一個方法中記錄多個任務的執行時間:

public void process() {
    StopWatch stopWatch = new StopWatch("數據處理");
    stopWatch.start("數據讀取");
    // 讀取數據
    stopWatch.stop();

    stopWatch.start("數據轉換");
    // 轉換數據
    stopWatch.stop();

    stopWatch.start("數據寫入");
    // 寫入數據
    stopWatch.stop();

    System.out.println(stopWatch.prettyPrint());
}

3.3 注意事項:適用場景

StopWatch 是一個輕量級的計時工具,適合單進程內的性能監控。如果需要更復雜的性能分析,比如分布式系統的性能追蹤,建議使用專業的性能分析工具,如 JProfiler、VisualVM 等。

四、類型轉換:ConversionService 的智能轉換

在 Web 開發中,經常需要將請求參數轉換為 Java 對象,或者在不同數據類型之間進行轉換。SpringBoot 的 ConversionService 提供了強大的類型轉換功能,支持自動轉換常見的數據類型,如字符串轉整數、日期等。

4.1 默認轉換器:開箱即用

SpringBoot 默認注冊了一系列轉換器,使得控制器方法可以直接接收 Integer、Long、Date 等類型的參數,無需手動轉換。例如:

  • StringToIntegerConverter:將字符串轉換為 Integer。
  • StringToLocalDateConverter:將字符串轉換為 LocalDate(默認格式為 yyyy-MM-dd)。
  • StringToBooleanConverter:將字符串(如 "true"/"false")轉換為 Boolean。

舉個栗子,在控制器中:

@GetMapping("/user")
public User getUser(@RequestParam("age") Integer age, @RequestParam("birthday") LocalDate birthday) {
    // 使用age和birthday參數
}

當請求參數為age=25&birthday=2023-10-01時,ConversionService 會自動將字符串 "25" 轉換為 Integer 類型,將字符串 "2023-10-01" 轉換為 LocalDate 類型。

4.2 自定義轉換器:按需擴展

如果默認轉換器無法滿足需求,我們可以自定義轉換器。例如,需要將字符串 "10s" 轉換為 Duration 類型:

  • 實現Converter接口:
public class StringToDurationConverter implements Converter<String, Duration> {
    @Override
    public Duration convert(String source) {
        return Duration.parse(source);
    }
}
  • 將自定義轉換器注冊到 ConversionService 中:
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToDurationConverter());
    }
}

這樣,在控制器中就可以直接接收 Duration 類型的參數:

@GetMapping("/time")
public void processTime(@RequestParam("duration") Duration duration) {
    // 使用duration參數
}

4.3 注意事項:格式問題

如果日期格式不符合默認規則(如需要 dd/MM/yyyy 格式),可以通過@DateTimeFormat注解指定格式:

@GetMapping("/user")
public User getUser(@RequestParam("birthday") @DateTimeFormat(pattern = "dd/MM/yyyy") LocalDate birthday) {
    // 使用birthday參數
}

五、資源處理:ResourceUtils 和 FileCopyUtils 的高效操作

在開發中,經常需要讀取類路徑下的資源文件,或者進行文件復制、流處理等操作。SpringBoot 的 ResourceUtils 和 FileCopyUtils 類提供了便捷的方法來完成這些任務。

5.1 ResourceUtils:輕松獲取資源

ResourceUtils 可以方便地獲取類路徑、文件系統中的資源。例如:

  • getResource(String location):獲取指定位置的資源。
  • getFile(String location):獲取資源對應的文件。

舉個栗子:

// 獲取類路徑下的config.properties文件
File configFile = ResourceUtils.getFile("classpath:config.properties");

// 獲取文件系統中的文件
File localFile = ResourceUtils.getFile("file:/path/to/local/file.txt");

5.2 FileCopyUtils:高效文件操作

FileCopyUtils 提供了一系列方法來處理文件和流,比如:

  • copyToByteArray(File in):將文件內容讀取到字節數組中。
  • copy(InputStream in, OutputStream out):將輸入流的內容復制到輸出流中。
  • copyToString(Reader in):將輸入流的內容讀取為字符串。

例如,讀取類路徑下的文本文件:

String content = FileCopyUtils.copyToString(
    new InputStreamReader(ResourceUtils.getFile("classpath:data.txt").toURI().toURL().openStream(), StandardCharsets.UTF_8)
);

再比如,復制文件:

File sourceFile = new File("source.txt");
File targetFile = new File("target.txt");
FileCopyUtils.copy(sourceFile, targetFile);

5.3 注意事項:資源釋放

在使用流操作時,一定要注意關閉流,避免資源泄漏。可以使用 Java 7 的 try-with-resources 語句來自動關閉流:

try (InputStream inputStream = ResourceUtils.getFile("classpath:data.txt").toURI().toURL().openStream();
     OutputStream outputStream = new FileOutputStream("output.txt")) {
    FileCopyUtils.copy(inputStream, outputStream);
} catch (IOException e) {
    e.printStackTrace();
}

六、其他實用工具類

除了上述工具類,SpringBoot 還提供了許多其他實用的工具類,比如:

6.1 BeanUtils:對象操作神器

BeanUtils 可以方便地復制 Bean 屬性、實例化對象等。例如:

  • copyProperties(Object source, Object target):將源對象的屬性復制到目標對象。
  • instantiateClass(Class<?> clazz):實例化指定類的對象。

舉個栗子:

User sourceUser = new User("張三", 25);
User targetUser = new User();
BeanUtils.copyProperties(sourceUser, targetUser); // targetUser的name和age被賦值為"張三"和25

Class<User> userClass = User.class;
User user = BeanUtils.instantiateClass(userClass); // 創建User對象

6.2 Assert:斷言工具

Assert 類用于數據合法性檢查,拋出有意義的異常信息。例如:

  • notNull(Object object, String message):檢查對象是否為 null。
  • hasText(String text, String message):檢查字符串是否有實際內容。

舉個栗子:

public void updateUser(User user) {
    Assert.notNull(user, "用戶對象不能為空");
    Assert.hasText(user.getName(), "用戶姓名不能為空");
    Assert.isTrue(user.getAge() > 0, "用戶年齡必須大于0");
    // 更新用戶邏輯
}

6.3 StreamUtils:流處理專家

StreamUtils 提供了一系列處理流的方法,比如:

  • copyToByteArray(InputStream in):將輸入流的內容讀取到字節數組中。
  • copyToString(InputStream in, Charset charset):將輸入流的內容讀取為字符串。
  • copy(InputStream in, OutputStream out):將輸入流的內容復制到輸出流中。

例如,讀取請求體中的 JSON 數據:

@PostMapping("/user")
public void createUser(HttpServletRequest request) throws IOException {
    String json = StreamUtils.copyToString(request.getInputStream(), StandardCharsets.UTF_8);
    // 解析json數據
}

七、總結:工具類的正確打開方式

通過本文的介紹,相信你已經對 SpringBoot 內置工具類有了更深入的了解。這些工具類不僅能提高開發效率,還能讓代碼更加優雅、健壯。

在實際開發中,我們應該:

  1. 優先使用 SpringBoot 內置工具類,避免重復造輪子。
  2. 熟悉常用工具類的方法和適用場景,減少不必要的代碼。
  3. 注意工具類的注意事項,避免常見錯誤。
  4. 結合項目需求,合理擴展和自定義工具類。
責任編輯:武曉燕 來源: 石杉的架構筆記
相關推薦

2025-09-29 09:32:32

2022-05-31 09:42:49

工具編輯器

2024-12-13 16:01:35

2021-04-22 09:56:32

MYSQL開發數據庫

2022-08-01 07:02:06

SpringEasyExcel場景

2024-05-11 09:38:05

React編譯器React 19

2020-11-10 06:11:59

工具軟件代碼

2022-06-28 07:14:23

WizTree磁盤文件清理

2025-07-07 03:00:00

2023-11-09 08:36:51

內置工具類Spring

2020-06-23 15:58:42

心電圖

2020-12-29 10:45:55

開發設計代碼

2024-07-01 08:31:14

Spring工具類代碼

2022-09-06 10:52:04

正則庫HumrePython

2021-08-11 09:33:15

Vue 技巧 開發工具

2022-05-11 14:43:37

WindowsPython服務器

2021-09-10 10:15:24

Python人臉識別AI

2022-07-14 08:36:28

NacosApollo長輪詢

2021-03-18 10:12:54

JavaCompletable字符串

2021-03-02 20:42:20

實戰策略
點贊
收藏

51CTO技術棧公眾號

日韩精品免费| 国模私拍一区二区国模曼安| 美腿丝袜亚洲一区| 久久精品国产电影| 美女又黄又免费的视频| 91黄页在线观看| 国产三级精品在线| 国产精品青草久久久久福利99| xxxx日本少妇| 久久动漫网址| 欧美视频在线一区| 久久手机在线视频| 天天操天天爱天天干| 奇米色一区二区三区四区| 欧美成人午夜剧场免费观看| 免费成人深夜夜行p站| 国产激情欧美| 天天色图综合网| 中文字幕在线观看一区二区三区| 日日夜夜精品免费| 久久精品国产99久久6| 久久久久久久国产精品| 亚洲黄色网址大全| 日韩av资源网| 91麻豆精品国产91久久久久| 国内外成人免费激情视频| 超碰免费在线播放| 国产欧美日韩精品在线| 国产精品美女久久久久av福利| 国产精品51麻豆cm传媒 | 伊人狠狠色丁香综合尤物| 日韩一区二区三区不卡| 久久国产剧场电影| 热99在线视频| 免费在线观看黄网站| 综合久久久久| 日韩在线视频观看| 久久只有这里有精品| jizz性欧美2| 宅男在线国产精品| a在线观看免费视频| 三妻四妾的电影电视剧在线观看 | 视频一区视频二区视频三区视频四区国产| 国精产品乱码一区一区三区四区| 国精品**一区二区三区在线蜜桃 | 国产精品中文| 欧美亚洲综合网| 亚洲精品中文字幕无码蜜桃| 麻豆蜜桃在线观看| 亚洲成人动漫在线观看| www.欧美黄色| 最新国产在线拍揄自揄视频| 亚洲欧美综合在线精品| 日韩精品国内| 天堂а√在线8种子蜜桃视频| 成人网男人的天堂| 91av一区二区三区| 国产黄a三级三级三级| 国产乱子伦一区二区三区国色天香| 国产精品亚洲欧美导航| 中文字幕在线观看精品| 奇米影视在线99精品| 国产精品久久久久久久久免费 | www日韩在线| 久久亚洲国产| 久久视频这里只有精品| 中文字幕五月天| 久久久久久免费视频| 久久资源免费视频| 久草视频在线免费看| 黄色综合网站| 午夜精品一区二区三区av| 日本天堂网在线观看| 一区二区三区精品视频在线观看| 69精品小视频| 精人妻无码一区二区三区| 石原莉奈一区二区三区在线观看| 国产精品99久久久久久久久久久久| 波多野结衣视频网址| 热久久国产精品| 91精品在线影院| www.国产精品视频| 91在线国产观看| 色999五月色| 含羞草www国产在线视频| 夜夜亚洲天天久久| 777久久久精品一区二区三区| 高清电影一区| 日韩一卡二卡三卡四卡| 日本一级片在线播放| 久草成人在线| 欧美精品免费在线| 国产做受高潮漫动| 蜜臀av性久久久久蜜臀aⅴ流畅| 成人字幕网zmw| 日本免费网站在线观看| 中文字幕欧美区| 成年人网站国产| 日本综合视频| 亚洲成人亚洲激情| 五月激情四射婷婷| 亚洲二区精品| 国产精品亚洲视频在线观看| 日本黄色一区二区三区| 国产精品毛片大码女人| 真人抽搐一进一出视频| 69堂精品视频在线播放| 亚洲二区中文字幕| 色撸撸在线视频| 日韩视频免费| 亚洲一区中文字幕在线观看| 巨骚激情综合| 一区二区三区日韩在线观看| 欧美一级黄色影院| 盗摄牛牛av影视一区二区| 这里只有精品在线播放| 国产精品男女视频| 国产成人在线色| 亚洲一区3d动漫同人无遮挡| 日韩伦理在线| 日韩欧美久久一区| 免费黄色国产视频| 噜噜爱69成人精品| 国内精品视频在线播放| av中文字幕在线观看| 在线观看一区二区精品视频| 久草视频福利在线| 91精品国产乱码久久久久久| 清纯唯美亚洲综合| 日韩一级在线播放| 一区二区三区久久久| 欧美一级视频在线| 日韩在线观看| 国产精品久久久久av免费| 香蕉视频免费在线看| 亚洲最大的成人av| 99久久99精品| 亚洲国产一成人久久精品| 国产精品免费久久久| 91av国产在线| 亚洲天堂一区在线观看| 成人性生交大片免费看视频在线| 日韩第一页在线观看| 久久福利在线| 中文字幕精品www乱入免费视频| 天堂中文在线网| av一区二区久久| 亚洲人精品午夜射精日韩| 4438全国亚洲精品观看视频| 麻豆成人在线看| 国产精品综合在线| 亚洲人成7777| 日韩欧美中文视频| 欧美二区不卡| 动漫精品视频| 白浆在线视频| 亚洲精品自拍偷拍| 99超碰在线观看| 国产亚洲欧美日韩俺去了| 国产无套内射久久久国产| 亚洲自拍电影| 国产精品久久久久久av下载红粉 | 精品国产一区二区三区久久久| 正在播放木下凛凛xv99| 国产精品天美传媒沈樵| 久久99999| 91精品国产91久久久久久黑人| 成人av电影天堂| 菠萝菠萝蜜在线视频免费观看| 日韩三级在线观看| 日本一级黄色大片| 久久综合精品国产一区二区三区| 能在线观看的av| 欧美亚洲国产一区| 成人夜晚看av| av手机免费在线观看| 国产视频欧美视频| 亚洲最新av网站| 亚洲精品美国一| 亚洲国产精品无码久久久久高潮| 蜜桃伊人久久| 中文字幕中文字幕在线中一区高清 | 国产成人短视频在线观看| 国产成人精品久久二区二区| av播放在线观看| 精品欧美一区二区久久| 国产91精品一区| 中日韩免费视频中文字幕| 熟妇无码乱子成人精品| 一区二区三区国产盗摄| 亚洲在线欧美| 卡通动漫精品一区二区三区| 国产精品久久久久久久9999| 污污在线观看| 国产午夜精品全部视频在线播放| 国产视频第一页| 欧美性猛交xxxx乱大交极品| av最新在线观看| 99久久er热在这里只有精品15 | 成人一区二区在线观看| 久久久久久久激情| 一区二区三区四区日韩| 欧美日韩日本网| 亚洲精品一二三**| 国产精品高潮呻吟久久av野狼| 污污的视频在线观看| 亚洲性夜色噜噜噜7777| 成人爽a毛片一区二区| 欧美三级电影一区| 欧美三级午夜理伦| 亚洲激情中文1区| 精品手机在线视频| 91老师国产黑色丝袜在线| 激情在线观看视频| 日韩成人一区二区| 免费在线观看亚洲视频| 欧美影院一区| 亚洲日本精品国产第一区| 婷婷成人影院| 国产精品二区在线观看| 成人毛片免费| 国产ts一区二区| 9999精品成人免费毛片在线看| 久久九九国产精品怡红院| 欧美美乳在线| 亚洲精品久久久久久久久久久久久| 国产熟女一区二区丰满| 欧美性淫爽ww久久久久无| av资源免费观看| 亚洲国产成人高清精品| 日日骚一区二区三区| 国产精品久久久久久久久图文区| 精品人伦一区二区三电影| 99久久精品免费看| 女同性αv亚洲女同志| 激情图片小说一区| wwwwwxxxx日本| 久久精品国产免费| www.国产视频.com| 另类欧美日韩国产在线| 美女黄色片视频| 日韩精品成人一区二区三区| 丝袜老师办公室里做好紧好爽| 亚洲国产国产亚洲一二三| 粉嫩av一区二区三区天美传媒 | 国产二级片在线观看| 精品1区2区3区4区| 日b视频免费观看| 一区在线视频| 日本精品久久久久久久久久| 影音先锋一区| 黄色国产一级视频| 久久xxxx| 一区二区xxx| 精品综合久久久久久8888| 手机版av在线| 国产一区 二区 三区一级| 久久综合桃花网| 成人激情午夜影院| aaaaaav| 久久久99久久| 任你操精品视频| 亚洲精选一二三| 国产一级免费观看| 调教+趴+乳夹+国产+精品| 国产成人在线视频观看| 色婷婷精品大视频在线蜜桃视频| 欧美h在线观看| 欧美日韩高清在线| a天堂在线观看视频| 亚洲国产成人精品女人久久久| 天堂av在线资源| 在线电影中文日韩| av在线免费网址| 国内精品一区二区三区四区| 少妇淫片在线影院| 国产精品香蕉av| 豆花视频一区二区| 欧美一区二区福利| 91精品婷婷色在线观看| 超碰成人免费在线| 日韩精彩视频在线观看| 97超碰免费在线观看| 99国产精品99久久久久久| 成年人在线免费看片| 亚洲乱码国产乱码精品精98午夜 | 欧美日韩一区二区三区不卡| 国产免费av电影| 日韩国产精品亚洲а∨天堂免| 国产片在线观看| 欧美二区在线播放| 欧美男体视频| 91视频最新| 精品日韩免费| 国产精品一色哟哟| 青草av.久久免费一区| av免费观看不卡| 中文字幕+乱码+中文字幕一区| 久久国产精品波多野结衣| 色婷婷亚洲精品| 亚洲成人一级片| 中国人与牲禽动交精品| 好吊日av在线| 91深夜福利视频| 免费国产自久久久久三四区久久| 天天操天天干天天玩| 久久综合五月| 又黄又色的网站| 国产精品免费视频一区| 日本三级网站在线观看| 91精品国产综合久久久久久| 黄色网址在线播放| 亚洲18私人小影院| 欧洲大片精品免费永久看nba| 日本一区视频在线观看| 亚洲三级影院| 26uuu国产| 国产精品国产三级国产普通话蜜臀 | 欧美性xxxxxxxx| 日韩精品123| 久久久久久久一| 日韩精品一区国产| 制服诱惑一区| 日产国产高清一区二区三区| 黄色免费看视频| 一区二区三区中文字幕精品精品| 中文字幕在线观看你懂的| 日韩精品在线免费观看视频| 免费污视频在线观看| 91美女福利视频高清| 日韩电影免费网址| 久久九九国产视频| 2020国产精品| 少妇太紧太爽又黄又硬又爽| 亚洲国产黄色片| 爱情岛亚洲播放路线| 国产精华一区| 亚洲天堂男人| 久久久老熟女一区二区三区91| 一区二区三区在线不卡| 国产视频在线观看免费| 久久精品99久久久香蕉| 狠狠久久伊人中文字幕| 五月天亚洲综合情| 蜜臀av性久久久久蜜臀aⅴ流畅| 欧美黄色一级生活片| 色偷偷一区二区三区| 九色国产在线观看| 日韩免费观看av| 精品一级毛片| 日韩一区二区三区不卡视频| 国产精品午夜久久| 在线视频你懂得| 久久成人精品一区二区三区| www一区二区三区| 国产又粗又长又爽视频| 成人精品gif动图一区| 久久露脸国语精品国产91| 日韩精品在线视频观看| 日本电影欧美片| 一本久道久久综合| 国产美女在线观看一区| 久久久久久久9999| 亚洲精品一区二区三区蜜桃下载| 黄色软件视频在线观看| 蜜桃视频在线观看91| 日本一不卡视频| 国产精品 欧美激情| 欧美变态口味重另类| 国产福利片在线观看| 久久艳妇乳肉豪妇荡乳av| 日韩激情在线观看| 免费三级在线观看| 精品国产99国产精品| 欧美大片高清| 中文字幕免费在线不卡| 成人午夜激情视频| 波多野结衣视频网站| 深夜成人在线观看| 伊人精品综合| 国产精品亚洲a| 1000部国产精品成人观看| 韩国中文字幕hd久久精品| 日韩免费观看av| 欧美区亚洲区| 30一40一50老女人毛片| 欧美日韩国产在线播放网站| 国内小视频在线看| 日韩av一级大片| 国产99久久久国产精品潘金网站| 五月婷婷亚洲综合| 日韩中文在线观看| 玖玖玖免费嫩草在线影院一区| 亚洲欧美日韩一级| 亚洲国产精品久久一线不卡| 二区在线视频| 99视频免费观看蜜桃视频| 久久亚洲综合| 精品无码一区二区三区电影桃花| 亚洲欧美综合另类中字|