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

高頻面試:Spring 如何解決循環依賴?

開發 前端
1. 在第一層中,先去獲取 A 的 Bean,發現沒有就準備去創建一個,然后將 A 的代理工廠放入“三級緩存”(這個 A 其實是一個半成品,還沒有對里面的屬性進行注入),但是 A 依賴 B 的創建,就必須先去創建 B。

Spring 如何解決循環依賴,網上的資料很多,但是感覺寫得好的極少,特別是源碼解讀方面,我就自己單獨出一篇,這篇文章絕對肝!

不 BB,上文章目錄。

圖片圖片

1. 基礎知識

1.1 什么是循環依賴 ?

一個或多個對象之間存在直接或間接的依賴關系,這種依賴關系構成一個環形調用,有下面 3 種方式。

圖片圖片

我們看一個簡單的 Demo,對標“情況 2”。

@Service
public class Louzai1 {

    @Autowired
    private Louzai2 louzai2;

    public void test1() {
    }
}

@Service
public class Louzai2 {
    @Autowired
    private Louzai1 louzai1;

    public void test2() {
    }
}

這是一個經典的循環依賴,它能正常運行,后面我們會通過源碼的角度,解讀整體的執行流程。

1.2 三級緩存

解讀源碼流程之前,spring 內部的三級緩存邏輯必須了解,要不然后面看代碼會蒙圈。

  • 第一級緩存:singletonObjects,用于保存實例化、注入、初始化完成的 bean 實例;
  • 第二級緩存:earlySingletonObjects,用于保存實例化完成的 bean 實例;
  • 第三級緩存:singletonFactories,用于保存 bean 創建工廠,以便后面有機會創建代理對象。

這是最核心,我們直接上源碼:

圖片圖片

執行邏輯:

  • 先從“第一級緩存”找對象,有就返回,沒有就找“二級緩存”;
  • 找“二級緩存”,有就返回,沒有就找“三級緩存”;
  • 找“三級緩存”,找到了,就獲取對象,放到“二級緩存”,從“三級緩存”移除。

1.3 原理執行流程

我把“情況 2”執行的流程分解為下面 3 步,是不是和“套娃”很像 ?

圖片圖片

整個執行邏輯如下:

  1. 在第一層中,先去獲取 A 的 Bean,發現沒有就準備去創建一個,然后將 A 的代理工廠放入“三級緩存”(這個 A 其實是一個半成品,還沒有對里面的屬性進行注入),但是 A 依賴 B 的創建,就必須先去創建 B;
  2. 在第二層中,準備創建 B,發現 B 又依賴 A,需要先去創建 A;
  3. 在第三層中,去創建 A,因為第一層已經創建了 A 的代理工廠,直接從“三級緩存”中拿到 A 的代理工廠,獲取 A 的代理對象,放入“二級緩存”,并清除“三級緩存”;
  4. 回到第二層,現在有了 A 的代理對象,對 A 的依賴完美解決(這里的 A 仍然是個半成品),B 初始化成功;
  5. 回到第一層,現在 B 初始化成功,完成 A 對象的屬性注入,然后再填充 A 的其它屬性,以及 A 的其它步驟(包括 AOP),完成對 A 完整的初始化功能(這里的 A 才是完整的 Bean)。
  6. 將 A 放入“一級緩存”。

為什么要用 3 級緩存 ?我們先看源碼執行流程,后面我會給出答案。

2. 源碼解讀

注意:Spring 的版本是 5.2.15.RELEASE,否則和我的代碼不一樣!!!

上面的知識,網上其實都有,下面才是我們的重頭戲,讓你跟著樓仔,走一遍代碼流程。

2.1 代碼入口

圖片圖片

圖片圖片

這里需要多跑幾次,把前面的 beanName 跳過去,只看 louzai1。

圖片圖片

圖片圖片

2.2 第一層

圖片圖片

進入 doGetBean(),從 getSingleton() 沒有找到對象,進入創建 Bean 的邏輯。

圖片圖片

圖片圖片

進入 doCreateBean() 后,調用 addSingletonFactory()。

圖片圖片

往三級緩存 singletonFactories 塞入 louzai1 的工廠對象。

圖片圖片

圖片圖片

進入到 populateBean(),執行 postProcessProperties(),這里是一個策略模式,找到下圖的策略對象。

圖片圖片

正式進入該策略對應的方法。

圖片圖片

下面都是為了獲取 louzai1 的成員對象,然后進行注入。

圖片圖片

圖片圖片

圖片圖片

圖片圖片

進入 doResolveDependency(),找到 louzai1 依賴的對象名 louzai2

圖片圖片

需要獲取 louzai2 的 bean,是 AbstractBeanFactory 的方法。

圖片圖片

正式獲取 louzai2 的 bean。

圖片圖片

到這里,第一層套娃基本結束,因為 louzai1 依賴 louzai2,下面我們進入第二層套娃。

2.3 第二層

圖片圖片

獲取 louzai2 的 bean,從 doGetBean(),到 doResolveDependency(),和第一層的邏輯完全一樣,找到 louzai2 依賴的對象名 louzai1。

前面的流程全部省略,直接到 doResolveDependency()。

圖片圖片

正式獲取 louzai1 的 bean。

圖片圖片

到這里,第二層套娃結束,因為 louzai2 依賴 louzai1,所以我們進入第三層套娃。

2.4 第三層

圖片圖片

獲取 louzai1 的 bean,在第一層和第二層中,我們每次都會從 getSingleton() 獲取對象,但是由于之前沒有初始化 louzai1 和 louzai2 的三級緩存,所以獲取對象為空。

圖片圖片

圖片

敲重點!敲重點!!敲重點!!!

到了第三層,由于第三級緩存有 louzai1 數據,這里使用三級緩存中的工廠,為 louzai1 創建一個代理對象,塞入二級緩存。

圖片圖片

這里就拿到了 louzai1 的代理對象,解決了 louzai2 的依賴關系,返回到第二層。

2.5 返回第二層

返回第二層后,louzai2 初始化結束,這里就結束了么?二級緩存的數據,啥時候會給到一級呢?

甭著急,看這里,還記得在 doGetBean() 中,我們會通過 createBean() 創建一個 louzai2 的 bean,當 louzai2 的 bean 創建成功后,我們會執行 getSingleton(),它會對 louzai2 的結果進行處理。

圖片圖片

我們進入 getSingleton(),會看到下面這個方法。

圖片圖片

這里就是處理 louzai2 的 一、二級緩存的邏輯,將二級緩存清除,放入一級緩存。

圖片圖片

2.6 返回第一層

同 2.5,louzai1 初始化完畢后,會把 louzai1 的二級緩存清除,將對象放入一級緩存。

圖片圖片

到這里,所有的流程結束,我們返回 louzai1 對象。

3. 原理深度解讀

3.1 什么要有 3 級緩存 ?

這是一道非常經典的面試題,前面已經告訴大家詳細的執行流程,包括源碼解讀,但是沒有告訴大家為什么要用 3 級緩存?

這里是重點!敲黑板!!!

我們先說“一級緩存”的作用,變量命名為 singletonObjects,結構是 Map<String, Object>,它就是一個單例池,將初始化好的對象放到里面,給其它線程使用,如果沒有第一級緩存,程序不能保證 Spring 的單例屬性。

“二級緩存”先放放,我們直接看“三級緩存”的作用,變量命名為 singletonFactories,結構是 Map<String, ObjectFactory<?>>,Map 的 Value 是一個對象的代理工廠,所以“三級緩存”的作用,其實就是用來存放對象的代理工廠。

那這個對象的代理工廠有什么作用呢,我先給出答案,它的主要作用是存放半成品的單例 Bean,目的是為了“打破循環”,可能大家還是不太懂,這里我再稍微解釋一下。

我們回到文章開頭的例子,創建 A 對象時,會把實例化的 A 對象存入“三級緩存”,這個 A 其實是個半成品,因為沒有完成依賴屬性 B 的注入,所以后面當初始化 B 時,B 又要去找 A,這時就需要從“三級緩存”中拿到這個半成品的 A(這里描述,其實也不完全準確,因為不是直接拿,為了讓大家好理解,我就先這樣描述),打破循環。

那我再問一個問題,為什么“三級緩存”不直接存半成品的 A,而是要存一個代理工廠呢 ?答案是因為 AOP。

在解釋這個問題前,我們看一下這個代理工廠的源碼,讓大家有一個更清晰的認識。

直接找到創建 A 對象時,把實例化的 A 對象存入“三級緩存”的代碼,直接用前面的兩幅截圖。

圖片圖片

圖片圖片

下面我們主要看這個對象工廠是如何得到的,進入 getEarlyBeanReference() 方法。

圖片圖片

圖片圖片

圖片

圖片圖片

最后一幅圖太重要了,我們知道這個對象工廠的作用:

  • 如果 A 有 AOP,就創建一個代理對象;
  • 如果 A 沒有 AOP,就返回原對象。

那“二級緩存”的作用就清楚了,就是用來存放對象工廠生成的對象,這個對象可能是原對象,也可能是個代理對象。

我再問一個問題,為什么要這樣設計呢?把二級緩存干掉不行么 ?我們繼續往下看。

3.2 能干掉第 2 級緩存么 ?

@Service
public class A {

    @Autowired
    private B b;

    @Autowired
    private C c;

    public void test1() {
    }
}

@Service
public class B {
    @Autowired
    private A a;

    public void test2() {
    }
}

@Service
public class C {

    @Autowired
    private A a;

    public void test3() {
    }
}

根據上面的套娃邏輯,A 需要找 B 和 C,但是 B 需要找 A,C 也需要找 A。

假如 A 需要進行 AOP,因為代理對象每次都是生成不同的對象,如果干掉第二級緩存,只有第一、三級緩存:

  • B 找到 A 時,直接通過三級緩存的工廠的代理對象,生成對象 A1。
  • C 找到 A 時,直接通過三級緩存的工廠的代理對象,生成對象 A2。

看到問題沒?你通過 A 的工廠的代理對象,生成了兩個不同的對象 A1 和 A2,所以為了避免這種問題的出現,我們搞個二級緩存,把 A1 存下來,下次再獲取時,直接從二級緩存獲取,無需再生成新的代理對象。

所以“二級緩存”的目的是為了避免因為 AOP 創建多個對象,其中存儲的是半成品的 AOP 的單例 bean。

如果沒有 AOP 的話,我們其實只要 1、3 級緩存,就可以滿足要求。

4. 寫在最后

我們再回顧一下 3 級緩存的作用:

  • 一級緩存:為“Spring 的單例屬性”而生,就是個單例池,用來存放已經初始化完成的單例 Bean;
  • 二級緩存:為“解決 AOP”而生,存放的是半成品的 AOP 的單例 Bean;
  • 三級緩存:為“打破循環”而生,存放的是生成半成品單例 Bean 的工廠方法。

如果你能理解上面我說的三條,恭喜你,你對 Spring 的循環依賴理解得非常透徹!

關于循環依賴的知識,其實還有,因為篇幅原因,我就不再寫了,這篇文章的重點,一方面是告訴大家循環依賴的核心原理,另一方面是讓大家自己去 debug 代碼,跑跑流程,挺有意思的。

可能有同學會問 “樓哥,你之前是不是經常看源碼,然后這個流程,你是不是 debug 了很久?”

我之前其實沒怎么看過開源代碼,這個流程,前期理論知識看了 2.5 個小時,然后 debug 4.5 小時,就基本全部走通了,最難的地方,就是三層套娃,稍微有些繞。

這里也簡單說一下我看源碼的心得:

  1. 需要掌握基本的設計模式;
  2. 看源碼前,最好能找一些理論知識先看看;
  3. 學會讀英文注釋,不會的話就百度翻譯;
  4. debug 時,要克制自己,不要陷入無用的細節,這個最重要。

其中最難的是第 4 步,因為很多同學看 Spring 源碼,每看一個方法,就想多研究研究,這樣很容易被繞進去了,這個要學會克制,有大局觀,并能分辨哪里是核心邏輯,至于如何分辨,可以在網上先找些資料,如果沒有的話,就只能多看代碼了。

責任編輯:武曉燕 來源: 樓仔
相關推薦

2019-11-26 14:30:20

Spring循環依賴Java

2022-08-17 07:52:31

Spring循環依賴單例池

2020-12-29 08:34:08

spring循環依賴開發

2023-11-28 08:00:00

SpringJava

2020-06-22 08:07:48

Spring依賴場景

2020-11-27 06:28:55

Spring循環依賴

2023-10-11 12:35:29

Maven

2010-03-11 14:15:24

Python循環

2023-12-12 17:44:13

三級緩存Bean

2023-08-09 10:43:21

源碼循環依賴getBean

2020-02-10 15:50:18

Spring循環依賴Java

2021-01-29 14:14:47

動態代理緩存

2023-09-26 07:49:11

AOP代理spring

2023-05-04 08:06:27

Spring循環依賴

2021-04-01 08:05:01

React無限循環useEffect()

2024-04-12 07:51:05

SpringBean初始化

2022-07-26 09:03:50

冪等性數據狀態機

2024-04-23 08:46:45

消息積壓KafkaMQ

2025-03-17 00:21:00

2022-09-07 07:05:25

跨域問題安全架構
點贊
收藏

51CTO技術棧公眾號

欧美人禽zoz0强交| 在线观看免费成人av| 亚洲精品视频网| 亚洲人成毛片在线播放女女| 亚洲无限av看| 想看黄色一级片| 免费h视频在线观看| 国产精品久久久久久久裸模| julia一区二区中文久久94| 91国产丝袜播放在线| 欧美天天综合| 亚洲国产成人精品一区二区| 一区二区三区国产免费| 青春草在线视频| 国产婷婷色一区二区三区在线| 亚洲tv在线观看| 亚洲视频 欧美视频| 欧美日韩三级| 最近2019免费中文字幕视频三| 伊人av在线播放| 88xx成人网| 岛国av午夜精品| 日韩中文在线字幕| 国产尤物视频在线| 99这里都是精品| 91视频免费在线| 一级特黄免费视频| 亚洲激情网站| 欧美日韩国产va另类| 卡一卡二卡三在线观看| 国产区精品视频在线观看豆花| 欧美日韩国产影片| 成年人免费大片| 国产高潮在线| 亚洲综合色自拍一区| 亚洲欧美日韩不卡一区二区三区| 深夜福利视频一区| 国产99久久久久| 91网站在线免费观看| 中文字幕日韩国产| 欧美中文字幕| 欧洲午夜精品久久久| 伊人国产在线观看| 狠狠干成人综合网| 欧美成人全部免费| 你懂得在线观看| 久久人人99| 国产亚洲精品一区二区| 人妻av无码一区二区三区| 蜜臀av免费一区二区三区| 日韩精品视频在线播放| 五月天激情小说| 高潮久久久久久久久久久久久久| 日韩午夜激情视频| 天天操夜夜操很很操| 国产精品久久久久久久久久久久久久久 | 欧美日韩国产三级| 久久这里只精品| 亚洲a∨精品一区二区三区导航| 欧美性猛xxx| 凹凸国产熟女精品视频| 亚洲精品中文字幕| 91福利在线看| 自拍偷拍一区二区三区四区| 色诱色偷偷久久综合| 欧美久久一区二区| 91人妻一区二区三区| 亚洲精品国产九九九| 欧美va亚洲va| 精品国产人妻一区二区三区| 日韩一级电影| 亚洲三级av在线| 黑人と日本人の交わりビデオ| 欧美电影一二区| 欧美成人午夜激情视频| 久久久99精品| 日韩视频一区| 国产精品va在线播放| 一本色道久久综合无码人妻| 国产麻豆91精品| 精品久久久久久亚洲| 精品视频三区| 亚洲三级在线看| 日韩人妻一区二区三区蜜桃视频| heyzo高清中文字幕在线| 日韩欧美福利视频| 亚洲天堂网2018| 91久久偷偷做嫩草影院电| 日韩精品视频在线播放| 日本美女黄色一级片| 亚洲激情偷拍| 国产精品亚洲第一区| www.国产欧美| 国产亚洲精品7777| 男人天堂新网址| 激情开心成人网| 欧美一区二区视频在线观看2020 | 欧美精品卡一卡二| 91看片一区| 日韩亚洲欧美综合| 欧美18—19性高清hd4k| 午夜国产欧美理论在线播放| 日本国产精品视频| www.日韩在线观看| 国产亚洲精品精华液| 日韩美女爱爱视频| 欧美亚洲二区| 亚洲欧美日韩第一区| 国产suv一区二区三区| 三级影片在线观看欧美日韩一区二区| 91网站在线免费观看| 国产香蕉在线| 亚洲国产精品久久久久秋霞影院| 久久久久久久久久久久91| 国内精品国产成人国产三级粉色| 中文国产成人精品| 久久久久久久久影院| 国产黄色精品视频| 亚洲一区综合| 久久青青视频| 精品国产成人系列| 极品盗摄国产盗摄合集| 日韩成人dvd| 久久国产主播精品| 蜜臀av在线播放| 在线播放视频一区| 精品人妻一区二区三区蜜桃视频| 亚洲三级电影在线观看| 91视频国产高清| 日本中文字幕在线看| 欧美午夜精品在线| yy6080午夜| 国产精品a级| 亚洲一区二区三区xxx视频| 阿v免费在线观看| 一道本成人在线| 免费的av网站| 亚洲国产高清一区| 成人区精品一区二区| 操你啦视频在线| 91麻豆精品国产91久久久使用方法 | 久久精品一本久久99精品| 中文字幕理论片| 国产三级一区二区| 国产一级特黄a大片免费| 国产欧美日韩在线观看视频| 国产91精品不卡视频| 天天摸夜夜添狠狠添婷婷 | 久久精品视频7| 不卡视频一二三| xxxx18hd亚洲hd捆绑| 成人爽a毛片| 国语自产精品视频在线看一大j8| 亚洲精品视频专区| 五月天一区二区| 国模私拍在线观看| 国产日本精品| 欧美成人第一区| 深夜视频一区二区| 色妞色视频一区二区三区四区| 中文字幕日产av| 亚洲欧美日韩人成在线播放| 三级黄色片免费观看| 欧美午夜一区二区福利视频| 国产一区二区三区高清视频| 黄在线观看免费网站ktv| 精品一区二区三区电影| 亚洲国产成人精品女人久久| 国产欧美日韩视频在线观看| 国产精品视频中文字幕| 欧美成人日韩| 粉嫩av一区二区三区免费观看| 久久青青色综合| 日韩精品免费在线播放| 一区二区三区在线免费观看视频| 国产精品妹子av| 中文字幕第10页| 亚洲精品少妇| 午夜免费电影一区在线观看| 亚洲午夜剧场| 97精品国产97久久久久久免费| 欧美视频综合| 在线电影欧美成精品| 国产一级在线观看视频| 久久久久久久电影| 欧洲在线免费视频| 国产欧美亚洲一区| 亚洲欧美日韩精品久久久 | 美女一区视频| 日本午夜精品久久久久| 高清一区二区三区日本久| 男同在线观看| 日韩一区二区视频| 日日摸天天添天天添破| 亚洲视频小说图片| 亚洲综合自拍网| 老司机免费视频一区二区三区| 欧美在线观看视频免费| 奇米亚洲欧美| 电影午夜精品一区二区三区| 欧美日韩视频免费观看| 久久久久国产视频| 尤物在线视频| 日韩精品在线观看一区| 国产免费黄色录像| 色婷婷av一区二区三区软件 | 天天操天天综合网| 疯狂撞击丝袜人妻| 久久久99精品久久| 97精品人人妻人人| 极品少妇一区二区| 久久国产色av免费观看| 影音先锋国产精品| 中文字幕制服丝袜在线| 精品国产精品国产偷麻豆| 成人午夜电影免费在线观看| 成人激情久久| 国产精品永久免费在线| 午夜精品成人av| 91av在线影院| 免费不卡av| 美女啪啪无遮挡免费久久网站| 国产色a在线| 亚洲激情小视频| 国产激情视频在线播放 | 午夜精品视频在线| 超碰在线免费公开| 色一情一乱一区二区| 国产最新视频在线观看| 日韩精品一区二区视频| 人妻少妇精品无码专区久久| 日韩一区二区三区视频在线观看| 一卡二卡在线视频| 欧美性猛片xxxx免费看久爱| 香蕉影院在线观看| 欧美午夜精品久久久久久浪潮 | 亚洲国产黄色| 美女av免费观看| 午夜激情久久| 中文字幕在线亚洲精品| 第四色成人网| 日韩aⅴ视频一区二区三区| 一区二区小说| 日本不卡一二三区| 国内精品久久久久久久久电影网| 精品在线视频一区二区| 香蕉久久精品| 乱一区二区三区在线播放| 亚洲第一福利社区| 欧美不卡三区| 欧美理论在线播放| 亚洲一区二区三区乱码| 久久大综合网| 午夜探花在线观看| 综合激情视频| 亚洲国产精品无码av| 一本一本久久| 男女av免费观看| 日本aⅴ亚洲精品中文乱码| 最近中文字幕一区二区| 精品一区二区三区在线视频| 国产在线视频三区| 成人动漫一区二区三区| 亚洲黄色在线网站| 国产欧美视频一区二区| 天天色天天综合| 亚洲自拍偷拍欧美| 99精品视频99| 在线观看日韩精品| 在线免费观看视频网站| 欧美一区二区在线视频| 亚洲第一页综合| 日韩乱码在线视频| 五月天婷婷在线视频| 欧美噜噜久久久xxx| 色多多在线观看| 日韩免费观看高清| 中文字幕综合| 激情伦成人综合小说| 成人激情免费视频| 国产精品igao激情视频| 亚洲综合欧美| 老司机久久精品| av亚洲精华国产精华| 色欲狠狠躁天天躁无码中文字幕| 亚洲欧美激情视频在线观看一区二区三区 | 最新亚洲精品| 永久免费精品视频网站| 99精品视频免费全部在线| 国产一级特黄a大片免费| 丁香六月综合激情| 男人的天堂av网| 一级做a爱片久久| 美女又爽又黄免费视频| 欧美一区二区三区视频| 久久电影中文字幕| 欧美人与性动交| 日本成人福利| 国产精品一区二区av| 成人在线免费视频观看| 国内精品在线观看视频| 久久精品国产精品亚洲精品| yy6080午夜| 亚洲猫色日本管| 日日骚av一区二区| 日韩欧美第一区| 亚洲免费视频一区二区三区| 97久久久久久| 日韩精品视频在线看| 青娱乐一区二区| 在线 亚洲欧美在线综合一区| www.久久av.com| 国产日韩精品一区| 制服.丝袜.亚洲.中文.综合懂色| 在线播放91灌醉迷j高跟美女| www.亚洲视频| 91精品国产乱码久久久久久蜜臀 | 日韩在线观看一区二区| 精人妻一区二区三区| 国产精品久久久久久久久久久免费看| 国产精品自拍99| 精品久久人人做人人爰| 国产美女在线观看| 国产精品女人网站| 精品国产中文字幕第一页| 亚洲视频在线观看免费| 黄色一级片免费看| 日韩免费高清视频| 久草免费在线| 成人免费直播live| 色天天久久综合婷婷女18| 久久精品免费网站| 久久久亚洲精品一区二区三区| 国产成人无码一区二区三区在线| 欧美一级二级在线观看| 高潮毛片在线观看| 成人黄色片网站| 我不卡手机影院| 91丨九色丨蝌蚪| 一区免费观看视频| 中文字幕二区三区| 日韩中文字幕在线精品| 成人全视频免费观看在线看| 亚洲成色www久久网站| 欧美a级一区二区| xxx在线播放| 91国偷自产一区二区三区观看| 日本福利在线观看| 欧美综合第一页| 国产乱码精品一区二区亚洲| 日韩av在线综合| 国产亚洲一区二区三区四区| 久久精品视频2| 国产香蕉一区二区三区在线视频| 高清成人在线| 亚洲图片在线观看| 狠狠色狠狠色综合系列| 欧美黄色免费在线观看| 亚洲成人久久电影| 成人勉费视频| 亚洲人成人77777线观看| 久久成人18免费观看| 精品无码一区二区三区蜜臀| 欧美一区二区三区色| 好看的中文字幕在线播放| 久久精品国产理论片免费| 日韩精品免费专区| 亚洲精品一区二区三区在线播放| 91精品国产91久久久久久最新毛片| 亚洲大胆人体大胆做受1| 国产精品免费一区二区三区| 久久精品国语| 91狠狠综合久久久| 亚洲精品一区二区三区影院 | 日韩偷拍自拍| 国产精品久久久久久网站| 88国产精品视频一区二区三区| 超碰人人cao| 欧美日韩国产专区| 成人亚洲性情网站www在线观看| 成人在线一区二区| 在线看片一区| 成人在线手机视频| 日韩美一区二区三区| 中文字幕在线直播| 综合色婷婷一区二区亚洲欧美国产| 国产aⅴ综合色| 日本丰满少妇做爰爽爽| 欧美日韩成人在线视频| 国产日产精品_国产精品毛片| 91热视频在线观看| 欧美性猛交xxxx久久久| 在线国产91| 黑人中文字幕一区二区三区| 麻豆精品视频在线观看视频| 日韩 欧美 精品| 色婷婷**av毛片一区| 欧美自拍一区| 91香蕉国产线在线观看| 色婷婷综合中文久久一本|