精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产成人精品一区二区三区在线| 蜜桃av鲁一鲁一鲁一鲁俄罗斯的 | 久久免费99精品久久久久久| 日本一级一片免费视频| 欧美综合在线视频观看| 欧美一区二区三区四区高清 | 调教驯服丰满美艳麻麻在线视频| 日本免费在线一区| 亚洲va国产va欧美va观看| 欧美成ee人免费视频| 91亚洲国产成人久久精品麻豆| 亚洲成人在线| 色阁综合伊人av| 波多野结衣加勒比| av亚洲一区| 污片在线观看一区二区| 视频一区不卡| 午夜激情在线视频| 国产综合色在线| 日本最新高清不卡中文字幕| 亚洲精品卡一卡二| 国产精品免费99久久久| 日韩欧美区一区二| 中文字幕av不卡在线| 日本不卡免费高清视频在线| 亚洲视频一区在线观看| 日本一区二区精品视频| www国产在线| 麻豆国产精品777777在线| 午夜精品一区二区三区在线| 久久高清内射无套| 成人在线免费视频观看| 亚洲欧美在线磁力| 国内精品免费视频| 欧美一区在线观看视频| 欧美放荡的少妇| 午夜免费精品视频| 三级在线看中文字幕完整版| 一区二区三区中文字幕| 精品国产无码在线| 毛片在线看网站| 中文字幕av一区 二区| 日本精品一区二区三区高清 久久| 刘亦菲久久免费一区二区| 国产精品1024| 亚洲www在线| 国产成人精品无码高潮| 精东粉嫩av免费一区二区三区| 国产成人综合久久| 精品不卡一区二区| 奶水喷射视频一区| 欧美中文在线观看| 黑人精品无码一区二区三区AV| 夜夜爽av福利精品导航| 性欧美视频videos6一9| 日韩欧美高清在线观看| 好看的亚洲午夜视频在线| 欧美国产视频一区二区| 日韩女优一区二区| 欧美国产精品| 久久久久国产精品www| 黄色小说在线观看视频| 夜夜爽av福利精品导航| 日韩av理论片| 五月天中文字幕| 精品一区二区三区免费播放| 91精品中国老女人| 亚洲精品成人区在线观看| 国产福利视频一区二区三区| 国产一区免费视频| 免费av在线电影| 国产欧美日韩另类一区| 中文字幕在线亚洲三区| 1769免费视频在线观看| 亚洲成av人片一区二区梦乃| av天堂永久资源网| 日韩国产一二三区| 精品va天堂亚洲国产| 亚洲蜜桃精久久久久久久久久久久| 日本成人中文| 国产一区二区三区在线免费观看 | 91精品国产综合久久香蕉的用户体验| 97超碰中文字幕| 成人免费va视频| 秋霞在线观看一区二区三区| 8888四色奇米在线观看| 一区二区成人在线| 男女午夜激情视频| 成人激情久久| 日韩大陆毛片av| 日韩亚洲欧美中文字幕| 亚洲激情在线| 国产精品日韩精品| 好吊色视频一区二区| 久久久久久一二三区| 综合国产精品久久久| 岛国av免费在线观看| 欧美影视一区在线| 男人女人拔萝卜视频| 免费观看久久av| 色综合久久中文字幕综合网小说| 日韩精品手机在线| 激情综合五月天| 久久免费一区| 欧美人与动牲性行为| 在线免费一区三区| 亚洲v在线观看| 日韩综合一区| 欧美最近摘花xxxx摘花| av网站在线观看免费| 国产性天天综合网| 你真棒插曲来救救我在线观看| 成人免费一区| 国产午夜精品久久久| 青青草免费av| 美腿丝袜在线亚洲一区| 九色一区二区| 肉肉视频在线观看| 欧美日韩精品欧美日韩精品 | 中文字幕第一区| 亚洲中文字幕无码专区| 视频一区中文字幕精品| 中文字幕亚洲在线| 91丝袜一区二区三区| av中文字幕一区| 玖玖精品在线视频| 亚洲成人高清| 中文字幕欧美亚洲| 一级一片免费看| 99re66热这里只有精品3直播| 欧美另类videosbestsex日本| 国产第一精品| 在线视频欧美日韩精品| 人人妻人人爽人人澡人人精品| av欧美精品.com| 国产一二三在线视频| 日韩成人在线观看视频| 久久精品国产欧美亚洲人人爽| 中文字幕久久久久| 国产午夜精品久久久久久久| 女人扒开屁股爽桶30分钟| 久久久久久毛片免费看 | 成人福利视频在线看| av中文字幕av| 亚洲一区二区三区在线免费| 久久国产加勒比精品无码| 97久久人国产精品婷婷| 亚洲免费av在线| 久久久久久国产精品日本| 欧美~级网站不卡| 成人片在线免费看| 国内高清免费在线视频| 亚洲国产欧美一区二区丝袜黑人| 国产精品1000| 91捆绑美女网站| 欧美日韩中文在线视频| 伊人精品一区| 国产精品久久久亚洲| 91精彩视频在线播放| 欧美久久久久久久久| 国产免费美女视频| 国产成人综合在线| 亚洲人成无码网站久久99热国产| 少妇高潮一区二区三区| 日韩女优在线播放| 日本www在线观看视频| 欧美一区二区三区成人| 久久99久久久| 久久久久国产精品麻豆ai换脸| 五月婷婷狠狠操| 亚洲精品成人| 精品国产福利| 另类一区二区| 久久久久久免费精品| 欧美老女人性开放| 制服.丝袜.亚洲.中文.综合| 久久久久香蕉视频| 久久先锋影音av鲁色资源网| 亚洲欧美日韩一级| 一本一道久久a久久精品蜜桃| 国产一区精品在线| 国产精品第一国产精品| 欧美国产精品人人做人人爱| 特黄视频在线观看| 欧美三级日韩三级| 精品少妇久久久| 欧美国产综合一区二区| 免费国偷自产拍精品视频| 9久re热视频在线精品| 亚洲国产综合自拍| 果冻天美麻豆一区二区国产| 777777777亚洲妇女| 三区四区在线视频| 精品国产3级a| 亚洲视频中文字幕在线观看| 亚洲图片欧美综合| 又色又爽的视频| 不卡免费追剧大全电视剧网站| 天天爽天天爽夜夜爽| 一区在线观看| 亚欧精品在线| 清纯唯美亚洲经典中文字幕| 国产美女精品视频免费观看| av美女在线观看| 久久精品人人爽| 国产在线资源| 亚洲福利影片在线| 99久久亚洲精品日本无码| 色噜噜夜夜夜综合网| 久久免费黄色网址| 国产精品福利一区二区三区| 国产精品无码网站| 国产成人av在线影院| 永久免费的av网站| 另类亚洲自拍| 久久精品视频16| 欧美极品一区二区三区| 亚洲va韩国va欧美va精四季| 欧美自拍一区| 国产精品久久国产三级国电话系列 | 亚洲欧美制服丝袜| 高h震动喷水双性1v1| 777午夜精品免费视频| www.久久久久久久| 精品久久久国产| 91久久国产视频| 亚洲一本大道在线| 69av视频在线| 亚洲蜜臀av乱码久久精品| 欧美 日韩 成人| 国产亚洲成av人在线观看导航 | 国a精品视频大全| 操你啦视频在线| 久久艳片www.17c.com| 在线免费观看黄色av| 亚洲午夜av久久乱码| 亚洲欧美日韩精品永久在线| 亚洲国产三级网| 乱色精品无码一区二区国产盗| 日韩一级大片在线| 99久久精品国产一区二区成人| 欧美日韩激情一区二区三区| 久久这里只有精品9| 在线观看亚洲精品| 中国黄色一级视频| 欧美中文字幕一区二区三区| 懂色av蜜臀av粉嫩av喷吹| 在线亚洲欧美专区二区| 波多野结衣爱爱| 欧美色精品在线视频| 亚洲精品无码久久久久| 欧美日韩国产综合草草| 国产精品爽爽久久| 欧美一级搡bbbb搡bbbb| 亚洲AV无码乱码国产精品牛牛| 欧美不卡一区二区| 无码国产色欲xxxx视频| 日韩电影第一页| 黄色av网站在线免费观看| 亚洲男人天堂视频| se在线电影| 欧美日韩国产成人高清视频| 爱看av在线入口| 欧美最猛黑人xxxx黑人猛叫黄| 亚洲不卡系列| 亚洲free性xxxx护士白浆| 99精品在免费线中文字幕网站一区 | 欧美人与动xxxxz0oz| 欧美一区二区视频在线| 日韩一级毛片| 国产av熟女一区二区三区| 国产视频一区在线观看一区免费| 国产精品第12页| 久久99精品久久久| 日本一级大毛片a一| 91亚洲国产成人精品一区二三| 一区二区三区伦理片| 国产精品大尺度| 国产性生活网站| 日本黄色一区二区| 国产高清视频免费观看| 亚洲精品久久久久中文字幕二区| 成人在线免费观看| 欧美另类极品videosbest最新版本| 久草免费在线色站| 国产精品久久999| 8848成人影院| 日本一区二区三区四区高清视频 | 欧美激情视频网站| 免费福利视频一区二区三区| 亚洲精品免费网站| 国产精品中文字幕亚洲欧美| 国产精品一二三在线观看| 久久国产直播| 日本精品一二三| 国产精品久久久久久久久搜平片 | av资源中文在线| 国产欧美日韩精品专区| 加勒比久久高清| 精品一区二区成人免费视频| 亚洲永久在线| 波多野结衣三级视频| 欧美韩国日本一区| youjizz在线视频| 日韩欧美一级在线播放| gogogo高清在线观看免费完整版| 久久久久久久久久久人体| 精品福利在线| 欧美一区二区三区在线播放| 一区在线免费| 日韩高清在线一区二区| 国产日产精品一区| 激情五月色婷婷| 日韩欧美视频在线| 在线日本中文字幕| 国产精品成人av在线| 欧美freesex8一10精品| 第九区2中文字幕| 麻豆91在线播放| 波多野结衣av在线观看| 激情成人中文字幕| 人妻丰满熟妇av无码区hd| 久久天天躁狠狠躁老女人| 成人在线免费| 特级西西444www大精品视频| 亚洲在线日韩| 捆绑裸体绳奴bdsm亚洲| 亚洲午夜在线电影| 精品国产va久久久久久久| 久久亚洲国产精品成人av秋霞| jizz久久久久久| 日韩中文字幕一区| 狂野欧美性猛交xxxx巴西| free性中国hd国语露脸| 亚洲图片欧美色图| 亚洲老妇色熟女老太| 欧美巨大黑人极品精男| 国产精品igao视频网网址不卡日韩 | 在线成人免费av| 亚洲欧洲中文日韩久久av乱码| 91国内精品视频| 久久人人爽人人爽爽久久| 国产高清日韩| 日韩一级片一区二区| 国产成人日日夜夜| 国产在线视频99| 日韩第一页在线| 欧亚一区二区| 亚洲精品日韩在线观看| 久久 天天综合| 欧美人妻一区二区| 精品国产精品一区二区夜夜嗨| 国产丝袜在线播放| 欧美lavv| 久久精品国产免费看久久精品| 99成人在线观看| 日韩网站在线看片你懂的| 免费影视亚洲| 老牛影视免费一区二区| 免费成人在线影院| 国产美女福利视频| 精品国产乱码91久久久久久网站| 国产在线88av| 视频三区二区一区| 国产伦精品一区二区三区免费迷| 久久激情免费视频| 亚洲另类欧美自拍| 久久久久久久性潮| 久久www视频| 91亚洲精品久久久蜜桃| 在线观看免费高清视频| 九九精品在线播放| 偷拍一区二区| 粉色视频免费看| 午夜私人影院久久久久| 国产在线高清| 超碰97国产在线| 日本免费新一区视频| 九九热最新地址| 精品免费日韩av| 四虎4545www国产精品| 国产女人18毛片| 久久久久久麻豆| 国产www免费观看| 日本最新高清不卡中文字幕| 一级欧洲+日本+国产| 风间由美一二三区av片| 91麻豆精品国产91久久久使用方法| 97天天综合网| 尤物一区二区三区| 99免费精品在线| 国产免费一区二区三区最新不卡| 97av在线视频免费播放| 97精品视频在线看| 国产一级二级在线观看| 欧美一区二区人人喊爽| 日韩三区在线| 国精产品一区一区三区视频| 国产精品盗摄一区二区三区| 视频一区二区三区在线看免费看|