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

SpringBoot 棄用 spring.factories:技術(shù)革新下的必然選擇

開發(fā) 前端
spring.factories是一個位于META-INF/目錄下的配置文件,它基于Java的SPI(Service Provider Interface)機制的變種實現(xiàn)。這個文件的主要功能是允許開發(fā)者聲明接口的實現(xiàn)類,從而實現(xiàn)SpringBoot的自動裝配和擴展點注冊。

1. 引言

在SpringBoot的演進過程中,3.0版本帶來了一次重大變革——取消了長期以來作為自動配置和擴展機制核心的spring.factories文件。這個改變對于習慣了SpringBoot舊版本開發(fā)的工程師來說,需要了解新的機制和遷移策略。

本文將深入探討這一變更的原因、影響以及替代方案。

2. spring.factories是什么

在討論它的取消之前,我們首先需要理解spring.factories文件在SpringBoot中扮演的角色。

2.1 基本概念

spring.factories是一個位于META-INF/目錄下的配置文件,它基于Java的SPI(Service Provider Interface)機制的變種實現(xiàn)。這個文件的主要功能是允許開發(fā)者聲明接口的實現(xiàn)類,從而實現(xiàn)SpringBoot的自動裝配和擴展點注冊。

2.2 主要用途

在SpringBoot 3.0之前,spring.factories文件有以下幾個主要用途:

圖片圖片

2.3 工作原理

SpringBoot啟動時,會使用SpringFactoriesLoader類掃描類路徑下所有JAR包中的META-INF/spring.factories文件,讀取配置信息并加載對應的類。這種機制使得SpringBoot能夠以"約定優(yōu)于配置"的方式實現(xiàn)自動裝配。

// SpringFactoriesLoader核心代碼示例(SpringBoot 2.x)
public final class SpringFactoriesLoader{
    // ...
    public static <T> List<T> loadFactories(Class<T> factoryType, @Nullable ClassLoader classLoader){
        // ... 
        // 加載META-INF/spring.factories中的配置
        Map<String, List<String>> result = loadSpringFactories(classLoader);
        // ...
    }
    
    private static Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader) {
        // 從類路徑中加載所有META-INF/spring.factories文件
        // ...
    }
    // ...
}

3. 為什么要取消spring.factories

SpringBoot團隊決定取消spring.factories機制有幾個關鍵原因:

3.1 性能問題

spring.factories機制需要在啟動時掃描所有JAR包中的配置文件,當項目依賴較多時,這個過程會消耗大量時間,影響應用啟動性能。

3.2 缺乏模塊化支持

隨著Java 9引入模塊系統(tǒng)(JPMS),傳統(tǒng)的基于類路徑掃描的方式與模塊化設計理念存在沖突。spring.factories無法很好地支持Java模塊系統(tǒng)。

3.3 缺乏條件加載能力

spring.factories文件中的配置是靜態(tài)的,無法根據(jù)條件動態(tài)決定是否加載某個實現(xiàn)。雖然可以在實現(xiàn)類上使用@Conditional注解,但這種方式效率較低,因為所有類都會被加載到內(nèi)存中進行條件評估。

3.4 配置分散難以管理

在大型項目中,spring.factories配置分散在多個JAR包中,難以集中管理和查看全局配置。

3.5 GraalVM原生鏡像支持

SpringBoot 3.0的一個重要目標是提供對GraalVM原生鏡像的一流支持。而spring.factories基于運行時類路徑掃描的機制與GraalVM的提前編譯(Ahead-of-Time Compilation, AOT)模型存在根本性沖突。具體來說:

  • 靜態(tài)分析限制: GraalVM在構(gòu)建原生鏡像時需要靜態(tài)分析代碼,而spring.factories的類路徑掃描是動態(tài)執(zhí)行的,無法在構(gòu)建時確定。
  • 反射使用問題:spring.factories依賴于反射加載類,而GraalVM需要預先知道所有使用反射的類,這需要額外的配置和處理。
  • 資源訪問限制: 在GraalVM原生鏡像中,資源文件的訪問機制與JVM有所不同,spring.factories文件的掃描方式需要特殊處理。

為了更好地支持GraalVM,SpringBoot需要一種在構(gòu)建時就能確定的靜態(tài)配置方式,而不是運行時的動態(tài)掃描。

4. 替代方案:imports文件

4.1 新機制介紹

從SpringBoot 3.0開始,引入了基于imports文件的新機制,作為spring.factories的替代方案。這些文件位于META-INF/spring/目錄下,每種類型的擴展點對應一個專門的文件:

圖片圖片

4.2 新機制優(yōu)勢

  • 更好的性能: 每種擴展點類型使用單獨的文件,避免了加載不必要的配置
  • 支持Java模塊系統(tǒng): 新機制與Java模塊系統(tǒng)兼容
  • 簡化配置: 每行一個全限定類名,無需鍵值對形式,更易讀易寫
  • 更好的組織結(jié)構(gòu): 配置按功能分類到不同文件,結(jié)構(gòu)更清晰

4.3 示例對比

舊方式(spring.factories):

org.springframework.boot.autoconfigure.EnableAutoCnotallow=\
com.example.FooAutoConfiguration,\
com.example.BarAutoConfiguration

新方式(AutoConfiguration.imports):

com.example.FooAutoConfiguration
com.example.BarAutoConfiguration

5. 遷移指南

5.1 自動配置類遷移

將原來在spring.factories中注冊的自動配置類移動到META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中:

// 原來的自動配置類
@Configuration
@ConditionalOnXxx
public class MyAutoConfiguration{
    // ...
}

// 在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加:
// com.example.MyAutoConfiguration

5.2 其他擴展點如何遷移

對于其他類型的擴展點,SpringBoot 3.0保留了spring.factories機制,但推薦在新項目中使用新的注冊方式:

// 示例:注冊ApplicationListener
// SpringBoot 3.0之前:在spring.factories中配置
// org.springframework.context.Applicatinotallow=com.example.MyListener

// SpringBoot 3.0之后:使用@Bean方式注冊
@Configuration
public class MyConfiguration{
    @Bean
    public MyListener myListener(){
        return new MyListener();
    }
}

5.3 自定義擴展點遷移

對于自定義的擴展點,需要提供類似的imports文件機制:

// 自定義擴展點加載器示例
public class MyExtensionLoader{
    public List<MyExtension> loadExtensions(){
        return SpringFactoriesLoader.loadFactories(MyExtension.class, null);
    }
}

// 遷移到新機制
public class MyExtensionLoader{
    public List<MyExtension> loadExtensions(){
        List<String> classNames = SpringFactoriesLoader.loadFactoryNames(
            MyExtension.class, null);
        // 或者實現(xiàn)自己的imports文件加載邏輯
        // ...
    }
}

6. SpringFactoriesLoader的變化

6.1 API變更

在SpringBoot 3.0中,SpringFactoriesLoader類本身也經(jīng)歷了重大改變:

圖片圖片

// SpringBoot 3.x中新的SpringFactoriesLoader用法
public final classSpringFactoriesLoader{
    // 過時的方法
    @Deprecated
    public static <T> List<T> loadFactories(Class<T> factoryType, @Nullable ClassLoader classLoader){
        // ...
    }
    
    // 新方法
    public static List<String> loadFactoryNames(Class<?> factoryType, @Nullable ClassLoader classLoader){
        // 加載對應的imports文件
        // ...
    }
    
    // ...
}

6.2 兼容性考慮

為了保持向后兼容性,SpringBoot 3.0仍然支持通過spring.factories注冊某些類型的擴展點,但新的項目應該優(yōu)先考慮使用新機制。

7. 實戰(zhàn)示例

7.1 創(chuàng)建自定義自動配置

下面是一個完整的示例,展示如何在SpringBoot 3.0中創(chuàng)建和注冊自動配置:

// 1. 創(chuàng)建配置屬性類
@ConfigurationProperties(prefix = "myapp")
public class MyProperties{
    private boolean enabled = true;
    private String name = "default";
    
    // getter和setter方法
    // ...
}

// 2. 創(chuàng)建自動配置類
@AutoConfiguration// 注意這里使用了@AutoConfiguration而非@Configuration
@EnableConfigurationProperties(MyProperties.class)
@ConditionalOnProperty(prefix= "myapp", name = "enabled", havingValue = "true", matchIfMissing = true)
public class MyAutoConfiguration{
    
    private final MyProperties properties;
    
    public MyAutoConfiguration(MyProperties properties){
        this.properties = properties;
    }
    
    @Bean
    @ConditionalOnMissingBean
    public MyService myService(){
        // 根據(jù)屬性創(chuàng)建服務
        return new MyServiceImpl(properties.getName());
    }
}

7.2 注冊自動配置

然后,在META-INF/spring/目錄下創(chuàng)建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:

com.example.MyAutoConfiguration

7.3 項目結(jié)構(gòu)

完整的項目結(jié)構(gòu)如下:

myproject/
├── src/
│   └── main/
│       ├── java/
│       │   └── com/
│       │       └── example/
│       │           ├── MyProperties.java
│       │           ├── MyService.java
│       │           ├── MyServiceImpl.java
│       │           └── MyAutoConfiguration.java
│       └── resources/
│           └── META-INF/
│               └── spring/
│                   └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
└── pom.xml

8. 性能對比

在一個典型的中型SpringBoot應用中,使用新機制后的啟動性能對比:

圖片圖片

注:實際性能提升取決于項目規(guī)模和結(jié)構(gòu)

9. 常見問題與解決方案

9.1 兼容性問題

問題:現(xiàn)有的依賴庫仍使用spring.factories,會有兼容問題嗎?

解決方案:SpringBoot 3.0保留了對spring.factories的支持,舊的庫仍然可以正常工作。但新的代碼應該使用新機制。

9.2 遷移困難

問題:大型項目遷移到新機制工作量大

解決方案:可以分階段遷移,先遷移自動配置類,再逐步遷移其他擴展點。

9.3 自定義加載器

問題:自定義的SpringFactoriesLoader使用者如何遷移?

解決方案:參考SpringBoot的新實現(xiàn),為自定義擴展點提供類似的imports文件加載機制。

10. SpringBoot 3.0與GraalVM集成

SpringBoot 3.0對GraalVM的支持是取消spring.factories的主要原因之一。

10.1 GraalVM簡介

GraalVM是一個高性能的JDK實現(xiàn),它的一個重要特性是能夠?qū)ava應用編譯成獨立的原生可執(zhí)行文件(Native Image)。這些原生鏡像具有以下特點:

  • 快速啟動: 啟動時間通常在毫秒級,比傳統(tǒng)JVM應用快10-100倍
  • 低內(nèi)存占用: 內(nèi)存占用顯著降低,適合云原生和容器環(huán)境
  • 無需JVM: 可以獨立運行,不需要Java運行時環(huán)境
  • 預先編譯: 所有代碼在構(gòu)建時就編譯為機器碼,而非運行時編譯

10.2 SpringBoot對GraalVM的支持挑戰(zhàn)

SpringBoot框架面臨的主要挑戰(zhàn)是其動態(tài)特性與GraalVM靜態(tài)分析模型之間的矛盾:

圖片圖片

10.3 imports文件與GraalVM的兼容性

新的imports文件機制解決了與GraalVM集成的關鍵問題:

  • 靜態(tài)可分析性: imports文件中明確列出所有配置類,可以在構(gòu)建時靜態(tài)分析
  • 路徑明確性: 每種擴展點對應特定的文件路徑,減少了運行時掃描
  • 更少的反射: imports文件的解析機制更簡單,減少了對反射的依賴
  • 構(gòu)建時處理: 可以在AOT編譯階段處理imports文件并生成相應的元數(shù)據(jù)

10.4 SpringBoot AOT引擎

為了更好地支持GraalVM,SpringBoot 3.0引入了一個新的AOT引擎,它在構(gòu)建時執(zhí)行以下操作:

// SpringBoot 3.0 AOT處理示例
public class SpringAotProcessor{
    public void process(){
        // 1. 讀取imports文件而非掃描spring.factories
        List<String> configurations = readImportsFiles();
        
        // 2. 預先評估條件而非運行時評估
        List<String> effectiveConfigurations = 
            evaluateConditions(configurations, buildTimeProperties);
        
        // 3. 生成代理類而非運行時動態(tài)生成
        generateProxies(effectiveConfigurations);
        
        // 4. 生成反射配置
        generateReflectionConfig(effectiveConfigurations);
        
        // 5. 生成資源配置
        generateResourcesConfig();
    }
}

10.5 GraalVM集成實例

下面是一個完整的示例,展示如何在SpringBoot 3.0項目中配置和構(gòu)建GraalVM原生鏡像:

Maven配置

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.experimental</groupId>
        <artifactId>spring-native</artifactId>
        <version>${spring-native.version}</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <image>
                    <builder>paketobuildpacks/builder:tiny</builder>
                    <env>
                        <BP_NATIVE_IMAGE>true</BP_NATIVE_IMAGE>
                    </env>
                </image>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.springframework.experimental</groupId>
            <artifactId>spring-aot-maven-plugin</artifactId>
            <executions>
                <execution>
                    <id>generate</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

自動配置遷移示例

// 舊的方式 - spring.factories配置:
// META-INF/spring.factories:
// org.springframework.boot.autoconfigure.EnableAutoCnotallow=com.example.MyNativeCompatibleConfig

// 新的方式 - imports文件:
// META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports:
// com.example.MyNativeCompatibleConfig

// 自動配置類
@AutoConfiguration
@NativeHint(options = "--enable-url-protocols=http") // GraalVM特定的提示
public class MyNativeCompatibleConfig{
    @Bean
    public MyService myService(){
        return new MyNativeCompatibleService();
    }
}

10.6 性能對比:傳統(tǒng)JVM vs GraalVM原生鏡像

使用新的imports機制后,SpringBoot應用在GraalVM原生鏡像中的性能表現(xiàn):

圖片圖片

10.7 GraalVM集成的最佳實踐

  • 減少反射使用: 盡量使用構(gòu)造函數(shù)注入而非字段注入
  • 避免動態(tài)代理: 減少使用需要動態(tài)代理的特性
  • 靜態(tài)初始化: 在構(gòu)建時初始化靜態(tài)數(shù)據(jù)而非運行時
  • 使用imports文件: 確保所有配置類都通過imports文件注冊
  • 添加必要的提示: 使用@NativeHint等注解提供GraalVM所需的提示

10.8 GraalVM集成的限制和注意事項

  • 動態(tài)特性受限: 諸如運行時生成字節(jié)碼、動態(tài)加載類等特性在原生鏡像中受限
  • 反射使用: 必須明確聲明使用反射的類
  • 構(gòu)建時間: 原生鏡像構(gòu)建時間較長,需要合理規(guī)劃CI/CD流程
  • 調(diào)試復雜度: 原生鏡像的調(diào)試比傳統(tǒng)JVM更復雜
  • 第三方庫兼容性: 某些依賴可能尚未針對GraalVM優(yōu)化

通過取消spring.factories并引入新的imports文件機制,SpringBoot 3.0顯著改善了與GraalVM的集成體驗,讓開發(fā)者能夠更容易地構(gòu)建高性能、低延遲的云原生應用。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2022-05-27 08:44:09

springStarter配置

2025-07-16 07:10:00

SpringBoot

2025-07-21 02:15:00

2014-09-04 15:59:47

混合云企業(yè)云

2024-10-11 11:37:38

2016-03-18 10:30:29

2016中國金融交易技

2017-05-04 10:48:10

超融合虛擬化存儲

2022-06-24 09:38:50

SASE零信任

2009-10-26 13:34:33

光纖接入網(wǎng)

2011-09-13 19:52:23

2019-07-16 09:00:00

人工智能機器學習區(qū)塊鏈

2013-05-13 11:09:00

萬兆以太網(wǎng)帶寬需求萬兆

2025-04-01 08:08:29

2011-03-22 15:04:09

2015-09-25 16:41:03

APIStore百度技術(shù)革新

2013-08-13 15:50:03

2010-09-29 15:46:52

釣魚技術(shù)

2014-09-16 18:12:21

云計算

2015-06-12 10:58:51

綜合布線技術(shù)
點贊
收藏

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

国产精品白嫩美女在线观看 | 亚洲成人一品| 亚洲成人av电影在线| 久久大香伊蕉在人线观看热2| 日本黄色网址大全| 成人在线视频观看| 亚洲日本青草视频在线怡红院| 欧美中文在线视频| 高清国产在线观看| 国产 日韩 欧美 综合 一区| 色88888久久久久久影院按摩| 国产精品一区二区三区免费 | 欧美日韩一区二区三区视频播放| 精品欧美激情精品一区| 日韩精品大片| 亚洲精品18p| 美女网站视频久久| 97精品在线观看| 午夜成人亚洲理伦片在线观看| 久久69成人| 欧美日韩国产中文精品字幕自在自线 | 91精品国产综合久久福利| 黄色一级片在线看| 国产最新在线| 国产亚洲精品bt天堂精选| av一区二区三区在线观看| 影音先锋在线国产| 很黄很黄激情成人| 久久精品久久精品亚洲人| 亚洲专区区免费| 高潮按摩久久久久久av免费| 欧美绝品在线观看成人午夜影视| 少妇高潮流白浆| 国产在线观看黄| 成年人国产精品| 91精品国产91久久久久青草| 懂色av蜜臀av粉嫩av喷吹| 一区二区日本视频| 国外视频精品毛片| 欧美久久久久久久久久久久| 久久婷婷蜜乳一本欲蜜臀| 亚洲欧美在线第一页| 中文字幕在线视频播放| 亚洲视频精选| 日韩三级电影网址| 午夜视频在线观| 国产成人久久精品麻豆二区| 日本精品一区二区三区四区的功能| 亚洲欧洲日韩精品| 91免费在线| 中日韩av电影| 亚洲欧洲一二三| 91精品国产91久久久久游泳池| 韩国成人精品a∨在线观看| 国产精品爽爽爽| 亚洲男人天堂网址| 日韩精品电影在线观看| 国产成人涩涩涩视频在线观看| 亚洲伦理一区二区三区| 日韩三级在线| 久久久久99精品久久久久| 97精品在线播放| 中文字幕亚洲精品乱码 | 91大神免费观看| 亚洲一区二区av| 欧美日韩在线三级| 粉色视频免费看| 玖玖精品一区| 精品久久国产老人久久综合| 91人人澡人人爽| 伦理一区二区三区| 亚洲男人天堂古典| avhd101老司机| 99久久综合| 欧美黑人xxxx| 影音先锋在线国产| 另类综合日韩欧美亚洲| 2019国产精品视频| 人妻无码一区二区三区久久99 | 不卡日本视频| 久久精品99久久久久久久久| 欧美丰满艳妇bbwbbw| 亚洲美女黄色| 国产z一区二区三区| 国产又粗又猛又爽又黄的视频一| 亚洲女同在线| 国产欧美精品久久久| 国产伦精品一区二区三区四区| 欧美亚洲自偷自偷| 国产精品丝袜白浆摸在线| 99国产精品99| 91免费在线看| 日韩国产精品毛片| 国产精品探花在线| 在线观看一区日韩| 免费欧美一级片| 免费av一区| 九九久久精品一区| 日日夜夜狠狠操| 国产精品资源站在线| 久久艳妇乳肉豪妇荡乳av| 1024国产在线| 亚洲va国产va欧美va观看| 国产嫩草在线观看| 黄色欧美网站| 久久精品电影一区二区| 国产视频91在线| 麻豆中文一区二区| 久久99热只有频精品91密拍| 黄色网在线播放| 欧美性猛交xxxx免费看| www.偷拍.com| 精品日韩毛片| 欧美一级大片在线观看| 国产免费一区二区三区免费视频| 韩国av一区二区| 蜜桃成人在线| 亚洲男同gay网站| 欧美性极品少妇| 国产成人无码一区二区在线观看| 国产在线播放精品| 久久国内精品一国内精品| 日韩精品一区二区亚洲av| 国产精品亚洲人在线观看| 人禽交欧美网站免费| av中文字幕在线看| 日韩欧美国产1| 91大神福利视频| 老牛国产精品一区的观看方式| 国产成人精品视频在线| 欧美 日韩 国产 精品| 亚洲女女做受ⅹxx高潮| 国产九九在线观看| 国产精品一区高清| 欧美亚洲伦理www| 婷婷视频在线观看| 亚洲国产人成综合网站| 日本55丰满熟妇厨房伦| 久久久久免费av| 国产精品一区二区3区| 国产三级视频在线看| 欧美视频免费在线| 一二三不卡视频| 9色国产精品| 国新精品乱码一区二区三区18| 欧美孕妇孕交| 日韩欧美国产一区二区| 精品久久久久一区二区| 欧美视频不卡| 国产精品免费一区二区| 男女免费观看在线爽爽爽视频| 一本在线高清不卡dvd| 男女一区二区三区| 亚洲国产精品一区制服丝袜| 福利视频久久| 国内高清免费在线视频| 精品欧美乱码久久久久久| 免费在线观看黄色av| www.久久精品| 欧美女人性生活视频| 亚洲成aⅴ人片久久青草影院| 操日韩av在线电影| 国产男男gay网站| 一区二区成人在线| 又黄又爽的网站| 亚洲一区日韩在线| 亚洲精品人成| 日韩精品免费视频一区二区三区| 在线成人激情视频| 亚洲综合精品国产一区二区三区| www.日韩av| 乱子伦视频在线看| 国内精品视频在线观看| 国产综合福利在线| 日本片在线观看| 日韩成人在线播放| 中文字幕一区二区三区波野结| 成人av网在线| 美女网站免费观看视频| 午夜精品一区二区三区国产| 99久久综合狠狠综合久久止| a√中文在线观看| 亚洲天堂av网| 99精品视频免费看| 好吊成人免视频| 毛片aaaaaa| 国产91露脸合集magnet| 精品99在线视频| 97国产成人高清在线观看| 99电影在线观看| 欧美色网一区| 欧美成人剧情片在线观看| 熟妇人妻一区二区三区四区| 欧美性色黄大片| 免费中文字幕在线观看| 久久亚洲一区二区三区四区| 在线免费看v片| 亚洲综合好骚| 精品国产无码在线| 最新亚洲精品| 99蜜桃在线观看免费视频网站| 国产在线观看av| 日韩激情第一页| 亚洲a视频在线观看| 欧美中文字幕亚洲一区二区va在线| 欧美性猛交xxxx乱| 国产成人aaa| 免费观看成人在线视频| 狠狠入ady亚洲精品| 亚洲a∨一区二区三区| 粉嫩精品导航导航| 91情侣偷在线精品国产| 欧美7777| 久久久久久999| 麻豆视频在线| 亚洲天堂成人在线| 婷婷丁香花五月天| 日韩美一区二区三区| 自拍偷拍色综合| 狠狠干狠狠久久| 免费网站看av| 亚洲精品欧美二区三区中文字幕| 久久久精品视频国产| 久久成人亚洲| 亚洲熟妇无码一区二区三区| 亚洲成av人片一区二区密柚| 欧美日韩国产三区| 日本欧美高清| 国产欧美一区二区三区另类精品 | 一区二区三区高清在线| 超碰人人干人人| 久久九九全国免费| 精品人妻一区二区免费视频| 国产成人在线视频播放| 亚洲一二三av| 麻豆91在线播放免费| 亚洲一区二区蜜桃| 丝袜诱惑亚洲看片| 欧美色图另类小说| 国产亚洲一级| 亚洲熟妇av日韩熟妇在线| 午夜精品久久| 欧美交换配乱吟粗大25p| 天天做天天爱综合| 黄色高清视频网站| 国产精品久久久久久久免费观看 | 精品黑人一区二区三区在线观看| 亚洲一二三区不卡| 久久久久久久久97| 一区二区欧美在线观看| 九九热精彩视频| 亚洲天堂福利av| av成人免费网站| 亚洲精品免费播放| 久草视频精品在线| 精品久久久久久国产91| 日本天堂网在线| 91久久精品一区二区二区| 亚洲婷婷久久综合| 欧美日韩激情在线| 国产丝袜在线视频| 亚洲成人aaa| 四虎电影院在线观看| 亚洲天堂av网| 日本在线www| 精品视频9999| 男女羞羞在线观看| 国产成人精品一区二区三区| 日韩电影免费观看高清完整版在线观看| 午夜欧美大片免费观看| 免费高潮视频95在线观看网站| 久久色在线播放| 香蕉久久aⅴ一区二区三区| 欧美精品电影在线| 亚洲精品动漫| 国产精品一区二区女厕厕| 国产日韩一区二区三免费高清| 国产成人精品久久久| 欧美亚洲黄色| 国产精品毛片va一区二区三区| 青青在线精品| av资源站久久亚洲| 偷拍亚洲精品| 杨幂一区欧美专区| 亚洲午夜一区| 国产一线二线三线在线观看| 国产一区二区三区四区在线观看| 九色porny91| 国产一区福利在线| 欧产日产国产精品98| 中文字幕精品综合| 久久精品视频8| 欧美性极品少妇| 欧美 日韩 中文字幕| 中文字幕久久久| 大香伊人中文字幕精品| 国产精品久久久久久久久久ktv | 国产精品一二三视频| 亚洲高清999| 日韩国产高清一区| 韩国久久久久| 深夜黄色小视频| 99精品国产视频| 三级在线观看免费大全| 色婷婷久久久亚洲一区二区三区| 日韩久久中文字幕| 91精品国产综合久久国产大片| 国产精品毛片久久久久久久av | www.色就是色| 国产aⅴ综合色| 美国精品一区二区| 天天综合色天天综合色h| 中文字幕在线播放不卡| 亚洲国产另类久久精品| 黄色免费网站在线观看| 日韩av色综合| 国产 日韩 欧美 综合 一区| 亚洲a∨一区二区三区| 欧美一区=区| 黄色激情在线观看| 亚洲欧美另类久久久精品2019| 看片网站在线观看| 欧洲一区在线电影| 五月婷婷在线播放| 欧美激情一区二区三区久久久| www.8ⅹ8ⅹ羞羞漫画在线看| 国产有码一区二区| 国产亚洲欧美日韩在线观看一区二区 | 免费看欧美一级片| 激情欧美一区二区| 免费看的黄色网| 色婷婷综合五月| 欧美孕妇孕交xxⅹ孕妇交| 97免费在线视频| 香港久久久电影| 亚洲啊啊啊啊啊| 国产乱码一区二区三区| 麻豆天美蜜桃91| 在线不卡a资源高清| 午夜看片在线免费| 国产欧美一区二区三区久久人妖 | 日韩一区欧美二区| 人妻丰满熟妇aⅴ无码| 五月天婷婷综合| 手机看片一区二区| 欧美精品电影免费在线观看| 999久久久久久久久6666| 亚洲欧美一二三| 国产激情精品久久久第一区二区| 国产乱了高清露脸对白| 亚洲成在人线免费| 天天色综合av| 欧美在线性视频| 欧美日韩中文一区二区| 国内外免费激情视频| 国产欧美精品一区aⅴ影院| 波多野结衣高清视频| 在线性视频日韩欧美| 日本久久久久| 青青草原网站在线观看| 国产成人精品影视| 日韩少妇裸体做爰视频| 精品亚洲一区二区三区| 精品无人乱码一区二区三区 | 欧美在线一区二区三区四| 日韩欧美在线精品| 国产精品少妇在线视频| 国产精品国产三级国产专播品爱网| 91香蕉在线视频| 亚洲欧美精品在线| 国产一区二区主播在线| 欧美 日韩 国产 在线观看| 国产福利视频一区二区三区| 日韩三级视频在线播放| 亚洲色图校园春色| 午夜精品久久久久久毛片| 丁香色欲久久久久久综合网| 91在线视频播放| 中文字幕一区二区久久人妻| 欧美成人精品一区二区| 日韩aaa久久蜜桃av| 亚洲福利精品视频| 亚洲综合一二区| 九色在线视频蝌蚪| 91精品视频播放| 一区二区日本视频| 三级黄色录像视频| 亚洲精品999| 欧美大陆国产| 霍思燕三级露全乳照| 中文字幕国产一区二区| 性猛交富婆╳xxx乱大交天津| 久久成人18免费网站| 欧美一级二级三级视频| 色一情一区二区| 色综合色狠狠综合色| gogo在线高清视频| 欧洲亚洲一区二区| 国产成人自拍在线| 中文字幕有码无码人妻av蜜桃|