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

久久免费视频色| 国产探花在线精品一区二区| 亚洲国产另类精品专区| 久久久av水蜜桃| 中文字幕免费播放| 黄色日韩在线| 一区二区日韩精品| 中文字幕一区二区在线观看视频| 女海盗2成人h版中文字幕| 中文一区二区在线观看| 成人看片视频| 国产又黄又粗又爽| 亚洲天天综合| 精品亚洲一区二区三区在线播放| 日韩av加勒比| 亚洲mmav| 无吗不卡中文字幕| 男同互操gay射视频在线看| 搡老岳熟女国产熟妇| 久久99深爱久久99精品| 国产91精品久久久久久| 国产精品 欧美激情| 精品一二三区| 日韩精品中文在线观看| 制服下的诱惑暮生| 精品九九久久| 欧洲av一区二区嗯嗯嗯啊| 男人日女人视频网站| 在线黄色网页| 国产精品成人网| 欧美福利精品| 色婷婷视频在线| 国产福利精品一区| 91久久精品美女| 亚洲一级av毛片| 日韩va欧美va亚洲va久久| 91精品国产成人www| 欧美激情国产精品免费| 91精品精品| 日韩在线免费高清视频| 免费黄在线观看| 久久av影视| 亚洲欧洲在线免费| 人妻大战黑人白浆狂泄| 欧美精品中文字幕亚洲专区| 欧美va亚洲va国产综合| 麻豆tv在线观看| 最新国产精品精品视频| 日韩欧美卡一卡二| 精品无码av一区二区三区不卡| 四虎国产精品免费久久5151| 欧美日韩dvd在线观看| 久久久久国产一区| 97精品国产综合久久久动漫日韩| 色综合激情久久| 农村妇女精品一二区| 亚洲天堂电影| 欧美在线三级电影| 日本xxxx黄色| 九七影院97影院理论片久久 | 欧美日韩亚洲国产另类| 女同性一区二区三区人了人一| 日韩中文字幕免费| 国产探花在线免费观看| 欧美日本一区二区视频在线观看 | 水蜜桃一区二区三区| 岛国在线大片| 国产精品国产三级国产三级人妇| 一区精品视频| 最新超碰在线| 午夜不卡av免费| 欧美精品色婷婷五月综合| 成人免费看黄| 欧美日韩免费一区二区三区| 免费成人黄色大片| 北条麻妃一区二区三区在线观看| 亚洲精品久久久久中文字幕二区| 精品成人av一区二区三区| 日韩dvd碟片| 欧美成人精品xxx| 香蕉免费毛片视频| 日本女人一区二区三区| 亚洲一区二区中文| 日本一区二区三区在线观看视频| 国产农村妇女精品| 9191国产视频| 成人日韩在线| 日韩午夜精品视频| 国产老熟女伦老熟妇露脸| 欧美午夜精彩| 欧美精品激情在线| 最新在线中文字幕| 成人精品视频一区| 性欧美大战久久久久久久免费观看| 成人免费网站在线观看视频| 欧美日韩免费看| 在线观看日本www| 伊人久久大香线蕉无限次| 日韩亚洲欧美中文高清在线| 日本中文字幕免费观看| 久久99久久精品| 久久久婷婷一区二区三区不卡| 9191在线| 日韩欧美一区视频| 香蕉视频xxxx| 日韩精品dvd| 2020久久国产精品| 99在线观看精品视频| 99免费精品在线观看| 国产精品12p| 欧美不卡高清一区二区三区| 欧美变态口味重另类| 美女av免费看| 免费在线观看成人av| 亚洲自拍av在线| 992tv免费直播在线观看| 亚洲一区中文日韩| 四虎成人在线播放| 999久久久亚洲| 国产91精品久久久久久| 丰满肉肉bbwwbbww| 亚洲欧洲日韩综合一区二区| 国内外成人免费激情视频| 91亚洲无吗| 欧美另类极品videosbest最新版本| 波多野结衣网站| 久久久久国产精品厨房| 成熟丰满熟妇高潮xxxxx视频| 国产一区精品二区| 久久精品99无色码中文字幕| 久久精品偷拍视频| 国产午夜亚洲精品不卡| 大陆极品少妇内射aaaaa| 国产suv精品一区二区四区视频| 成人97在线观看视频| 国产精品久久久久久无人区| 国产精品久久久久永久免费观看| 啊啊啊一区二区| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美俄罗斯乱妇| 性中国xxx极品hd| 亚洲精品免费在线观看| 中文字幕av一区二区三区人妻少妇| 久久一区二区三区喷水| 国产精品爽黄69天堂a| av免费在线一区二区三区| 日本高清不卡视频| 免费看裸体网站| 琪琪一区二区三区| 亚洲一区二区高清视频| 四虎视频在线精品免费网址| yw.139尤物在线精品视频| 国产精品玖玖玖| 国产精品久久久久久久久图文区| 不卡的在线视频| 亚洲乱码免费伦视频| 91九色蝌蚪成人| 成年人视频免费在线播放| 亚洲国产天堂网精品网站| 午夜精品久久久久久久久久久久久蜜桃| 成人激情校园春色| 无码无遮挡又大又爽又黄的视频| 国精一区二区| 成人福利在线视频| 欧美理论片在线播放| 亚洲国产天堂久久国产91| 五月天婷婷导航| 国产精品乱码人人做人人爱| 日韩精品视频网址| 亚洲成人直播| 欧美一区二区综合| 99精品女人在线观看免费视频 | 欧美日韩精品免费观看视一区二区| 国产免费不卡| 日韩视频欧美视频| 亚洲免费成人网| 91黄色免费版| 国产女人18水真多毛片18精品| 成人一区二区三区视频在线观看| 黄色片视频在线免费观看| 成人激情在线| 99在线观看| 激情开心成人网| 欧美成年人视频| 深夜福利视频一区| 3d成人h动漫网站入口| 国产一级二级三级| 国产喂奶挤奶一区二区三区| 欧美人与性动交α欧美精品| 欧美亚洲一区| 潘金莲一级淫片aaaaaa播放1| 福利电影一区| 国产在线观看不卡| 鲁鲁在线中文| 精品国产一区久久久| 婷婷在线免费视频| 欧美日韩高清在线| 国产成人啪精品午夜在线观看| 国产精品久久久久久亚洲毛片 | 国内精品视频在线| av基地在线| 亚洲精品视频二区| www香蕉视频| 欧美性生活影院| 久久亚洲天堂网| 亚洲男人天堂av| 国产一二三四区在线| 不卡一区二区三区四区| 亚洲精品成人在线播放| 香蕉成人久久| 亚洲看片网站| 欧美二区在线视频| 国产女女做受ⅹxx高潮| 另类小说色综合| 中文字幕国产综合| 特级西西444www高清大视频| 国产毛片av在线| 久久亚洲国产精品尤物| 色一区二区三区四区| 精品一区二区影视| 欧美日韩国产丝袜另类| 欧美一区二区三区喷汁尤物| 日韩美女视频在线| 阿v天堂2014| 99国产欧美另类久久久精品 | 99在线播放| 最新的欧美黄色| 99视频在线观看地址| 亚洲精品一区二区久| 天天综合网在线观看| 精品av久久707| 午夜免费福利视频| 日韩午夜三级在线| 不卡的日韩av| 日韩一区二区在线看片| 一卡二卡三卡在线| 欧美日韩在线免费视频| 国产精华7777777| 欧美最猛黑人xxxxx猛交| 亚洲第一网站在线观看| 色先锋资源久久综合| 亚洲精品男人的天堂| 欧美日韩色婷婷| 五月婷婷中文字幕| 欧美日韩一二三四五区| 欧美三级午夜理伦| 色综合天天做天天爱| 国产成人一级片| 日本韩国精品在线| 亚洲香蕉在线视频| 91麻豆精品国产综合久久久久久| 91麻豆国产视频| 欧美精品少妇一区二区三区| 一卡二卡三卡在线| 日韩三级.com| 日韩一级在线播放| 亚洲精品视频二区| 在线激情小视频| 欧美xxxx做受欧美| 欧美理论电影| 欧亚精品中文字幕| 成人看片网页| 91手机视频在线观看| 久久在线观看| 国产精品一 二 三| 亚洲精品合集| 亚洲亚洲精品三区日韩精品在线视频| 99国产精品一区二区| 精品一区二区三区毛片| 亚洲精品123区| 国产激情在线观看视频| 精品一区二区在线播放| 国产视频精品视频| 久久婷婷国产综合国色天香| 1024手机在线观看你懂的| 亚洲人一二三区| 天天操天天干视频| 欧美亚洲一区二区在线| 国产成人精品无码高潮| 亚洲精品国产精品乱码不99按摩 | 久久久一区二区三区捆绑**| 亚洲第一视频区| 亚洲自拍偷拍综合| 亚洲欧美一区二区三区在线观看| 7777精品伊人久久久大香线蕉的| 成人无码一区二区三区| 一区二区三区 在线观看视| 天堂va在线| 国产精品久久久久久久美男 | 亚洲少妇视频| 91色p视频在线| 精品中文一区| 大西瓜av在线| 蜜桃视频第一区免费观看| av天堂一区二区| 国产精品盗摄一区二区三区| 天天爽夜夜爽夜夜爽精品| 91麻豆精品国产91| 你懂得在线网址| 欧美日本高清一区| av成人免费| 麻豆成人小视频| 欧美体内she精视频在线观看| www.日日操| 99re免费视频精品全部| 黄页网站免费观看| 欧美日韩中文字幕一区| 天天干天天舔天天射| 欧美另类在线播放| 精品国产美女a久久9999| 久久亚洲高清| 一区视频在线| 国产一级片中文字幕| 国产精品毛片久久久久久| 51国产偷自视频区视频| 欧美成人在线直播| 免费观看成人高潮| 国产精品欧美一区二区三区奶水| 色婷婷精品视频| www.国产在线播放| 国产福利一区二区三区视频| 来吧亚洲综合网| 欧美亚州韩日在线看免费版国语版| 天天操天天射天天| 欧美激情久久久| 亚洲一区二区三区日本久久九| 亚洲自拍三区| 日韩不卡手机在线v区| 91网站免费视频| 狠狠躁天天躁日日躁欧美| 免费观看成年人视频| 欧美激情在线观看| 爱高潮www亚洲精品| 国产情侣第一页| 国产精品一二三| 国产一级视频在线观看| 精品免费日韩av| 欧洲性视频在线播放| 白白色亚洲国产精品| 亚洲精品国产一区黑色丝袜| 午夜欧美视频在线观看| 亚洲av永久无码国产精品久久| 爱福利视频一区| 国产一区二区三区免费观看在线 | 成人福利视频网| 99久久精品费精品国产风间由美| www.夜夜爽| 综合欧美亚洲日本| 国产精品欧美综合亚洲| 色悠悠久久久久| 日韩欧美三区| 91手机视频在线| 国产精品亚洲第一区在线暖暖韩国| 91精品少妇一区二区三区蜜桃臀| 欧美日本精品一区二区三区| 欧美成人三区| 91中文字幕一区| 国产精品mm| 亚洲欧美日本一区| 欧美性猛交视频| 国产黄在线观看| 国产日韩欧美一二三区| 久久久久美女| 中文字幕人妻一区| 欧美色道久久88综合亚洲精品| 欧美zzoo| 91亚洲va在线va天堂va国| 欧美精品不卡| 国产精品无码永久免费不卡| 在线免费观看成人短视频| 欧美三级电影一区二区三区| 91精品黄色| 久久九九免费| 中文字幕五月天| 亚洲精品国产电影| 国产69精品久久久久按摩| 99中文字幕在线观看| 91亚洲精品乱码久久久久久蜜桃| 日韩精品一区不卡| 草民午夜欧美限制a级福利片| 超碰97成人| 久久撸在线视频| 亚洲午夜久久久久| 国产区高清在线| 亚洲a中文字幕| 午夜在线a亚洲v天堂网2018| 91制片厂在线| 亚洲护士老师的毛茸茸最新章节| 成人在线黄色| 99热亚洲精品| 国产精品青草久久| 无码国产精品96久久久久| 国产精品久久久久久一区二区| 午夜精品视频| 免费人成又黄又爽又色| 精品国产精品网麻豆系列| 成人免费在线观看视频| 少妇高潮毛片色欲ava片| 亚洲欧洲av色图| 毛片在线免费|