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

源碼深度解析,Spring 如何解決循環(huán)依賴(lài)?

開(kāi)發(fā) 架構(gòu)
“一級(jí)緩存”的作用,變量命名為 singletonObjects,結(jié)構(gòu)是 Map<String, Object>,它就是一個(gè)單例池,將初始化好的對(duì)象放到里面,給其它線(xiàn)程使用,如果沒(méi)有第一級(jí)緩存,程序不能保證 Spring 的單例屬性。

大家好,我是樓仔!

之前有粉絲問(wèn)我 “樓哥,你的文章怎么沒(méi)有研究源碼方面的呢?我對(duì)這塊還挺感興趣的”。

其實(shí)我不太喜歡研究源碼,熱衷理論和實(shí)操,不過(guò)后來(lái)想了想,我已經(jīng)寫(xiě)了很多系列文章,也可以出一個(gè)源碼系列,滿(mǎn)足不同粉絲的要求,那就拿 Spring 開(kāi)刀吧。

Spring 如何解決循環(huán)依賴(lài),網(wǎng)上的資料很多,但是感覺(jué)寫(xiě)得好的極少,特別是源碼解讀方面,我就自己?jiǎn)为?dú)出一篇,這篇文章絕對(duì)肝!

不 BB,上文章目錄。

圖片

1. 基礎(chǔ)知識(shí)

1.1 什么是循環(huán)依賴(lài) ?

一個(gè)或多個(gè)對(duì)象之間存在直接或間接的依賴(lài)關(guān)系,這種依賴(lài)關(guān)系構(gòu)成一個(gè)環(huán)形調(diào)用,有下面 3 種方式。

圖片

我們看一個(gè)簡(jiǎn)單的 Demo,對(duì)標(biāo)“情況 2”。

@Service
public class Louzai1 {

@Autowired
private Louzai2 louzai2;

public void test1() {
}
}

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

public void test2() {
}
}

這是一個(gè)經(jīng)典的循環(huán)依賴(lài),它能正常運(yùn)行,后面我們會(huì)通過(guò)源碼的角度,解讀整體的執(zhí)行流程。

1.2 三級(jí)緩存

解讀源碼流程之前,spring 內(nèi)部的三級(jí)緩存邏輯必須了解,要不然后面看代碼會(huì)蒙圈。

  • 第一級(jí)緩存:singletonObjects,用于保存實(shí)例化、注入、初始化完成的 bean 實(shí)例;
  • 第二級(jí)緩存:earlySingletonObjects,用于保存實(shí)例化完成的 bean 實(shí)例;
  • 第三級(jí)緩存:singletonFactories,用于保存 bean 創(chuàng)建工廠(chǎng),以便后面有機(jī)會(huì)創(chuàng)建代理對(duì)象。

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

圖片

執(zhí)行邏輯:

  • 先從“第一級(jí)緩存”找對(duì)象,有就返回,沒(méi)有就找“二級(jí)緩存”;
  • 找“二級(jí)緩存”,有就返回,沒(méi)有就找“三級(jí)緩存”;
  • 找“三級(jí)緩存”,找到了,就獲取對(duì)象,放到“二級(jí)緩存”,從“三級(jí)緩存”移除。

1.3 原理執(zhí)行流程

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

圖片

整個(gè)執(zhí)行邏輯如下:

  • 在第一層中,先去獲取 A 的 Bean,發(fā)現(xiàn)沒(méi)有就準(zhǔn)備去創(chuàng)建一個(gè),然后將 A 的代理工廠(chǎng)放入“三級(jí)緩存”(這個(gè) A 其實(shí)是一個(gè)半成品,還沒(méi)有對(duì)里面的屬性進(jìn)行注入),但是 A 依賴(lài) B 的創(chuàng)建,就必須先去創(chuàng)建 B;
  • 在第二層中,準(zhǔn)備創(chuàng)建 B,發(fā)現(xiàn) B 又依賴(lài) A,需要先去創(chuàng)建 A;
  • 在第三層中,去創(chuàng)建 A,因?yàn)榈谝粚右呀?jīng)創(chuàng)建了 A 的代理工廠(chǎng),直接從“三級(jí)緩存”中拿到 A 的代理工廠(chǎng),獲取 A 的代理對(duì)象,放入“二級(jí)緩存”,并清除“三級(jí)緩存”;
  • 回到第二層,現(xiàn)在有了 A 的代理對(duì)象,對(duì) A 的依賴(lài)完美解決(這里的 A 仍然是個(gè)半成品),B 初始化成功;
  • 回到第一層,現(xiàn)在 B 初始化成功,完成 A 對(duì)象的屬性注入,然后再填充 A 的其它屬性,以及 A 的其它步驟(包括 AOP),完成對(duì) A 完整的初始化功能(這里的 A 才是完整的 Bean)。
  • 將 A 放入“一級(jí)緩存”。

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

2. 源碼解讀

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

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

2.1 代碼入口

圖片

圖片

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

圖片

圖片

2.2 第一層

圖片

進(jìn)入 doGetBean(),從 getSingleton() 沒(méi)有找到對(duì)象,進(jìn)入創(chuàng)建 Bean 的邏輯。

圖片

圖片

進(jìn)入 doCreateBean() 后,調(diào)用 addSingletonFactory()。

圖片

往三級(jí)緩存 singletonFactories 塞入 louzai1 的工廠(chǎng)對(duì)象。

圖片

圖片

進(jìn)入到 populateBean(),執(zhí)行 postProcessProperties(),這里是一個(gè)策略模式,找到下圖的策略對(duì)象。

圖片

正式進(jìn)入該策略對(duì)應(yīng)的方法。

圖片

下面都是為了獲取 louzai1 的成員對(duì)象,然后進(jìn)行注入。

圖片

圖片

圖片

圖片

進(jìn)入 doResolveDependency(),找到 louzai1 依賴(lài)的對(duì)象名 louzai2

圖片

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

圖片

正式獲取 louzai2 的 bean。

圖片

到這里,第一層套娃基本結(jié)束,因?yàn)?louzai1 依賴(lài) louzai2,下面我們進(jìn)入第二層套娃。

2.3 第二層

圖片

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

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

圖片

正式獲取 louzai1 的 bean。

圖片

到這里,第二層套娃結(jié)束,因?yàn)?louzai2 依賴(lài) louzai1,所以我們進(jìn)入第三層套娃。

2.4 第三層

圖片

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

圖片

圖片

敲重點(diǎn)!敲重點(diǎn)!!敲重點(diǎn)!!!

到了第三層,由于第三級(jí)緩存有 louzai1 數(shù)據(jù),這里使用三級(jí)緩存中的工廠(chǎng),為 louzai1 創(chuàng)建一個(gè)代理對(duì)象,塞入二級(jí)緩存。

圖片

這里就拿到了 louzai1 的代理對(duì)象,解決了 louzai2 的依賴(lài)關(guān)系,返回到第二層。

2.5 返回第二層

返回第二層后,louzai2 初始化結(jié)束,這里就結(jié)束了么?二級(jí)緩存的數(shù)據(jù),啥時(shí)候會(huì)給到一級(jí)呢?

甭著急,看這里,還記得在 doGetBean() 中,我們會(huì)通過(guò) createBean() 創(chuàng)建一個(gè) louzai2 的 bean,當(dāng) louzai2 的 bean 創(chuàng)建成功后,我們會(huì)執(zhí)行 getSingleton(),它會(huì)對(duì) louzai2 的結(jié)果進(jìn)行處理。

圖片

我們進(jìn)入 getSingleton(),會(huì)看到下面這個(gè)方法。

圖片

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

圖片

2.6 返回第一層

同 2.5,louzai1 初始化完畢后,會(huì)把 louzai1 的二級(jí)緩存清除,將對(duì)象放入一級(jí)緩存。

圖片

到這里,所有的流程結(jié)束,我們返回 louzai1 對(duì)象。

3. 原理深度解讀

3.1 什么要有 3 級(jí)緩存 ?

這是一道非常經(jīng)典的面試題,前面已經(jīng)告訴大家詳細(xì)的執(zhí)行流程,包括源碼解讀,但是沒(méi)有告訴大家為什么要用 3 級(jí)緩存?

這里是重點(diǎn)!敲黑板!!!

我們先說(shuō)“一級(jí)緩存”的作用,變量命名為 singletonObjects,結(jié)構(gòu)是 Map<String, Object>,它就是一個(gè)單例池,將初始化好的對(duì)象放到里面,給其它線(xiàn)程使用,如果沒(méi)有第一級(jí)緩存,程序不能保證 Spring 的單例屬性。

“二級(jí)緩存”先放放,我們直接看“三級(jí)緩存”的作用,變量命名為 singletonFactories,結(jié)構(gòu)是 Map<String, ObjectFactory<?>>,Map 的 Value 是一個(gè)對(duì)象的代理工廠(chǎng),所以“三級(jí)緩存”的作用,其實(shí)就是用來(lái)存放對(duì)象的代理工廠(chǎng)。

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

我們回到文章開(kāi)頭的例子,創(chuàng)建 A 對(duì)象時(shí),會(huì)把實(shí)例化的 A 對(duì)象存入“三級(jí)緩存”,這個(gè) A 其實(shí)是個(gè)半成品,因?yàn)闆](méi)有完成 A 的依賴(lài)屬性 B 的注入,所以后面當(dāng)初始化 B 時(shí),B 又要去找 A,這時(shí)就需要從“三級(jí)緩存”中拿到這個(gè)半成品的 A(這里描述,其實(shí)也不完全準(zhǔn)確,因?yàn)椴皇侵苯幽茫瑸榱俗尨蠹液美斫猓揖拖冗@樣描述),打破循環(huán)。

那我再問(wèn)一個(gè)問(wèn)題,為什么“三級(jí)緩存”不直接存半成品的 A,而是要存一個(gè)代理工廠(chǎng)呢 ?答案是因?yàn)?AOP。

在解釋這個(gè)問(wèn)題前,我們看一下這個(gè)代理工廠(chǎng)的源碼,讓大家有一個(gè)更清晰的認(rèn)識(shí)。

直接找到創(chuàng)建 A 對(duì)象時(shí),把實(shí)例化的 A 對(duì)象存入“三級(jí)緩存”的代碼,直接用前面的兩幅截圖。

圖片

圖片

下面我們主要看這個(gè)對(duì)象工廠(chǎng)是如何得到的,進(jìn)入 getEarlyBeanReference() 方法。

圖片

圖片

圖片

圖片

最后一幅圖太重要了,我們知道這個(gè)對(duì)象工廠(chǎng)的作用:

  • 如果 A 有 AOP,就創(chuàng)建一個(gè)代理對(duì)象;
  • 如果 A 沒(méi)有 AOP,就返回原對(duì)象。

那“二級(jí)緩存”的作用就清楚了,就是用來(lái)存放對(duì)象工廠(chǎng)生成的對(duì)象,這個(gè)對(duì)象可能是原對(duì)象,也可能是個(gè)代理對(duì)象。

我再問(wèn)一個(gè)問(wèn)題,為什么要這樣設(shè)計(jì)呢?把二級(jí)緩存干掉不行么 ?我們繼續(xù)往下看。

3.2 能干掉第 2 級(jí)緩存么 ?

@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() {
}
}

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

假如 A 需要進(jìn)行 AOP,因?yàn)榇韺?duì)象每次都是生成不同的對(duì)象,如果干掉第二級(jí)緩存,只有第一、三級(jí)緩存:

  • B 找到 A 時(shí),直接通過(guò)三級(jí)緩存的工廠(chǎng)的代理對(duì)象,生成對(duì)象 A1。
  • C 找到 A 時(shí),直接通過(guò)三級(jí)緩存的工廠(chǎng)的代理對(duì)象,生成對(duì)象 A2。

看到問(wèn)題沒(méi)?你通過(guò) A 的工廠(chǎng)的代理對(duì)象,生成了兩個(gè)不同的對(duì)象 A1 和 A2,所以為了避免這種問(wèn)題的出現(xiàn),我們搞個(gè)二級(jí)緩存,把 A1 存下來(lái),下次再獲取時(shí),直接從二級(jí)緩存獲取,無(wú)需再生成新的代理對(duì)象。

所以“二級(jí)緩存”的目的是為了避免因?yàn)?AOP 創(chuàng)建多個(gè)對(duì)象,其中存儲(chǔ)的是半成品的 AOP 的單例 bean。

如果沒(méi)有 AOP 的話(huà),我們其實(shí)只要 1、3 級(jí)緩存,就可以滿(mǎn)足要求。

4. 寫(xiě)在最后

我們?cè)倩仡櫼幌?3 級(jí)緩存的作用:

  • 一級(jí)緩存:為“Spring 的單例屬性”而生,就是個(gè)單例池,用來(lái)存放已經(jīng)初始化完成的單例 Bean;
  • 二級(jí)緩存:為“解決 AOP”而生,存放的是半成品的 AOP 的單例 Bean;
  • 三級(jí)緩存:為“打破循環(huán)”而生,存放的是生成半成品單例 Bean 的工廠(chǎng)方法。

如果你能理解上面我說(shuō)的三條,恭喜你,你對(duì) Spring 的循環(huán)依賴(lài)?yán)斫獾梅浅M笍兀?/p>

關(guān)于循環(huán)依賴(lài)的知識(shí),其實(shí)還有,因?yàn)槠颍揖筒辉賹?xiě)了,這篇文章的重點(diǎn),一方面是告訴大家循環(huán)依賴(lài)的核心原理,另一方面是讓大家自己去 debug 代碼,跑跑流程,挺有意思的。

可能有同學(xué)會(huì)問(wèn) “樓哥,你之前是不是經(jīng)常看源碼,然后這個(gè)流程,你是不是 debug 了很久?”

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

這里也簡(jiǎn)單說(shuō)一下我看源碼的心得:

  • 需要掌握基本的設(shè)計(jì)模式;
  • 看源碼前,最好能找一些理論知識(shí)先看看;
  • 學(xué)會(huì)讀英文注釋?zhuān)粫?huì)的話(huà)就百度翻譯;
  • debug 時(shí),要克制自己,不要陷入無(wú)用的細(xì)節(jié),這個(gè)最重要。

其中最難的是第 4 步,因?yàn)楹芏嗤瑢W(xué)看 Spring 源碼,每看一個(gè)方法,就想多研究研究,這樣很容易被繞進(jìn)去了,這個(gè)要學(xué)會(huì)克制,有大局觀(guān),并能分辨哪里是核心邏輯,至于如何分辨,可以在網(wǎng)上先找些資料,如果沒(méi)有的話(huà),就只能多看代碼了。

責(zé)任編輯:武曉燕 來(lái)源: 樓仔
相關(guān)推薦

2019-11-26 14:30:20

Spring循環(huán)依賴(lài)Java

2023-10-07 08:40:57

緩存屬性Spring

2020-12-29 08:34:08

spring循環(huán)依賴(lài)開(kāi)發(fā)

2023-11-28 08:00:00

SpringJava

2020-06-22 08:07:48

Spring依賴(lài)場(chǎng)景

2023-08-09 10:43:21

源碼循環(huán)依賴(lài)getBean

2020-11-27 06:28:55

Spring循環(huán)依賴(lài)

2023-10-11 12:35:29

Maven

2010-03-11 14:15:24

Python循環(huán)

2023-12-12 17:44:13

三級(jí)緩存Bean

2022-12-07 08:02:43

Spring流程IOC

2019-09-09 06:30:06

Springboot程序員開(kāi)發(fā)

2020-02-10 15:50:18

Spring循環(huán)依賴(lài)Java

2021-01-29 14:14:47

動(dòng)態(tài)代理緩存

2024-12-05 09:06:58

2023-05-04 08:06:27

Spring循環(huán)依賴(lài)

2021-04-01 08:05:01

React無(wú)限循環(huán)useEffect()

2023-05-25 08:00:36

阿?云DNS重試機(jī)制

2024-04-12 07:51:05

SpringBean初始化

2017-09-23 22:07:24

深度學(xué)習(xí)N 體問(wèn)題GAN
點(diǎn)贊
收藏

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

日本不卡在线观看视频| 95av在线视频| 卡一卡二卡三在线观看| 97久久精品一区二区三区的观看方式 | 77777影视视频在线观看| 久草精品在线观看| 韩国v欧美v日本v亚洲| 欧美精品一区二区三区在线四季 | 欧美专区亚洲专区| 国产一区二区三区在线免费| 日本一本草久在线中文| 国产在线不卡一区| 亚洲四色影视在线观看| 日韩欧美国产片| 欧美a级在线观看| 综合久久国产九一剧情麻豆| 欧美成人一区二区在线| 99免费在线视频| 青青草伊人久久| 久久久久久综合网天天| 麻豆网址在线观看| 国产毛片一区二区三区| 亚洲成人999| 亚洲热在线视频| 日韩av电影资源网| 精品久久久香蕉免费精品视频| 欧美一级免费在线观看| 高清毛片在线看| 97精品久久久午夜一区二区三区| 亚洲综合一区二区不卡| 亚洲一区 中文字幕| 亚欧美中日韩视频| 1769国内精品视频在线播放| 亚洲麻豆一区二区三区| 欧美男女视频| 在线中文字幕一区| 欧美a在线视频| 成人影院在线视频| 亚洲一区影音先锋| 成人毛片100部免费看| 日本高清在线观看wwwww色| 2017欧美狠狠色| 精品视频一区在线| 亚洲欧美综合自拍| 伊人久久成人| 高清一区二区三区日本久| 国产高潮流白浆| 久久久久av| 播播国产欧美激情| 永久免费看mv网站入口| 香蕉综合视频| 俺去啦;欧美日韩| 小泽玛利亚一区| 999国产精品| yw.139尤物在线精品视频| 91狠狠综合久久久久久| 日韩免费看片| 日韩欧美色电影| 在线a免费观看| 久久久精品区| 欧美成人在线直播| 性猛交╳xxx乱大交| 999在线精品| 精品国产免费一区二区三区四区 | 久久97精品| 日韩欧美一区二区三区| 欧美黄色免费影院| 香蕉久久免费电影| 欧美日韩一区视频| 中文字幕第22页| caoporn成人免费视频在线| 欧美精品一区二区久久婷婷| 波多野结衣加勒比| 自拍偷拍精品| 深夜福利91大全| 欧美黄色免费看| 一本不卡影院| 国产精品久久久久免费a∨大胸| 伊人网免费视频| 国产精品系列在线观看| 国产一区二区三区四区五区在线| 天堂视频中文在线| 国产乱码一区二区三区| 91亚洲va在线va天堂va国| 亚洲AV无码一区二区三区少妇| gogo大胆日本视频一区| 四虎永久国产精品| dy888亚洲精品一区二区三区| 亚洲一区二区三区中文字幕 | 国产精品视频一区二区三| 亚洲韩日在线| 国产精品盗摄久久久| 国产美女三级无套内谢| 不卡视频免费播放| 亚洲国产精品久久久久婷婷老年 | 黄色av一区二区三区| 久久一区二区三区四区| 福利网在线观看| 亚洲男人av| 亚洲日本一区二区三区| 黄色一级片黄色| 日韩不卡视频在线观看| 日韩欧美在线影院| 在线观看福利片| 欧美一区影院| 国产成人av在线| 精品人妻少妇AV无码专区| 久久免费电影网| 亚洲天堂第一区| 新片速递亚洲合集欧美合集| 日韩一区二区免费在线电影| 日本二区在线观看| 激情久久婷婷| 91在线无精精品一区二区| 亚洲欧洲国产综合| 樱花草国产18久久久久| 丝袜制服一区二区三区| 欧美电影免费网站| 美女少妇精品视频| 日韩精品在线一区二区三区| 高清国产一区二区| 国产精品美女在线播放| 最新日韩三级| 精品在线观看国产| 日韩美女视频网站| 在线午夜精品| 99久久综合狠狠综合久久止| 一区二区三区视频网站 | 欧美极品在线视频| 国产福利资源在线| 亚洲日本在线天堂| 中文字幕 欧美日韩| 欧美日韩精品在线一区| 日本成人在线视频网址| 天天操天天干天天操| 亚洲在线视频一区| 可以看的av网址| 一本一本久久a久久综合精品| 国产精品黄视频| 国产视频第一页在线观看| 狠狠色噜噜狠狠狠狠97| 国产日产欧美视频| 久久影院资源站| 97色在线播放视频| 四虎影视精品成人| 精品国产91久久久| 日本xxxx裸体xxxx| 亚洲资源av| 青青草成人激情在线| 黑人巨大精品| 国产亚洲精品成人av久久ww| 国产成人自拍偷拍| 中文字幕av一区二区三区高| 在线观看国产中文字幕| 色喇叭免费久久综合网| 国产日韩欧美自拍| av超碰免费在线| 精品国产制服丝袜高跟| 美国黄色a级片| 亚洲欧美久久久| 欧美深深色噜噜狠狠yyy| 四虎成人在线| 久久精品成人欧美大片古装| 99热这里只有精品99| 一区二区三区精品视频| 欧美大喷水吹潮合集在线观看| 亚洲国产一区二区三区高清| 久久久一本精品99久久精品66| 97视频在线观看网站| 欧美在线播放高清精品| 欧美激情精品久久久久久免费 | 91精品久久久久久久| 麻豆视频在线观看免费网站| 日韩欧美亚洲国产另类| 久久国产视频播放| 国产精品欧美一区二区三区| 国产老头和老头xxxx×| 国产欧美不卡| 亚洲精品一品区二品区三品区 | av成人免费网站| 99久久99久久免费精品蜜臀| 性生交免费视频| 欧美1区视频| 欧美日韩国产综合视频在线| 欧美成人aaa| 韩国v欧美v日本v亚洲| 国产福利免费在线观看| 日韩视频123| 亚洲天堂一区在线| 亚洲三级在线播放| 国产精品久久AV无码| 免费成人你懂的| 欧美一级欧美一级| 久久久综合色| 久久久久欧美| 日本在线成人| 国产精品高精视频免费| 男人天堂亚洲| 神马国产精品影院av| 婷婷五月综合久久中文字幕| 欧美日韩视频一区二区| 国产午夜在线播放| 亚洲人成网站精品片在线观看| 女~淫辱の触手3d动漫| 国产黄色成人av| 婷婷激情四射五月天| 日韩av黄色在线| 91精品视频免费看| 亚洲高清黄色| 2018国产精品视频| 欧美色图天堂| 久久精品亚洲一区| 成人在线免费观看| 日韩精品免费综合视频在线播放| 日韩少妇高潮抽搐| 中文字幕亚洲区| 在线免费观看成年人视频| 黑人精品欧美一区二区蜜桃| 国产天堂在线播放| 免费亚洲一区| 日本a在线免费观看| 欧美精品黄色| 欧美日韩一级在线| 99久久精品国产亚洲精品| 日本成人三级电影网站| 美国成人xxx| 国产三区精品| 成人免费在线电影网| 91影视免费在线观看| 精品自拍视频| 国产精品亚洲第一区| 日韩不卡免费高清视频| 国产成人亚洲综合青青| 成人欧美magnet| 欧美一级电影免费在线观看| 理论不卡电影大全神| 久久久久中文字幕| free性欧美| 97高清免费视频| 国产精品yjizz视频网| 高清欧美性猛交| 人人草在线视频| 欧美亚洲视频在线看网址| av在线播放资源| 91精品国产91久久久久久久久| 福利在线导航136| 97精品在线观看| 国模精品视频| 欧美在线视频免费观看| 欧美性xxx| 国产精品久久久久久av福利| 91tv亚洲精品香蕉国产一区| 国产精品日韩欧美综合| 精品久久99| 99久久99久久| 女同另类激情重口| 日韩欧美一区二区视频在线播放| 精品国产91乱码一区二区三区四区| 日韩啊v在线| 久久精品影视| 男女猛烈激情xx00免费视频| 久久久夜夜夜| 亚洲欧美国产中文| 国产91综合网| 日韩中文字幕电影| 日本一区二区免费在线| 精品人妻一区二区免费| 成人免费视频国产在线观看| 成人免费无码av| 中文字幕日韩一区二区不卡| 国产资源第一页| 国产日韩欧美三级| 日本999视频| 国产一区二区三区视频在线播放| japan高清日本乱xxxxx| 91欧美一区二区| 刘亦菲国产毛片bd| 一区二区在线免费| 精品久久久久久久久久久久久久久久| 亚洲另类在线视频| 日韩免费一级片| 欧美午夜电影网| 亚洲国产精品久久人人爱潘金莲| 亚洲精品成人免费| 99精品免费观看| 亚洲福利在线看| 中文字幕日本在线| 久久久久这里只有精品| 成人亚洲视频| 国产精品久久亚洲7777| 精品精品久久| 青春草国产视频| 日韩中文欧美在线| 久久久久久无码精品人妻一区二区| 99精品视频一区| 成人免费黄色小视频| 欧美日韩国产在线播放| 91影院在线播放| 亚洲美女黄色片| 手机电影在线观看| 欧美成人午夜激情| 天堂在线中文网官网| 国产日韩在线视频| 日本成人7777| 992tv快乐视频| 日韩福利视频网| 好吊色视频一区二区三区| 亚洲日本欧美天堂| 依依成人综合网| 精品国产乱码久久久久久蜜臀| www日韩tube| 欧美洲成人男女午夜视频| 亚洲超碰在线观看| 亚洲一区二区三区精品在线观看| jlzzjlzz亚洲女人| 波多野结衣综合网| 国产日韩精品视频一区二区三区| 日本精品一区在线| 国产女主播视频一区二区| 日韩毛片在线视频| 精品免费日韩av| a天堂中文在线官网在线| 国产精品自在线| 欧美精品色图| 日韩精品无码一区二区三区免费| 不卡电影免费在线播放一区| 免费在线观看h片| 91精品欧美一区二区三区综合在| 国产精品嫩草影院精东| 亚洲图片欧美日产| 黄色成人免费网| 久久综合九九| 国产亚洲一区在线| 亚洲国产精品无码久久久久高潮 | 国产日韩一区二区三免费高清| 日韩精品伦理第一区| 视频一区中文字幕国产| 日韩人妻一区二区三区 | av加勒比在线| 久久夜色精品国产欧美乱| 爱情电影网av一区二区| japanese在线视频| 激情av综合网| 日本少妇高清视频| 日韩欧美另类在线| 免费在线观看的电影网站| 国产精品久久久久免费| 亚洲精品少妇| 网站免费在线观看| 色综合色综合色综合色综合色综合| 视频在线不卡| 国产va免费精品高清在线| 国产欧美日韩视频在线| 国产高潮免费视频| 国产精品久线在线观看| 国产美女明星三级做爰| 欧美疯狂xxxx大交乱88av| 99精品国产一区二区三区2021| av女优在线播放| 91毛片在线观看| 久久精品99北条麻妃| 最近2019免费中文字幕视频三| 四虎精品在线观看| 欧美 亚洲 视频| 99久久er热在这里只有精品66| 台湾佬中文在线| 自拍偷拍亚洲一区| 日韩综合一区二区三区| 97超碰在线人人| 久久免费美女视频| 国产精品综合在线| 欧美激情一区二区三区久久久| 久久精品亚洲成在人线av网址| 欧美成人免费高清视频| 国产精品每日更新在线播放网址| 国产精品九九九九| 久久久久在线观看| 欧美精品羞羞答答| 95视频在线观看| 欧美自拍丝袜亚洲| 成人日韩欧美| 久久精品国产第一区二区三区最新章节| 久久字幕精品一区| 99视频只有精品| 亚洲视频在线视频| 自拍偷拍亚洲| 国产成人在线免费看| 中文字幕国产精品一区二区| 国产高潮在线观看| 日韩美女在线观看一区| 综合伊人久久| 毛片av免费在线观看| 亚洲图片激情小说| 色鬼7777久久| 亚洲最大福利网| 国产电影一区二区在线观看| 国产一线在线观看| 欧美亚洲高清一区二区三区不卡| 欧美野外wwwxxx| 日韩av大全|