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

Spring 中的父子容器是咋回事?

開發 前端
Spring 容器中的父子容器現在大家應該明白了吧?可以給非 ListableBeanFactory 容器設置父容器,父容器不可以訪問子容器的 Bean,但是子容器可以訪問父容器的 Bean。

相信有小伙伴也聽說過,在 SSM 項目中,Spring 容器是父容器,SpringMVC 是子容器,子容器可以訪問父容器的 Bean,但是父容器不能訪問子容器的 Bean。

更近一步,有小伙伴可能也了解過,不用父子容器,單純就用一個 SpringMVC 容器似乎也可以,項目也能運行。

那么現在問題來了:既然單純一個 SpringMVC 容器就能使項目跑起來,那我們為什么還要用父子容器?父子容器的優勢是什么?

帶著這個問題,今天松哥來和小伙伴們聊一聊父子容器。

1. 父子容器

首先,其實父子這種設計很常見,松哥記得在之前的 Spring Security 的系列文章中,Spring Security 中的 AuthenticationManager 其實也是類似的設計,估計那里就是借鑒了 Spring 中的父子容器設計。

當使用了父子容器之后,如果去父容器中查找 Bean,那么就單純的在父容器中查找 Bean;如果是去子容器中查找 Bean,那么就會先在子容器中查找,找到了就返回,沒找到則繼續去父容器中查找,直到找到為止(把父容器都找完了還是沒有的話,那就只能拋異常出來了)。

2. 為什么需要父子容器

2.1 問題呈現

為什么需要父子容器?老老實實使用一個容器不行嗎?

既然 Spring 容器中有父子容器,那么這個玩意就必然有其使用場景。

松哥舉一個簡單的例子。

假設我有一個多模塊項目,其中有商家模塊和客戶模塊,商家模塊和客戶模塊中都有角色管理 RoleService,項目結構如下圖:

├── admin
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   └── resources
├── consumer
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── javaboy
│       │   │           └── consumer
│       │   │               └── RoleService.java
│       │   └── resources
│       │       └── consumer_beans.xml
├── merchant
│   ├── pom.xml
│   └── src
│       ├── main
│       │   ├── java
│       │   │   └── org
│       │   │       └── javaboy
│       │   │           └── merchant
│       │   │               └── RoleService.java
│       │   └── resources
│       │       └── merchant_beans.xml
└── pom.xml

現在 consumer 和 merchant 中都有一個 RoleService 類,然后在各自的配置文件中,都將該類注冊到 Spring 容器中。

org.javaboy.consumer.RoleService:

public class RoleService {
    public String hello() {
        return "hello consumer";
    }
}

org.javaboy.merchant.RoleService:

public class RoleService {
    public String hello() {
        return "hello merchant";
    }
}

consumer_beans.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.javaboy.consumer.RoleService" id="roleService"/>
</beans>

merchant_beans.xml 如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean class="org.javaboy.merchant.RoleService" id="roleService"/>
</beans>

大家注意,這兩個 Bean 同名。

現在,在 admin 模塊中,同時依賴 consumer 和 merchant,同時加載這兩個配置文件,那么能不能同時向 Spring 容器中注冊兩個來自不同模塊的同名 Bean 呢?

代碼如下:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext();
ctx.setConfigLocations("consumer_beans.xml", "merchant_beans.xml");
ctx.refresh();
org.javaboy.merchant.RoleService rs1 = ctx.getBean(org.javaboy.merchant.RoleService.class);
org.javaboy.consumer.RoleService rs2 = ctx.getBean(org.javaboy.consumer.RoleService.class);

這個執行之后會拋出如下問題:

圖片

小伙伴們看到,這個是找不到 org.javaboy.consumer.RoleService 服務,但是另外一個 RoleService 其實是找到了,因為默認情況下后面定義的同名 Bean 把前面的覆蓋了,所以有一個 Bean 就找不到了。

如果不允許 Bean 的覆蓋,那么可以進行如下配置:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext();
ctx.setConfigLocations("consumer_beans.xml", "merchant_beans.xml");
ctx.setAllowBeanDefinitionOverriding(false);
ctx.refresh();

此時一啟動就直接報錯了:

圖片圖片

意思也說的比較明確了,Bean 的定義沖突了,所以定義失敗。

那么有沒有辦法能夠優雅的解決上面這個問題呢?答案就是父子容器!

2.2 父子容器

對于上面的問題,我們可以將 consumer 和 merchant 配置成父子關系或者兄弟關系,就能很好的解決這個問題了。

2.2.1 兄弟關系

先來看兄弟關系,代碼如下:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext();
ClassPathXmlApplicationContext child1 = new ClassPathXmlApplicationContext("consumer_beans.xml");
ClassPathXmlApplicationContext child2 = new ClassPathXmlApplicationContext("merchant_beans.xml");
child1.setParent(ctx);
child2.setParent(ctx);
ctx.setAllowBeanDefinitionOverriding(false);
ctx.refresh();
org.javaboy.consumer.RoleService rs1 = child1.getBean(org.javaboy.consumer.RoleService.class);
org.javaboy.merchant.RoleService rs2 = child2.getBean(org.javaboy.merchant.RoleService.class);
System.out.println("rs1.hello() = " + rs1.hello());
System.out.println("rs2.hello() = " + rs2.hello());

小伙伴們看一下,這種針對 consumer 和 merchant 分別創建了容器,這種容器關系就是兄弟容器,這兩個兄弟有一個共同的 parent 就是 ctx,現在可以在各個容器中獲取到自己的 Bean 了。

需要注意的是,上面這種結構中,子容器可以獲取到 parent 的 Bean,但是無法獲取到兄弟容器的 Bean,即如果 consumer 中引用了 merchant 中的 Bean,那么上面這個配置就有問題了。

2.2.2 父子關系

現在假設用 consumer 做 parent 容器,merchant 做 child 容器,那么配置如下:

ClassPathXmlApplicationContext parent = new ClassPathXmlApplicationContext("consumer_beans.xml");
ClassPathXmlApplicationContext child = new ClassPathXmlApplicationContext("merchant_beans.xml");
child.setParent(parent);
child.refresh();
org.javaboy.consumer.RoleService rs1 = parent.getBean(org.javaboy.consumer.RoleService.class);
org.javaboy.merchant.RoleService rs2 = child.getBean(org.javaboy.merchant.RoleService.class);
org.javaboy.consumer.RoleService rs3 = child.getBean(org.javaboy.consumer.RoleService.class);
System.out.println("rs1.hello() = " + rs1.hello());
System.out.println("rs2.hello() = " + rs2.hello());
System.out.println("rs3.hello() = " + rs3.hello());

首先創建兩個容器,分別是 parent 和 child,然后為 child 容器設置 parent,設置完成后記得要刷新 child 容器。

現在我們就可以從 parent 容器中去獲取 parent 容器中原本就存在的 Bean,也可以從 child 容器中去獲取 child 容器原本的 Bean 或者是 parent 的 Bean 都可以。

這就是父子容器。

父容器和子容器本質上是相互隔離的兩個不同的容器,所以允許同名的 Bean 存在。當子容器調用 getBean 方法去獲取一個 Bean 的時候,如果當前容器沒找到,就會去父容器查找,一直往上找,找到為止。

核心就是 BeanFactory,這個松哥之前文章已經和小伙伴們介紹過了(BeanFactoryPostProcessor 和 BeanPostProcessor 有什么區別?),BeanFactory 有一個子類 HierarchicalBeanFactory,看名字就是帶有層級關系的 BeanFactory:

public interface HierarchicalBeanFactory extends BeanFactory {

 /**
  * Return the parent bean factory, or {@code null} if there is none.
  */
 @Nullable
 BeanFactory getParentBeanFactory();

 /**
  * Return whether the local bean factory contains a bean of the given name,
  * ignoring beans defined in ancestor contexts.
  * <p>This is an alternative to {@code containsBean}, ignoring a bean
  * of the given name from an ancestor bean factory.
  * @param name the name of the bean to query
  * @return whether a bean with the given name is defined in the local factory
  * @see BeanFactory#containsBean
  */
 boolean containsLocalBean(String name);

}

只要是 HierarchicalBeanFactory 的子類就能配置父子關系。父子關系圖如下:

圖片圖片

2.3 特殊情況

需要注意的是,并不是所有的獲取 Bean 的方法都支持父子關系查找,有的方法只能在當前容器中查找,并不會去父容器中查找:

ClassPathXmlApplicationContext parent = new ClassPathXmlApplicationContext("consumer_beans.xml");
ClassPathXmlApplicationContext child = new ClassPathXmlApplicationContext("merchant_beans.xml");
child.setParent(parent);
child.refresh();
String[] names1 = child.getBeanNamesForType(org.javaboy.merchant.RoleService.class);
String[] names2 = child.getBeanNamesForType(org.javaboy.consumer.RoleService.class);
System.out.println("names1 = " + Arrays.toString(names1));
System.out.println("names2 = " + Arrays.toString(names2));

如上,根據類型去查找 Bean 名稱的時候,我們所用的是 getBeanNamesForType 方法,這個方法是由 ListableBeanFactory 接口提供的,而該接口和 HierarchicalBeanFactory 接口并無繼承關系,所以 getBeanNamesForType 方法并不支持去父容器中查找 Bean,它只在當前容器中查找 Bean。

但是!如果你確實有需求,希望能夠根據類型查找 Bean 名稱,并且還能夠自動去父容器中查找,那么可以使用 Spring 給我們提供的工具類,如下:

ClassPathXmlApplicationContext parent = new ClassPathXmlApplicationContext("consumer_beans.xml");
ClassPathXmlApplicationContext child = new ClassPathXmlApplicationContext();
child.setParent(parent);
child.refresh();
String[] names = BeanFactoryUtils.beanNamesForTypeIncludingAncestors(child, org.javaboy.consumer.RoleService.class);
for (String name : names) {
    System.out.println("name = " + name);
}

不過這個查找,對于父子容器中同名的 Bean 是查找不出來名字的。

2.4 Spring 和 SpringMVC

上面的內容理解了,Spring 和 SpringMVC 之間的關系就好理解了,Spring 是父容器,SpringMVC 則是子容器。

在 SpringMVC 中,初始化 DispatcherServlet 的時候,會創建出 SpringMVC 容器,并且為 SpringMVC 容器設置 parent,相關代碼如下:

FrameworkServlet#initWebApplicationContext:

protected WebApplicationContext initWebApplicationContext() {
 WebApplicationContext rootContext =
   WebApplicationContextUtils.getWebApplicationContext(getServletContext());
 WebApplicationContext wac = null;
 if (this.webApplicationContext != null) {
  // A context instance was injected at construction time -> use it
  wac = this.webApplicationContext;
  if (wac instanceof ConfigurableWebApplicationContext cwac && !cwac.isActive()) {
   // The context has not yet been refreshed -> provide services such as
   // setting the parent context, setting the application context id, etc
   if (cwac.getParent() == null) {
    // The context instance was injected without an explicit parent -> set
    // the root application context (if any; may be null) as the parent
    cwac.setParent(rootContext);
   }
   configureAndRefreshWebApplicationContext(cwac);
  }
 }
 if (wac == null) {
  // No context instance was injected at construction time -> see if one
  // has been registered in the servlet context. If one exists, it is assumed
  // that the parent context (if any) has already been set and that the
  // user has performed any initialization such as setting the context id
  wac = findWebApplicationContext();
 }
 if (wac == null) {
  // No context instance is defined for this servlet -> create a local one
  wac = createWebApplicationContext(rootContext);
 }
 return wac;
}

這里的 rootContext 就是父容器,wac 就是子容器,無論哪種方式得到的子容器,都會嘗試給其設置一個父容器。

如果我們在一個 Web 項目中,不單獨配置 Spring 容器,直接配置 SpringMVC 容器,然后將所有的 Bean 全部都掃描到 SpringMVC 容器中,這樣做是沒有問題的,項目是可以正常運行的。但是一般項目中我們還是會把這兩個容器分開,分開有如下幾個好處:

  1. 方便管理,SpringMVC 主要處理控制層相關的 Bean,如 Controller、視圖解析器、參數處理器等等,而 Spring 層則主要控制業務層相關的 Bean,如 Service、Mapper、數據源、事務、權限等等相關的 Bean。
  2. 對于新手而言,兩個容器分開配置,可以更好的理解 Controller、Service 以及 Dao 層的關系,也可以避免寫出來在 Service 層注入 Controller 這種荒唐代碼。

另外再額外說一句,有的小伙伴可能會問,如果全部 Bean 都掃描到 Spring 容器中不用 SpringMVC 容器行不行?這其實也可以!但是需要一些額外的配置,這個松哥下篇文章再來和小伙伴們細述。

3. 小結

好啦,Spring 容器中的父子容器現在大家應該明白了吧?可以給非 ListableBeanFactory 容器設置父容器,父容器不可以訪問子容器的 Bean,但是子容器可以訪問父容器的 Bean。


責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-01-25 20:23:21

聯邦通信委員會聯邦航空管理局5G

2023-03-29 08:24:30

2021-01-19 05:48:11

QQ瀏覽器App

2022-02-06 00:02:43

Windows 11虛擬機微軟

2020-01-16 08:00:04

工具代碼開發

2021-06-04 11:10:04

JavaScript開發代碼

2021-04-24 08:17:25

比特幣區塊鏈加密貨幣

2021-04-26 10:13:04

顯卡硬盤加密

2023-10-12 08:54:20

Spring事務設置

2021-03-13 06:56:56

M1版SSDMacBook

2022-04-15 08:54:39

PythonAsync代碼

2021-07-31 19:21:34

Python下劃線數值

2021-07-11 06:36:10

Windows 10操作系統微軟

2025-08-12 05:00:00

2023-09-05 09:42:18

if分支源碼

2023-09-21 07:24:52

2020-02-18 11:19:36

物聯網病毒物聯網IOT

2022-06-23 10:47:57

Spring容器工具

2024-01-08 08:35:28

閉包陷阱ReactHooks

2022-02-16 20:04:08

容器KubernetesShim
點贊
收藏

51CTO技術棧公眾號

91午夜精品亚洲一区二区三区| 国产九九热视频| 色一情一乱一区二区三区| 9色精品在线| 国产亚洲精品美女久久久久| 久久6免费视频| 6699嫩草久久久精品影院| 91看片淫黄大片一级在线观看| 国产成人午夜视频网址| 国产一区二区播放| 精品精品国产三级a∨在线| 一本一本大道香蕉久在线精品| 亚洲欧洲久久| 日本毛片在线观看| 免费观看成人av| 97热精品视频官网| 在线观看天堂av| 中文字幕一区日韩精品| 欧洲精品在线观看| 日本福利视频一区| 最新中文字幕av| 一区二区三区| 欧美视频中文在线看| 在线视频一区观看| 日本福利午夜视频在线| 激情都市一区二区| 人体精品一二三区| 欧美日韩三级在线观看| 国产亚洲一区| 亚洲国产成人精品久久久国产成人一区| 欧美日韩在线免费播放| ****av在线网毛片| 亚洲免费大片在线观看| 亚洲国产成人不卡| 欧美一区二区少妇| 丁香婷婷综合激情五月色| 国产欧美日韩亚洲精品| 亚洲影院在线播放| 亚洲欧洲一区二区天堂久久| 久久夜色精品国产欧美乱| a级在线免费观看| 台湾佬综合网| 亚洲国产精品va在线| 日本亚洲一区二区三区| 一区在线不卡| 欧美另类videos死尸| 欧美三级理论片| 最新日韩精品| 欧美日韩综合视频网址| 免费国产黄色网址| 欧美特黄aaaaaa| 51vv免费精品视频一区二区| 欧美日韩一区三区| 精品中文字幕av| 中文字幕一区二区免费| 中文在线日韩| 日韩在线观看免费av| 色欲AV无码精品一区二区久久| 678在线观看视频| 91麻豆swag| 国产美女99p| 国产精品又粗又长| 欧美激情一区二区三区p站| 深夜福利影院在线观看| jlzzjizz在线播放观看| 中文字幕+乱码+中文乱码www | 亚洲人成电影网站| 欧美在线激情网| 人禽交欧美网站免费| 香蕉视频一区二区| 亚洲经典自拍| 97人人模人人爽人人喊中文字| 国产亚洲第一页| 亚洲人人精品| 欧美性受xxx| 成人黄色三级视频| 久草精品在线观看| 91精品国产91久久久久青草| 黄色三级网站在线观看| 91香蕉视频污在线| 亚洲成人一区二区三区| 久做在线视频免费观看| 久久精品国产一区二区三区免费看 | 欧美特黄一区| 97久久久久久| 伊人久久中文字幕| 国内精品第一页| 国产富婆一区二区三区| 久草视频在线看| 国产欧美日韩另类一区| 91免费视频黄| 国产欧洲在线| 欧美视频一区二区三区在线观看| 国产毛片久久久久久| 久9re热视频这里只有精品| 亚洲日韩欧美视频| 欧美三级免费看| 小嫩嫩精品导航| 成人欧美一区二区三区黑人孕妇| 懂色av成人一区二区三区| 91免费观看视频| 中文字幕中文字幕99 | 成人久久一区| 欧美日本亚洲视频| 无码人妻丰满熟妇奶水区码| 国产久卡久卡久卡久卡视频精品| 精品日韩美女| 国产一二区在线观看| 欧美色视频日本高清在线观看| 手机免费看av网站| 日韩有码av| 成年人精品视频| 人人爽人人爽人人片av| 国产成人av资源| 亚洲成人自拍| 永久免费毛片在线播放| 日韩一级二级三级精品视频| 亚洲图片另类小说| 尤物网精品视频| 国产日产亚洲精品| 深夜福利视频一区| 一区二区三区高清| 一级黄色特级片| 久久不见久久见国语| 久久久久国产一区二区三区| 91国产免费视频| 久久精品男人的天堂| 日韩伦理在线免费观看| 日韩成人在线看| 中文字幕日韩欧美精品在线观看| 国产情侣自拍av| 懂色av一区二区三区免费看| 亚洲最新免费视频| 色豆豆成人网| 亚洲美女在线观看| 91蜜桃视频在线观看| 国产高清在线观看免费不卡| 在线看无码的免费网站| 亚洲综合av一区二区三区| 日韩不卡中文字幕| 精品无码久久久久| 国产福利一区在线| 欧美h视频在线观看| 日本美女久久| 伊人激情综合网| 亚洲天堂男人av| 久久综合色鬼综合色| 亚洲熟妇av日韩熟妇在线| 三级欧美日韩| 欧美人与性动交| 亚洲精品福利网站| 亚洲图片一区二区| wwwxx日本| 亚洲成人中文| 精品国产乱码久久久久久88av| 欧美xxxx少妇| 亚洲第一在线视频| 国产成人无码精品| 91视频免费观看| 日韩毛片在线免费看| 国产精品亚洲二区| 国产精品爽黄69| 中文字幕 国产| 欧美激情在线免费观看| 爱爱爱爱免费视频| 亚洲国产精品久久久久蝴蝶传媒| 91亚洲精华国产精华| 亚洲丝袜一区| 亚洲国产成人91精品| 国产精品国产三级国产专区52| 久久人人超碰精品| 婷婷六月天在线| 91精品一区二区三区综合| 国产欧美精品一区二区| av片在线观看永久免费| 欧美va亚洲va在线观看蝴蝶网| 国产无遮挡又黄又爽又色| 久久综合资源网| 日本一二区免费| 激情综合在线| 青青草原成人| 在线高清欧美| 国内精品久久久久| 免费在线国产| 在线播放中文一区| 日干夜干天天干| 欧美国产日产图区| japan高清日本乱xxxxx| 99视频在线精品国自产拍免费观看| 欧美日韩成人一区二区三区| 久久久久黄色| 欧美精品久久久久久久久久| 国外av在线| 日韩欧美一级二级三级久久久| 日本一区二区免费电影| 国产精品视频观看| 高清中文字幕mv的电影| 日本欧美在线看| 99久久免费观看| 国内成人精品| 99爱精品视频| 成人a在线观看高清电影| 欧美日韩国产123| 成人影视在线播放| 精品国产三级电影在线观看| 精品乱码一区内射人妻无码| 亚洲成人动漫精品| 国产麻豆视频在线观看| 久久亚洲二区三区| 欧美性猛交乱大交| 免费观看在线综合| 青青草视频在线免费播放 | 成人免费av网站| 污片在线免费看| 国产欧美精品久久| 国产盗摄视频在线观看| 欧美精品色图| 久久久一本精品99久久精品66| 精品国产亚洲一区二区三区| 国产精品老女人精品视频| 麻豆视频在线观看免费网站黄| 久久视频这里只有精品| 国产粉嫩一区二区三区在线观看| 精品久久国产老人久久综合| 国产精品欧美综合亚洲| 欧美性色欧美a在线播放| 中国一级免费毛片| 一区二区高清在线| 国产成人av免费在线观看| 国产欧美一区二区三区沐欲| 黄色正能量网站| 成人av免费在线播放| 国产性猛交96| 国产主播一区二区| 亚洲第一成肉网| 久久超碰97中文字幕| 日韩肉感妇bbwbbwbbw| 媚黑女一区二区| 九九九九免费视频| 亚洲视频1区| 2018国产在线| 亚洲看片免费| 国内精品视频一区二区三区| 狠狠爱成人网| 国产高清av在线播放| 在线欧美日韩| 久久久999视频| 国产欧美丝祙| 成人毛片一区二区| 亚洲欧美网站| 女人另类性混交zo| 日韩主播视频在线| 一区二区成人网| 蜜臀av一区二区| 国产美女18xxxx免费视频| 久久99精品国产.久久久久久| 久久人人爽av| 国产又黄又大久久| 国产chinesehd精品露脸| 国产精品99久| 小毛片在线观看| eeuss鲁片一区二区三区在线观看| 亚洲精品乱码久久久久久蜜桃图片| 成人av网站在线| 在线观看福利片| 中文字幕 久热精品 视频在线| 99久久久无码国产精品不卡| 亚洲男女毛片无遮挡| 久草视频免费在线| 黄色成人av在线| 一级片久久久久| 国产精品福利影院| 欧美日韩亚洲国产另类| 五月婷婷欧美视频| 精品黑人一区二区三区| 欧美日韩国产精品自在自线| a毛片在线免费观看| 精品三级av在线| 女人天堂在线| 色偷偷综合社区| 欧美人与性动交α欧美精品济南到| 97精品伊人久久久大香线蕉| 香蕉成人av| 亚洲free性xxxx护士白浆| 欧美电影在线观看免费| 翔田千里亚洲一二三区| 欧美激情一区| 免费黄色特级片| 精品一区二区综合| 亚洲av成人精品一区二区三区| 国产清纯在线一区二区www| 一区二区国产精品精华液| 婷婷六月综合亚洲| 亚洲午夜激情视频| 精品成人佐山爱一区二区| 天堂av在线免费观看| 久久久成人精品视频| 松下纱荣子在线观看| 成人中心免费视频| 要久久电视剧全集免费| 一区二区三区四区久久| 国产视频一区免费看| 手机版av在线| 91毛片在线观看| 91九色丨porny丨极品女神| 亚洲国产成人av| 在线免费av片| 日韩精品在线免费观看| 国产成人在线视频免费观看| 国产91av在线| 亚洲视频国产精品| 五月天久久综合网| 亚洲综合精品四区| 日本wwwwwww| 亚洲天堂精品视频| 久久久久久久久久一级| 亚洲第一精品福利| 欧美精品hd| 国产91色在线免费| 岛国精品一区| 法国空姐在线观看免费| 免费观看在线综合| 三年中国中文观看免费播放| 亚洲成av人片一区二区三区| www.色视频| 久久艳片www.17c.com| 福利一区二区免费视频| 欧美一区亚洲二区| 国产日韩欧美三级| 日本在线视频播放| 中文字幕制服丝袜成人av| 久久久黄色大片| 亚洲精品一区二区三区不| 日本精品600av| 亚洲尤物视频网| 香蕉综合视频| 污污的视频免费观看| 国产精品九色蝌蚪自拍| 一区二区www| 中文字幕亚洲综合久久| 欧洲av一区二区| 日本视频一区二区不卡| 视频一区二区中文字幕| 精品久久久久久中文字幕人妻最新| 亚洲成人av电影在线| 免费av一级片| 欧美高清在线观看| 成人看片爽爽爽| 日韩欧美国产综合在线| 成人成人成人在线视频| 日韩伦人妻无码| 日韩精品999| 色偷偷偷在线视频播放| 精品欧美一区二区久久久伦| 麻豆成人在线| av电影网站在线观看| 欧美日韩高清一区二区| 日韩在线免费电影| 92国产精品久久久久首页 | 伊人www22综合色| 欧洲精品在线播放| eeuss鲁片一区二区三区在线观看| 日韩在线视频免费播放| 亚洲视频一区二区| 欧美成人免费全部网站| 麻豆一区二区三区在线观看| 国产成人精品免费在线| 久久精品性爱视频| 精品亚洲精品福利线在观看| 456成人影院在线观看| 中文字幕中文字幕99| 成人一区在线观看| 中文字幕激情小说| 中文字幕久久亚洲| 日韩欧美中文字幕在线视频| 成年人网站免费视频| 久久色.com| 一区二区精品视频在线观看| 久久国产精品首页| 色橹橹欧美在线观看视频高清 | 国精品产品一区| 伊人久久在线观看| 99精品黄色片免费大全| 国产三级av片| 日韩在线观看av| a级日韩大片| 日韩一级在线免费观看| 中文字幕在线观看一区| 色wwwwww| 国产拍精品一二三| 9色精品在线| 97精品在线播放| 日韩av资源在线播放| 日韩亚洲国产免费| 日韩欧美国产综合在线| 18涩涩午夜精品.www| 亚州av在线播放| 91日韩在线播放| 首页亚洲欧美制服丝腿| 久久精品一区二区三|