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

Spring 中 BeanFactory 和 FactoryBean 有何區(qū)別?

開發(fā) 前端
FactoryBean 是一個(gè)特殊的 Bean,它是一個(gè)工廠對象,用于創(chuàng)建和管理其他 Bean 的實(shí)例。FactoryBean 接口定義了一種創(chuàng)建 Bean 的方式,它允許開發(fā)人員在 Bean 的創(chuàng)建過程中進(jìn)行更多的自定義操作。通過實(shí)現(xiàn) FactoryBean 接口,開發(fā)人員可以創(chuàng)建復(fù)雜的 Bean 實(shí)例,或者在 Bean 實(shí)例化之前進(jìn)行一些額外的邏輯處理。

這也是 Spring 面試時(shí)一道經(jīng)典的面試問題,今天我們來聊一聊這個(gè)話題。

其實(shí)從名字上就能看出來個(gè)一二,BeanFactory 是 Factory 而 FactoryBean 是一個(gè) Bean,我們先來看下總結(jié):

  • BeanFactory 是 Spring 框架的核心接口之一,用于管理和獲取應(yīng)用程序中的 Bean 實(shí)例。它是一個(gè)工廠模式的實(shí)現(xiàn),負(fù)責(zé)創(chuàng)建、配置和管理 Bean 對象。BeanFactory 是 Spring IoC 容器的基礎(chǔ),它可以從配置元數(shù)據(jù)(如 XML 文件)中讀取 Bean 的定義,并在需要時(shí)實(shí)例化和提供這些 Bean。
  • FactoryBean 是一個(gè)特殊的 Bean,它是一個(gè)工廠對象,用于創(chuàng)建和管理其他 Bean 的實(shí)例。FactoryBean 接口定義了一種創(chuàng)建 Bean 的方式,它允許開發(fā)人員在 Bean 的創(chuàng)建過程中進(jìn)行更多的自定義操作。通過實(shí)現(xiàn) FactoryBean 接口,開發(fā)人員可以創(chuàng)建復(fù)雜的 Bean 實(shí)例,或者在 Bean 實(shí)例化之前進(jìn)行一些額外的邏輯處理。

區(qū)別在于,BeanFactory 是 Spring 框架的核心接口,用于管理和提供 Bean 實(shí)例,而 FactoryBean 是一個(gè)特殊的 Bean,用于創(chuàng)建和管理其他 Bean 的實(shí)例。FactoryBean 在 Bean 的創(chuàng)建過程中提供更多的自定義能力,允許進(jìn)行額外的邏輯處理。

可能有的小伙伴看的還不是很清楚,我們再來詳細(xì)看下。

1. BeanFactory

BeanFactory 看名字就知道這是一個(gè) Bean 工廠,小伙伴們知道,Spring IoC 容器幫我們完成了 Bean 的創(chuàng)建、管理等操作,那么這些操作都離不開 BeanFactory。

我們來簡單看下 BeanFactory 的代碼:

public interface BeanFactory {
 String FACTORY_BEAN_PREFIX = "&";
 Object getBean(String name) throws BeansException;
 <T> T getBean(String name, Class<T> requiredType) throws BeansException;
 Object getBean(String name, Object... args) throws BeansException;
 <T> T getBean(Class<T> requiredType) throws BeansException;
 <T> T getBean(Class<T> requiredType, Object... args) throws BeansException;
 <T> ObjectProvider<T> getBeanProvider(Class<T> requiredType);
 <T> ObjectProvider<T> getBeanProvider(ResolvableType requiredType);
 boolean containsBean(String name);
 boolean isSingleton(String name) throws NoSuchBeanDefinitionException;
 boolean isPrototype(String name) throws NoSuchBeanDefinitionException;
 boolean isTypeMatch(String name, ResolvableType typeToMatch) throws NoSuchBeanDefinitionException;
 boolean isTypeMatch(String name, Class<?> typeToMatch) throws NoSuchBeanDefinitionException;
 @Nullable
 Class<?> getType(String name) throws NoSuchBeanDefinitionException;
 @Nullable
 Class<?> getType(String name, boolean allowFactoryBeanInit) throws NoSuchBeanDefinitionException;
 String[] getAliases(String name);

}

這些方法基本上都見名知義:

  • FACTORY_BEAN_PREFIX:這個(gè)變量其實(shí)是說,如果當(dāng)前 Bean 不是像 User、Book 這種普通 Bean,而是一個(gè) FactoryBean,就給這個(gè) Bean 名字加一個(gè) & 前綴,這個(gè)我在第二小節(jié)和小伙伴們演示。
  • getBean:這個(gè)方法就是根據(jù) Bean 的名字、類型等去查詢 Bean。
  • getBeanProvider:這個(gè)方法可以獲取一個(gè) ObjectProvider,ObjectProvider 是 Spring 框架中的一個(gè)接口,用于獲取 Bean 對象的實(shí)例。它提供了一種延遲加載 Bean 的方式,可以在需要時(shí)動(dòng)態(tài)地獲取 Bean 實(shí)例(懶加載)。
  • containsBean:判斷是否包含某個(gè) Bean。
  • isSingleton:判斷某個(gè) Bean 是否是單例的。
  • isPrototype:判斷某個(gè) Bean 是否是多例的。
  • isTypeMatch:判斷某一個(gè) Bean 的類型是否是給定類型。
  • getType:獲取 Bean 的類型。
  • getAliases:獲取 Bean 的別名。

可以看到,很多都是大家日常開發(fā)中常見常用的方法。

很多小伙伴剛開始接觸 Spring 的時(shí)候,都會(huì)用到一個(gè)對象 ClassPathXmlApplicationContext,這其實(shí)就是 BeanFactory 的一個(gè)子類。我們來看下 BeanFactory 的繼承圖:

圖片圖片

繼承類比較多,我說幾個(gè)大家可能比較熟悉的:

  1. ClassPathXmlApplicationContext:這個(gè)是 Spring 容器啟動(dòng)時(shí),從當(dāng)前類路徑下去加載 XML 配置文件,參數(shù)就是 classpath 下 XML 的文件路徑。
  2. FileSystemXmlApplicationContext:這個(gè)是 Spring 容器啟動(dòng)時(shí),從文件系統(tǒng)中去加載 XML 配置文件,參數(shù)一個(gè)絕對路徑。
  3. AnnotationConfigApplicationContext:這個(gè)是如果我們使用 Java 代碼去做 Spring 容器的配置的話,通過這個(gè)配置類去加載 Java 配置類。
  4. DefaultListableBeanFactory:這個(gè)默認(rèn)實(shí)現(xiàn)了 ListableBeanFactory 和 BeanDefinitionRegistry 接口,是一個(gè)比較成熟的 BeanFactory。

好啦,這就是 BeanFactory 的特點(diǎn),大家明白了吧~

2. FactoryBean

2.1 分析

FactoryBean 其實(shí)很多小伙伴可能都見過,只是可能沒去總結(jié)歸納。我給小伙伴們舉幾個(gè)例子。

在 SSM 項(xiàng)目中,如果我們要配置 MyBatis 到項(xiàng)目中,一般需要配置下面這個(gè) Bean:

<bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="typeAliasesPackage" value="org.javaboy.shirodemo.model"/>
    <property name="mapperLocations">
        <list>
            <value>classpath*:org/javaboy/shirodemo/mapper/*.xml</value>
        </list>
    </property>
</bean>

我們在配置 Shiro 的時(shí)候,一般都要配置如下 Bean:

<bean class="org.apache.shiro.spring.web.ShiroFilterFactoryBean" id="shiroFilter">
    <property name="securityManager" ref="securityManager"/>
    <property name="loginUrl" value="/login"/>
    <property name="successUrl" value="/index"/>
    <property name="unauthorizedUrl" value="/unauthorizedUrl"/>
    <property name="filterChainDefinitions">
        <value>
            /index=anon
            /doLogin=anon
            /hello=user
            /**=authc
        </value>
    </property>
</bean>

如果我們前端傳遞的參數(shù)是 key-value 格式,并且有一個(gè)日期,那么小伙伴們知道,服務(wù)端 SpringMVC 默認(rèn)無法處理這個(gè)日期,需要配置一個(gè)日期轉(zhuǎn)換器,一般我們在 Spring 容器中添加如下 Bean(對這個(gè)不熟悉的小伙伴可以在公眾號(hào)【江南一點(diǎn)雨】后臺(tái)回復(fù) ssm,有松哥錄制的免費(fèi)入門視頻):

<bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean" id="conversionService">
    <property name="converters">
        <set>
            <ref bean="myDateConverter"/>
        </set>
    </property>
</bean>
<mvc:annotation-driven conversion-service="conversionService"/>

小伙伴們觀察上面三個(gè) Bean 有一個(gè)共同的特點(diǎn),那就是 Bean 的名字都是 xxxFactoryBean。

為什么要用 xxxFactoryBean 而不直接把需要的 Bean 注入到 Spring 容器中去呢?以 MyBatis 為例:

手動(dòng)配置過 MyBatis 的小伙伴應(yīng)該都知道,MyBatis 有兩個(gè)重要的類,一個(gè)是 SqlSessionFactory,還有一個(gè)是 SqlSession,通過 SqlSessionFactory 可以獲取到一個(gè) SqlSession。但是不知道小伙伴們是否還記得配置代碼,手動(dòng)配置代碼如下(對這個(gè)不熟悉的小伙伴可以在公眾號(hào)【江南一點(diǎn)雨】后臺(tái)回復(fù) ssm,有松哥錄制的免費(fèi)入門視頻):

public class SqlSessionFactoryUtils {
    private static SqlSessionFactory SQLSESSIONFACTORY = null;
    public static SqlSessionFactory getInstance() {
        if (SQLSESSIONFACTORY == null) {
            try {
                SQLSESSIONFACTORY = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return SQLSESSIONFACTORY;
    }
}
public class Main {
    public static void main(String[] args) {
        SqlSessionFactory factory = SqlSessionFactoryUtils.getInstance();
        SqlSession sqlSession = factory.openSession();
        List<User> list = sqlSession.selectList("org.javaboy.mybatis01.mapper.UserMapper.getAllUser");
        for (User user : list) {
            System.out.println("user = " + user);
        }
        sqlSession.close();
    }
}

小伙伴們看到,無論是 SqlSessionFactory 還是 SqlSession,都不是正經(jīng) new 出來的,其實(shí)這兩個(gè)都是接口,顯然不可能 new 出來,前者通過建造者模式去配置各種屬性,最后生成一個(gè) SqlSessionFactory 的實(shí)例,后者則通過前者這個(gè)工廠去生成,最終拿到的都是這兩個(gè)接口的子類的對象。

所以,對于 SqlSessionFactory 和 SqlSession 就沒法在 Spring 容器中直接進(jìn)行配置,那么對于這樣的 Bean,就可以通過 xxxFactoryBean 來進(jìn)行配置。

我們來看下 SqlSessionFactoryBean 類,源碼很長,我挑了重要的出來:

public class SqlSessionFactoryBean implements FactoryBean<SqlSessionFactory>, InitializingBean, ApplicationListener<ApplicationEvent> {

  private SqlSessionFactory sqlSessionFactory;

  @Override
  public SqlSessionFactory getObject() throws Exception {
    if (this.sqlSessionFactory == null) {
      afterPropertiesSet();
    }

    return this.sqlSessionFactory;
  }
  @Override
  public Class<? extends SqlSessionFactory> getObjectType() {
    return this.sqlSessionFactory == null ? SqlSessionFactory.class : this.sqlSessionFactory.getClass();
  }
  @Override
  public boolean isSingleton() {
    return true;
  }
}

大家看一下,SqlSessionFactoryBean 需要實(shí)現(xiàn) FactoryBean 接口,并且在實(shí)現(xiàn)接口的時(shí)候指定泛型是 SqlSessionFactory,也就是 SqlSessionFactoryBean 最終產(chǎn)出的 Bean 是 SqlSessionFactory。實(shí)現(xiàn)了 FactoryBean 接口之后,就需要實(shí)現(xiàn)接口中的三個(gè)方法:

  • getObject:這個(gè)方法返回的對象,就是真正要注冊到 Spring 容器中的對象,在這個(gè)方法中,我們就可以按照各種方式對 Bean 進(jìn)行各種配置了。
  • getObjectType:這個(gè)方法返回注冊到 Spring 容器中的對象類型。
  • isSingleton:這個(gè)方法用來返回注冊到 Spring 容器中的 Bean 是否是單例的。

這就是 FactoryBean 的特點(diǎn),由于某一個(gè) Bean 的初始化過于復(fù)雜,那么就可以通過 FactoryBean 來幫助注冊到 Spring 容器中去。

2.2 實(shí)踐

松哥再寫一個(gè)簡單的例子給小伙伴們體驗(yàn)一把 FactoryBean。

假設(shè)我有如下類:

public class Author {

    private String name;
    private Integer age;

    private Author() {
    }

    public static Author init(String name, Integer age) {
        Author author = new Author();
        author.setAge(age);
        author.setName(name);
        return author;
    }
    //省略 getter/setter/toString
}

這個(gè)類的特點(diǎn)就是構(gòu)造方法是私有的,你沒法從外面去 new,現(xiàn)在我想將這個(gè)類的對象注冊到 Spring 容器中,那么我可以提供一個(gè) AuthorFactoryBean:

public class AuthorFactoryBean implements FactoryBean<Author> {
    @Override
    public Author getObject() throws Exception {
        return Author.init("javaboy", 99);
    }

    @Override
    public Class<?> getObjectType() {
        return Author.class;
    }

    @Override
    public boolean isSingleton() {
        return true;
    }
}

然后在 Spring 容器中配置 AuthorFactoryBean 即可:

<bean class="org.javaboy.bean.AuthorFactoryBean" id="author"/>

接下來我們就可以從容器中去獲取 Author 對象了,但是要注意,通過 author 這個(gè)名字拿到的是 Author 對象,而不是 AuthorFactoryBean 對象,如果想要獲取到 AuthorFactoryBean 對象,那么要通過 &author 這個(gè)名字去獲取(回顧第一小節(jié)所講內(nèi)容)。

public class Main {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        Object author = ctx.getBean("author");
        Object authorFactoryBean = ctx.getBean("&author");
        System.out.println("author.getClass() = " + author.getClass());
        System.out.println("authorFactoryBean.getClass() = " + authorFactoryBean.getClass());
    }
}

來看下最終運(yùn)行結(jié)果:

圖片圖片

跟我們所想的一致吧~

3. 小結(jié)

經(jīng)過前面的介紹,相信小伙伴們已經(jīng)能夠區(qū)分 BeanFactory 和 FactoryBean 了,再來回顧一下本文開頭的內(nèi)容:

  • BeanFactory 是 Spring 框架的核心接口之一,用于管理和獲取應(yīng)用程序中的 Bean 實(shí)例。它是一個(gè)工廠模式的實(shí)現(xiàn),負(fù)責(zé)創(chuàng)建、配置和管理 Bean 對象。BeanFactory 是 Spring IoC 容器的基礎(chǔ),它可以從配置元數(shù)據(jù)(如 XML 文件)中讀取 Bean 的定義,并在需要時(shí)實(shí)例化和提供這些 Bean。
  • FactoryBean 是一個(gè)特殊的 Bean,它是一個(gè)工廠對象,用于創(chuàng)建和管理其他 Bean 的實(shí)例。FactoryBean 接口定義了一種創(chuàng)建 Bean 的方式,它允許開發(fā)人員在 Bean 的創(chuàng)建過程中進(jìn)行更多的自定義操作。通過實(shí)現(xiàn) FactoryBean 接口,開發(fā)人員可以創(chuàng)建復(fù)雜的 Bean 實(shí)例,或者在 Bean 實(shí)例化之前進(jìn)行一些額外的邏輯處理。

區(qū)別在于,BeanFactory 是 Spring 框架的核心接口,用于管理和提供 Bean 實(shí)例,而 FactoryBean 是一個(gè)特殊的 Bean,用于創(chuàng)建和管理其他 Bean 的實(shí)例。FactoryBean 在 Bean 的創(chuàng)建過程中提供更多的自定義能力,允許進(jìn)行額外的邏輯處理。

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2025-03-10 09:30:00

SpringJava開發(fā)

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2023-10-27 07:39:44

IOC容器Spring

2023-10-16 08:16:31

Bean接口類型

2025-09-15 07:35:04

Spring容器接口

2023-01-04 11:41:31

微服務(wù)SOA架構(gòu)

2011-07-20 09:36:58

XenClient 2XenClient X

2018-07-23 10:22:36

AI芯片傳統(tǒng)

2018-02-09 07:47:47

大數(shù)據(jù)BI商業(yè)智能

2009-06-17 17:20:14

BeanFactorySpring

2024-02-21 23:13:45

C++編程開發(fā)

2009-06-17 17:04:37

BeanFactorySpring

2021-06-22 06:20:39

微軟Windows 10Windows 11

2023-08-14 10:02:46

命令Linux

2013-10-11 09:22:49

EBGPIBGPIGP

2021-06-25 10:04:47

DevOpsDevSecOps開發(fā)

2025-01-09 07:31:39

MySQL字段磁盤

2022-07-12 10:58:49

Linuxsusudo

2024-01-09 16:14:39

RustGo切片

2020-09-14 09:01:43

VMware vSANSAN網(wǎng)絡(luò)虛擬化
點(diǎn)贊
收藏

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

亚洲网色网站| 伊人久久大香| 中文字幕高清不卡| 91久久夜色精品国产网站| 久久久国产精华液| 亚洲裸色大胆大尺寸艺术写真| 在线一区二区三区四区五区| 青春草在线视频免费观看| 亚洲美女综合网| 久久只有精品| 久久999免费视频| 日韩精品电影一区二区| av日韩一区| 高跟丝袜一区二区三区| 永久久久久久| 免费在线超碰| 国产黄色精品视频| 国产精品成人aaaaa网站| 国产一二三区精品| 最近国产精品视频| 欧美精品一区二区三区四区| 国产免费又粗又猛又爽| 国产网站在线| 一区二区视频免费在线观看| 日韩在线导航| 欧美777四色影视在线| 国产一区亚洲一区| 国产精品视频大全| 精品不卡一区二区| 亚洲黄网站黄| 美女视频黄免费的亚洲男人天堂| 熟女俱乐部一区二区视频在线| 999久久久精品一区二区| 欧美日韩久久久| 欧美精品成人网| 男人久久天堂| 亚洲综合在线免费观看| 一区二区在线不卡| 电影av一区| 久久色.com| 九九九九九九精品| 亚洲成人一级片| 国产一区二区导航在线播放| 国产成人av在线播放| 日本韩国欧美中文字幕| 91久久在线| 欧美激情精品久久久久久大尺度| 国产精品成人69xxx免费视频 | 在线观看成人小视频| 国产主播自拍av| 丁香花在线电影| 一区二区三区四区在线播放| 亚洲小说欧美另类激情| 免费在线你懂的| 综合电影一区二区三区 | 国模大胆一区二区三区| 免费成人高清视频| 亚洲伦理一区二区三区| 久久久久国产精品| 久久高清视频免费| 麻豆国产尤物av尤物在线观看| 中文字幕人成人乱码| 欧美床上激情在线观看| 免费在线观看一级片| 欧美+日本+国产+在线a∨观看| 久久影视电视剧免费网站清宫辞电视 | 国产爆乳无码一区二区麻豆 | 日本成人小视频| 日韩中文在线中文网三级| 二区三区四区视频| 在线中文字幕第一区| 欧美裸体男粗大视频在线观看| avtt天堂在线| 亚洲国产专区| 国产成人综合亚洲| 国产一区二区三区成人| 国产河南妇女毛片精品久久久 | 国内国产精品天干天干| 亚洲国产高清在线观看| 亚洲国产精品推荐| 美女被到爽高潮视频| 久久亚洲国产| 欧美丰满少妇xxxx| 波多野结衣视频网站| 青青草国产成人av片免费| 亚洲xxxxx电影| 手机看片一区二区| 国产欧美1区2区3区| 色一情一乱一乱一区91| av色在线观看| 欧美性一二三区| 久久久久国产免费| 国产尤物久久久| 久久av在线看| 精品成人免费视频| 久久精品国产精品亚洲精品| 国产高清自拍一区| 番号集在线观看| 亚洲欧美二区三区| 久草精品在线播放| 日本精品一区二区三区在线观看视频| 亚洲第一页中文字幕| 手机毛片在线观看| 伊人影院久久| 成人黄色中文字幕| 免费毛片在线| 亚洲午夜一区二区| 午夜剧场在线免费观看| 九九视频免费观看视频精品| 免费av一区二区| www.久久视频| 99久久777色| 特色特色大片在线| 久久婷婷中文字幕| 91丨精品丨国产| 亚洲免费一级电影| 久青草免费视频| 久草这里只有精品视频| 免费观看国产成人| 国产盗摄一区二区| 欧美一级午夜免费电影| 中文字幕第24页| 欧美在线综合| 精品国产乱码久久久久久丨区2区| 秋霞a级毛片在线看| 在线视频你懂得一区| 蜜臀aⅴ国产精品久久久国产老师| 欧美日韩国产在线观看网站| 97精品一区二区三区| 成 人 黄 色 片 在线播放| 国产精品家庭影院| 色一情一乱一伦一区二区三区日本| 高清精品xnxxcom| 欧美成人一区在线| www.av导航| 亚洲精品一二三| 国产xxxxhd| 欧美成熟视频| 亚洲综合第一页| 3d玉蒲团在线观看| 91麻豆精品国产91久久久资源速度 | 男人操女人免费软件| 99久久香蕉| 欧美日韩成人在线播放| a级片在线播放| 亚洲激情成人在线| 美女流白浆视频| 午夜久久99| 国产精品二区三区四区| 久久五月精品中文字幕| 欧美变态凌虐bdsm| 国产一级av毛片| 懂色av一区二区夜夜嗨| 男人添女人下部视频免费| 凹凸av导航大全精品| 午夜精品在线视频| 视频在线观看你懂的| 欧美性猛交xxxx乱大交蜜桃| 草草影院第一页| 久久青草久久| 午夜精品短视频| 伊人久久大香伊蕉在人线观看热v| 尤物精品国产第一福利三区 | 欧美成人一区二区三区片免费 | 91精品入口蜜桃| 欧美性爽视频| 亚洲精品动漫100p| 无码人妻丰满熟妇区bbbbxxxx| 国产日韩欧美高清| 校园春色 亚洲色图| 久久精品亚洲欧美日韩精品中文字幕| 91色视频在线导航| 九色porny丨入口在线| 亚洲视频日韩精品| 国产精品视频a| 亚洲一区二区视频| 亚洲最大成人网站| 激情成人综合网| 色综合久久久久无码专区| 精品国产欧美日韩| 亚洲在线免费观看| 综合日韩av| 久久人人爽人人爽爽久久| 精品国产黄色片| 欧美午夜片在线免费观看| 内射毛片内射国产夫妻| 国产成人av福利| 激情网站五月天| 在线成人激情| 日本一区二区在线视频观看| 国产精品成人3p一区二区三区| 久久久久久高潮国产精品视| 国产黄色片在线观看| 日韩欧美一区在线| 一级一片免费看| 亚洲男人天堂一区| 伊人网伊人影院| 国产高清久久久久| 美女网站免费观看视频| 国户精品久久久久久久久久久不卡| 欧美一区二区视频17c| 18国产精品| 国产精品视频成人| 亚洲黄色中文字幕| 久久99精品视频一区97| 成人性生交大片免费看午夜| 精品欧美乱码久久久久久| 久久这里只有精品9| 亚洲国产日韩a在线播放| 日本免费www| 99这里只有久久精品视频| 久久久久久久久久一区二区| 国产精品视区| 日韩久久久久久久久久久久| 视频在线不卡免费观看| 裸模一区二区三区免费| 超碰97久久国产精品牛牛| 91欧美精品午夜性色福利在线| 625成人欧美午夜电影| 久久99精品视频一区97| 黄色成年人视频在线观看| 国产亚洲精品综合一区91| 天堂av在线免费观看| 欧美大片免费久久精品三p | 精品午夜久久福利影院| www黄色在线| 一区二区三区精品视频在线观看| 超薄肉色丝袜足j调教99| 99久久99视频只有精品| 日韩妆和欧美的一区二区| 老牛精品亚洲成av人片| 国产91免费视频| 日韩一级淫片| 亚洲一区国产精品| 成人精品视频在线观看| 国产精品自产拍在线观看| 激情亚洲影院在线观看| 欧美专区第一页| 激情都市亚洲| 国产91色在线|免| 日韩性xxx| 国产精品福利在线观看网址| www.日韩| 国产精品99一区| 国精产品一区一区三区四川| 日本精品久久久| 手机看片久久| 国产精彩精品视频| 97成人超碰| 国产精品中文字幕在线观看| 日韩精品第二页| 91久久久久久久久久久| 香蕉大人久久国产成人av| 99九九视频| 1204国产成人精品视频| 国产日韩欧美一区二区三区四区| 国产精品极品| 久久视频在线观看中文字幕| 九色精品国产蝌蚪| 日本精品国语自产拍在线观看| 精品国产欧美日韩| 桥本有菜av在线| 黄色av一区| 九九九九免费视频| 丝袜a∨在线一区二区三区不卡| 激情五月婷婷久久| 精品在线你懂的| 欧美熟妇精品一区二区| av不卡在线播放| 免费看裸体网站| **性色生活片久久毛片| 欧美成人精品一区二区免费看片 | 久久久久久久9| 国产精品美女久久久| 久久午夜夜伦鲁鲁一区二区| 麻豆成人91精品二区三区| 亚洲一区二区图片| 92国产精品观看| 欧美成人短视频| 亚洲一二三区不卡| 欧美一级淫片免费视频黄| 欧美日韩不卡一区二区| 亚洲av无码国产精品永久一区 | 在线日韩中文| 能在线观看的av网站| 狠狠色丁香婷婷综合久久片| 亚洲一级Av无码毛片久久精品| 97se亚洲国产综合自在线观| 日本高清黄色片| 亚洲一区二区高清| 亚洲色成人www永久网站| 欧美一区二区福利视频| 日夜干在线视频| 久久久久999| 欧美性猛交xxx高清大费中文| 成人做爰www免费看视频网站| 国产一级成人av| 中文字幕人成一区| 国产精品五区| 国产精品91av| 国产精品丝袜一区| 日本免费观看视| 欧美精品第1页| 九色网友自拍视频手机在线| 久久亚洲精品国产亚洲老地址| 欧美激情护士| 97人人模人人爽人人喊38tv| 欧美精品系列| 成年人视频观看| 国产精品456露脸| 免费看的黄色录像| 婷婷成人综合网| 亚洲av无码乱码国产麻豆| 国产一区二区欧美日韩| 欧美激情网站| 国模精品一区二区三区| 自产国语精品视频| 亚洲视频第二页| 久久久综合网站| 国产主播在线观看| 91精品国产综合久久蜜臀 | 日本亚洲不卡| 菠萝蜜视频在线观看入口| 麻豆国产一区二区| 91精品国自产在线| 欧美天堂在线观看| 熟妇人妻av无码一区二区三区| 美乳少妇欧美精品| 小说区图片区亚洲| 亚洲v国产v在线观看| 欧美一级网站| 中文字幕xxx| 欧美日韩精品二区| 五月天婷婷在线观看| 久久久噜噜噜久久久| 日韩激情欧美| 91精品一区二区三区四区| 黄色精品一二区| 亚洲天堂网av在线| 欧美日韩mp4| 蜜桃视频在线观看www社区| 国产免费一区视频观看免费| 日韩国产一区二区| 日韩一区二区三区不卡视频| 国产欧美精品国产国产专区 | 欧美大片顶级少妇| 香蕉久久aⅴ一区二区三区| 114国产精品久久免费观看| 亚洲乱码在线| 日批视频在线看| 一区二区三区中文在线观看| www.爱爱.com| 久久久久久久久久久91| 久久久久影视| 精品久久久久久无码国产| 国产日韩影视精品| 亚洲熟女乱色一区二区三区久久久 | 岛国av一区二区在线在线观看| 深夜福利视频一区| 国产成人精品久久亚洲高清不卡| 精品国产乱码久久久久久果冻传媒| 日韩精品一区中文字幕| 国产精品乱码久久久久久 | 亚洲国产成人精品久久| 午夜av不卡| 日韩一区二区电影在线观看| 久久99精品久久久久婷婷| 污污的视频在线免费观看| 日韩三级高清在线| 欧美亚洲日本精品| 先锋影音网一区| 国产精品资源站在线| 日韩欧美高清在线观看| 亚洲欧美一区二区三区久久| 免费视频成人| 美女扒开大腿让男人桶| 久久精品亚洲精品国产欧美kt∨| 伊人精品在线视频| 久久99久久亚洲国产| 曰本一区二区三区视频| 尤物国产在线观看| 亚洲国产中文字幕在线视频综合 | 亚洲超碰在线观看| 噜噜噜久久亚洲精品国产品麻豆| 国产农村妇女精品| 亚洲精品97久久中文字幕无码| 4388成人网| 91精品久久久久久久蜜月| 奇米777第四色| 欧美久久婷婷综合色| 白浆在线视频| 天堂v在线视频| 2024国产精品| 国产同性人妖ts口直男| 欧洲s码亚洲m码精品一区| 午夜影院欧美| 免费观看av网站| 日韩精品一区二区三区四区| 日韩国产网站| 成人免费观看cn|