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

spring:我是如何解決循環依賴的?

開發 前端
最近項目組的一個同事遇到了一個問題,問我的意見,一下子引起的我的興趣,因為這個問題我也是第一次遇到。平時自認為對spring循環依賴問題還是比較了解的,直到遇到這個和后面的幾個問題后,重新刷新了我的認識。

[[360769]]

1.由同事拋的一個問題開始

最近項目組的一個同事遇到了一個問題,問我的意見,一下子引起的我的興趣,因為這個問題我也是第一次遇到。平時自認為對spring循環依賴問題還是比較了解的,直到遇到這個和后面的幾個問題后,重新刷新了我的認識。

我們先看看當時出問題的代碼片段:

  1. @Service 
  2. public class TestService1 { 
  3.  
  4.     @Autowired 
  5.     private TestService2 testService2; 
  6.  
  7.     @Async 
  8.     public void test1() { 
  9.     } 

  1. @Service 
  2. public class TestService2 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 
  6.  
  7.     public void test2() { 
  8.     } 

這兩段代碼中定義了兩個Service類:TestService1和TestService2,在TestService1中注入了TestService2的實例,同時在TestService2中注入了TestService1的實例,這里構成了循環依賴。

只不過,這不是普通的循環依賴,因為TestService1的test1方法上加了一個@Async注解。

大家猜猜程序啟動后運行結果會怎樣?

  1. org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'testService1': Bean with name 'testService1' has been injected into other beans [testService2] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned offfor example. 

報錯了。。。原因是出現了循環依賴。

「不科學呀,spring不是號稱能解決循環依賴問題嗎,怎么還會出現?」

如果把上面的代碼稍微調整一下:

  1. @Service 
  2. public class TestService1 { 
  3.  
  4.     @Autowired 
  5.     private TestService2 testService2; 
  6.  
  7.     public void test1() { 
  8.     } 

把TestService1的test1方法上的@Async注解去掉,TestService1和TestService2都需要注入對方的實例,同樣構成了循環依賴。

但是重新啟動項目,發現它能夠正常運行。這又是為什么?

帶著這兩個問題,讓我們一起開始spring循環依賴的探秘之旅。

2.什么是循環依賴?

循環依賴:說白是一個或多個對象實例之間存在直接或間接的依賴關系,這種依賴關系構成了構成一個環形調用。

第一種情況:自己依賴自己的直接依賴


第二種情況:兩個對象之間的直接依賴


第三種情況:多個對象之間的間接依賴


前面兩種情況的直接循環依賴比較直觀,非常好識別,但是第三種間接循環依賴的情況有時候因為業務代碼調用層級很深,不容易識別出來。

3.循環依賴的N種場景

spring中出現循環依賴主要有以下場景:


單例的setter注入

這種注入方式應該是spring用的最多的,代碼如下:

  1. @Service 
  2. public class TestService1 { 
  3.  
  4.     @Autowired 
  5.     private TestService2 testService2; 
  6.  
  7.     public void test1() { 
  8.     } 

  1. @Service 
  2. public class TestService2 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 
  6.  
  7.     public void test2() { 
  8.     } 

這是一個經典的循環依賴,但是它能正常運行,得益于spring的內部機制,讓我們根本無法感知它有問題,因為spring默默幫我們解決了。

spring內部有三級緩存:

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

下面用一張圖告訴你,spring是如何解決循環依賴的: 


圖1

細心的朋友可能會發現在這種場景中第二級緩存作用不大。

那么問題來了,為什么要用第二級緩存呢?

試想一下,如果出現以下這種情況,我們要如何處理?

  1. @Service 
  2. public class TestService1 { 
  3.  
  4.     @Autowired 
  5.     private TestService2 testService2; 
  6.     @Autowired 
  7.     private TestService3 testService3; 
  8.  
  9.     public void test1() { 
  10.     } 

  1. @Service 
  2. public class TestService2 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 
  6.  
  7.     public void test2() { 
  8.     } 

  1. @Service 
  2. public class TestService3 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 
  6.  
  7.     public void test3() { 
  8.     } 

TestService1依賴于TestService2和TestService3,而TestService2依賴于TestService1,同時TestService3也依賴于TestService1。

按照上圖的流程可以把TestService1注入到TestService2,并且TestService1的實例是從第三級緩存中獲取的。

假設不用第二級緩存,TestService1注入到TestService3的流程如圖:


圖2

TestService1注入到TestService3又需要從第三級緩存中獲取實例,而第三級緩存里保存的并非真正的實例對象,而是ObjectFactory對象。說白了,兩次從三級緩存中獲取都是ObjectFactory對象,而通過它創建的實例對象每次可能都不一樣的。

這樣不是有問題?

為了解決這個問題,spring引入的第二級緩存。上面圖1其實TestService1對象的實例已經被添加到第二級緩存中了,而在TestService1注入到TestService3時,只用從第二級緩存中獲取該對象即可。


圖3

還有個問題,第三級緩存中為什么要添加ObjectFactory對象,直接保存實例對象不行嗎?

答:不行,因為假如你想對添加到三級緩存中的實例對象進行增強,直接用實例對象是行不通的。

針對這種場景spring是怎么做的呢?

答案就在AbstractAutowireCapableBeanFactory類doCreateBean方法的這段代碼中:

它定義了一個匿名內部類,通過getEarlyBeanReference方法獲取代理對象,其實底層是通過AbstractAutoProxyCreator類的getEarlyBeanReference生成代理對象。

多例的setter注入

這種注入方法偶然會有,特別是在多線程的場景下,具體代碼如下:

  1. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 
  2. @Service 
  3. public class TestService1 { 
  4.  
  5.     @Autowired 
  6.     private TestService2 testService2; 
  7.  
  8.     public void test1() { 
  9.     } 

  1. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 
  2. @Service 
  3. public class TestService2 { 
  4.  
  5.     @Autowired 
  6.     private TestService1 testService1; 
  7.  
  8.     public void test2() { 
  9.     } 

很多人說這種情況spring容器啟動會報錯,其實是不對的,我非常負責任的告訴你程序能夠正常啟動。

為什么呢?

其實在AbstractApplicationContext類的refresh方法中告訴了我們答案,它會調用finishBeanFactoryInitialization方法,該方法的作用是為了spring容器啟動的時候提前初始化一些bean。該方法的內部又調用了preInstantiateSingletons方法 

標紅的地方明顯能夠看出:非抽象、單例 并且非懶加載的類才能被提前初始bean。

而多例即SCOPE_PROTOTYPE類型的類,非單例,不會被提前初始化bean,所以程序能夠正常啟動。

如何讓他提前初始化bean呢?

只需要再定義一個單例的類,在它里面注入TestService1

  1. @Service 
  2. public class TestService3 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 

重新啟動程序,執行結果:

  1. Requested bean is currently in creation: Is there an unresolvable circular reference? 

果然出現了循環依賴。

注意:這種循環依賴問題是無法解決的,因為它沒有用緩存,每次都會生成一個新對象。

構造器注入

這種注入方式現在其實用的已經非常少了,但是我們還是有必要了解一下,看看如下代碼:

  1. @Service 
  2. public class TestService1 { 
  3.  
  4.     public TestService1(TestService2 testService2) { 
  5.     } 

  1. @Service 
  2. public class TestService2 { 
  3.  
  4.     public TestService2(TestService1 testService1) { 
  5.     } 

運行結果:

  1. Requested bean is currently in creation: Is there an unresolvable circular reference? 

出現了循環依賴,為什么呢?


從圖中的流程看出構造器注入只是添加了三級緩存,并沒有使用緩存,所以也無法解決循環依賴問題。

單例的代理對象setter注入

這種注入方式其實也比較常用,比如平時使用:@Async注解的場景,會通過AOP自動生成代理對象。

我那位同事的問題也是這種情況。

  1. @Service 
  2. public class TestService1 { 
  3.  
  4.     @Autowired 
  5.     private TestService2 testService2; 
  6.  
  7.     @Async 
  8.     public void test1() { 
  9.     } 

  1. @Service 
  2. public class TestService2 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 
  6.  
  7.     public void test2() { 
  8.     } 

從前面得知程序啟動會報錯,出現了循環依賴:

  1. org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'testService1': Bean with name 'testService1' has been injected into other beans [testService2] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final version of the bean. This is often the result of over-eager type matching - consider using 'getBeanNamesOfType' with the 'allowEagerInit' flag turned offfor example. 

為什么會循環依賴呢?

答案就在下面這張圖中:


說白了,bean初始化完成之后,后面還有一步去檢查:第二級緩存 和 原始對象 是否相等。由于它對前面流程來說無關緊要,所以前面的流程圖中省略了,但是在這里是關鍵點,我們重點說說:


那位同事的問題正好是走到這段代碼,發現第二級緩存 和 原始對象不相等,所以拋出了循環依賴的異常。

如果這時候把TestService1改個名字,改成:TestService6,其他的都不變。

  1. @Service 
  2. publicclass TestService6 { 
  3.  
  4.     @Autowired 
  5.     private TestService2 testService2; 
  6.  
  7.     @Async 
  8.     public void test1() { 
  9.     } 

再重新啟動一下程序,神奇般的好了。

what? 這又是為什么?

這就要從spring的bean加載順序說起了,默認情況下,spring是按照文件完整路徑遞歸查找的,按路徑+文件名排序,排在前面的先加載。所以TestService1比TestService2先加載,而改了文件名稱之后,TestService2比TestService6先加載。

為什么TestService2比TestService6先加載就沒問題呢?

答案在下面這張圖中:


這種情況testService6中其實第二級緩存是空的,不需要跟原始對象判斷,所以不會拋出循環依賴。

DependsOn循環依賴

還有一種有些特殊的場景,比如我們需要在實例化Bean A之前,先實例化Bean B,這個時候就可以使用@DependsOn注解。

  1. @DependsOn(value = "testService2"
  2. @Service 
  3. public class TestService1 { 
  4.  
  5.     @Autowired 
  6.     private TestService2 testService2; 
  7.  
  8.     public void test1() { 
  9.     } 

  1. @DependsOn(value = "testService1"
  2. @Service 
  3. public class TestService2 { 
  4.  
  5.     @Autowired 
  6.     private TestService1 testService1; 
  7.  
  8.     public void test2() { 
  9.     } 

程序啟動之后,執行結果:

  1. Circular depends-on relationship between 'testService2' and 'testService1' 

這個例子中本來如果TestService1和TestService2都沒有加@DependsOn注解是沒問題的,反而加了這個注解會出現循環依賴問題。

這又是為什么?

答案在AbstractBeanFactory類的doGetBean方法的這段代碼中:

它會檢查dependsOn的實例有沒有循環依賴,如果有循環依賴則拋異常。

4.出現循環依賴如何解決?

項目中如果出現循環依賴問題,說明是spring默認無法解決的循環依賴,要看項目的打印日志,屬于哪種循環依賴。目前包含下面幾種情況:


生成代理對象產生的循環依賴

這類循環依賴問題解決方法很多,主要有:

  1. 使用@Lazy注解,延遲加載
  2. 使用@DependsOn注解,指定加載先后關系
  3. 修改文件名稱,改變循環依賴類的加載順序

使用@DependsOn產生的循環依賴

這類循環依賴問題要找到@DependsOn注解循環依賴的地方,迫使它不循環依賴就可以解決問題。

多例循環依賴

這類循環依賴問題可以通過把bean改成單例的解決。

構造器循環依賴

這類循環依賴問題可以通過使用@Lazy注解解決。

 

責任編輯:姜華 來源: 蘇三說技術
相關推薦

2019-11-26 14:30:20

Spring循環依賴Java

2023-11-28 08:00:00

SpringJava

2023-10-07 08:40:57

緩存屬性Spring

2022-08-17 07:52:31

Spring循環依賴單例池

2023-08-09 10:43:21

源碼循環依賴getBean

2020-06-22 08:07:48

Spring依賴場景

2020-11-27 06:28:55

Spring循環依賴

2021-01-29 14:14:47

動態代理緩存

2021-09-01 11:45:10

Spring循環依賴面試

2023-10-11 12:35:29

Maven

2020-02-10 15:50:18

Spring循環依賴Java

2010-03-11 14:15:24

Python循環

2023-12-12 17:44:13

三級緩存Bean

2021-04-01 08:05:01

React無限循環useEffect()

2020-03-12 15:00:44

JavaSpring依賴

2024-04-12 07:51:05

SpringBean初始化

2023-05-09 07:51:28

Spring循環依賴

2023-05-04 08:06:27

Spring循環依賴

2021-01-30 19:35:44

HDFS單點Hadoop

2020-08-06 00:14:16

Spring IoC依賴注入開發
點贊
收藏

51CTO技術棧公眾號

欧美日韩三级电影在线| 日本乱码一区二区三区不卡| 激情图区综合网| 欧美精品免费在线观看| 色诱av手机版| 激情黄产视频在线免费观看| 国产亚洲精品精华液| 国产精品久久久久久久久久东京| 美女福利视频网| ccyy激情综合| 在线免费观看日韩欧美| 国产精品12p| 少妇精品高潮欲妇又嫩中文字幕| 久久久久国产一区二区| 久久福利视频网| 日韩片在线观看| 日韩成人在线电影| 精品国产91久久久| 一本一生久久a久久精品综合蜜 | 国产香蕉在线| 国产一区二区电影| 91精品国产91| 色老板免费视频| 亚洲另类av| 日韩亚洲欧美综合| 日本女优爱爱视频| 免费网站在线观看人| 中文字幕不卡一区| 国产亚洲二区| 国产女同91疯狂高潮互磨| 久久中文精品| 午夜免费日韩视频| 成人免费视频国产免费观看| 国产成人手机高清在线观看网站| 亚洲成人网在线观看| 亚洲欧美日韩综合网| 毛片电影在线| 亚洲一区二区欧美| 青少年xxxxx性开放hg| 激情综合闲人网| av电影天堂一区二区在线观看| 91免费视频国产| 中文字幕一区二区三区四区视频| 久久久999| 538国产精品一区二区免费视频| 青青草成人免费| 成人羞羞视频在线看网址| 亚洲男人第一av网站| 国产高清成人久久| 亚洲精品18| 日韩精品中午字幕| www.色.com| 亚洲欧洲日韩精品在线| 欧美网站一区二区| 久久久久久三级| 免费电影日韩网站| 欧美性jizz18性欧美| 免费无遮挡无码永久视频| 91桃色在线| 精品久久久久久亚洲国产300 | 电影午夜精品一区二区三区| 国产精品久久久久久在线| 激情欧美一区二区| 成人黄色av播放免费| 97精品人妻一区二区三区香蕉| 麻豆91小视频| 91免费看片网站| 亚洲黄色一级大片| jlzzjlzz亚洲日本少妇| 久久久久久久久久码影片| 国产又爽又黄网站亚洲视频123| 99视频一区二区三区| 麻豆传媒一区| 国产51人人成人人人人爽色哟哟 | 久久久综合网| 国产精品1234| 一卡二卡三卡在线| 国产一区二区三区精品视频| 国产91精品入口17c| 日本高清视频免费看| 91亚洲精品乱码久久久久久蜜桃 | 91av视频在线观看| 亚洲黄网在线观看| 激情国产一区二区| 国产aⅴ精品一区二区三区黄| 韩国av永久免费| 91麻豆6部合集magnet| 午夜精品亚洲一区二区三区嫩草| 免费观看在线午夜影视| 亚洲一线二线三线久久久| 91九色丨porny丨国产jk| 美女100%一区| 欧美一区二区三区四区高清| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 不卡中文字幕| 欧美老少做受xxxx高潮| 黄色大片网站在线观看| 麻豆91在线看| 国产一区精品视频| 在线视频91p| 亚洲午夜在线观看视频在线| 男人亚洲天堂网| 国产精品美女久久久久人| 亚洲成人网av| 成人欧美一区二区三区黑人一| 激情视频一区| 国产日韩欧美中文| 少妇精品高潮欲妇又嫩中文字幕| 国产精品国产三级国产| 妞干网在线视频观看| 78精品国产综合久久香蕉| 欧美大片一区二区三区| 在线观看日本中文字幕| 亚洲性图久久| 成人欧美一区二区三区在线| 亚洲人成色777777精品音频| 最好看的中文字幕久久| av免费中文字幕| 中文字幕亚洲在线观看| 日韩视频在线一区| 伊人365影院| 精品综合久久久久久8888| 久久久精品国产一区二区三区| 国产黄色在线网站| 欧美在线视频日韩| 久久久久国产精品区片区无码| 亚洲国产精品久久久天堂| 国产成人精品久久久| 日韩在线视频观看免费| 亚洲男同性恋视频| 国产精品区在线| 免费看av成人| 国a精品视频大全| 99国产精品久久久久99打野战| 国产三级精品三级| 伊人成色综合网| 好吊妞视频这里有精品| 欧美精品在线免费| 国产精品羞羞答答在线| 国产精品色在线| 国产精品乱码久久久久| 最新国产精品视频| 91精品国产乱码久久久久久久久| 亚洲av无码一区二区三区性色 | 久久天堂精品| 精品婷婷色一区二区三区蜜桃| 丝袜在线观看| 日韩手机在线导航| 人妻久久一区二区| 国产中文一区二区三区| 黄频视频在线观看| 日本黄色成人| 久久视频免费观看| 国产在成人精品线拍偷自揄拍| 国产精品久久午夜夜伦鲁鲁| 日韩精品你懂的| 成人在线免费观看网站| 国产精品你懂得| 日本www在线观看视频| 欧美精品丝袜中出| 印度午夜性春猛xxx交| 狠狠狠色丁香婷婷综合激情| 正在播放一区| 精品国模一区二区三区欧美 | 日本亚洲视频在线| 视频一区国产精品| 热久久久久久| 久久在线精品视频| 亚洲精品久久久久久无码色欲四季| 亚洲精品五月天| 在线xxxxx| 午夜一级久久| 水蜜桃亚洲精品| 亚洲一区有码| 欧美激情在线观看视频| 色视频在线观看| 欧美性色aⅴ视频一区日韩精品| 日本女人性生活视频| 国产精品一级片在线观看| 精品国偷自产一区二区三区| 亚洲精品一级二级三级| 国产综合香蕉五月婷在线| 伊人在我在线看导航| 亚洲国产日韩一区| 亚洲精品久久久久久久蜜桃| 国产精品激情偷乱一区二区∴| 手机在线播放av| 一区二区日本视频| 日韩中文字幕一区二区| 精品视频在线播放一区二区三区| 97精品国产97久久久久久| 免费在线超碰| 欧美酷刑日本凌虐凌虐| 精品无码久久久久| 久久久影院官网| mm131亚洲精品| 国产综合婷婷| 色一情一乱一伦一区二区三区丨| 精品一区二区三区中文字幕| 91豆花精品一区| 色影院视频在线| 欧美精品一区二区三区一线天视频| 精品不卡一区二区| 亚洲免费观看高清完整| 欧美熟妇精品黑人巨大一二三区| 麻豆传媒一区二区三区| 少妇人妻大乳在线视频| 欧美xxxxx视频| 麻豆91av| 成人性生交大片免费看中文视频 | 91在线播放网址| 欧美激情国内自拍| 毛片一区二区| 日韩国产小视频| 热久久天天拍国产| 久久大片网站| 午夜久久av| 国产精品网站大全| 日韩精品av| 欧美精品在线观看91| 阿v免费在线观看| 日韩精品高清在线观看| 成人激情四射网| 欧美男人的天堂一二区| 麻豆精品久久久久久久99蜜桃| 一区二区三区精品视频在线| 男女男精品视频网站| 久久免费看少妇高潮| 国产精品亚洲一区二区无码| 精品亚洲porn| 欧美成人乱码一二三四区免费| 性8sex亚洲区入口| 精品无码国产一区二区三区av | 欧日韩免费视频| 综合天堂av久久久久久久| 一道精品一区二区三区| 欧美男gay| 免费在线成人av| 日韩中出av| 狠狠色综合欧美激情| 91免费精品国偷自产在线在线| 91精品啪在线观看麻豆免费| 丁香婷婷久久| 国产精品日韩一区| 国产成+人+综合+亚洲欧美| 国产97在线|亚洲| 小视频免费在线观看| 九九综合九九综合| 七七成人影院| 久久久亚洲国产天美传媒修理工| 视频在线这里都是精品| 欧美黑人视频一区| 国产又色又爽又黄刺激在线视频| 欧美黑人又粗大| 超碰中文在线| 97激碰免费视频| xxx欧美xxx| 国产成人精品久久二区二区| 成人h在线观看| 国产美女直播视频一区| 日日夜夜亚洲精品| 亚洲一区国产精品| 97色成人综合网站| 精品久久久久久乱码天堂| 天堂资源在线亚洲| 日韩欧美亚洲日产国| 日韩精品第一区| 潘金莲一级淫片aaaaaa播放1| 亚洲国产一区二区三区在线播放| 日本福利视频在线观看| 亚洲人成久久| www.玖玖玖| 免费视频最近日韩| 亚洲在线观看网站| 成人黄页在线观看| 久久久久久久久久久久| 国产精品理论片在线观看| 欧美日韩色视频| 亚洲国产人成综合网站| 青青青国产在线| 欧美视频在线不卡| 国产草草影院ccyycom| 精品国产99国产精品| 免费在线国产| 伦理中文字幕亚洲| 黄在线观看免费网站ktv| 国产精品福利网站| 亚洲一二av| 欧美日韩免费高清| 亚洲国产日韩欧美在线| 国产三区在线视频| 国产一区二区在线看| 漂亮人妻被黑人久久精品| 欧美经典一区二区三区| 欧美成人精品欧美一级私黄| 欧美午夜精品久久久久久久| 亚洲天堂一二三| 亚洲电影免费观看| eeuss影院www在线播放| 欧美福利视频在线| 日韩精品免费观看视频| av成人观看| 波多野结衣的一区二区三区| 亚洲在线视频一区二区| 亚洲男女自偷自拍| 波多野结衣网页| 日本一区二区在线不卡| 国产午夜福利一区二区| 欧美日韩一区二区三区在线看| 人妻无码一区二区三区久久99| 中文字幕在线国产精品| 黄色漫画在线免费看| 国产精品日日摸夜夜添夜夜av| 精品视频高潮| 色哺乳xxxxhd奶水米仓惠香| 久久一区二区三区超碰国产精品| 超碰人人cao| 国产精品色在线观看| 精品国产午夜福利| 亚洲国产福利在线| 国产盗摄在线观看| 国产精品1234| 九九久久婷婷| 久久久性生活视频| 国产成人av自拍| 日日碰狠狠添天天爽| 欧美中文字幕亚洲一区二区va在线| 人妻夜夜爽天天爽| 欧美国产日韩一区| 激情不卡一区二区三区视频在线| 日韩精品欧美在线| 久久激情久久| 内射中出日韩无国产剧情| 亚洲一二三四区| 亚洲AV无码一区二区三区少妇| 久久综合久久88| 成人污版视频| 在线观看免费黄色片| 久久99精品久久久久久动态图| 欧美黄色一级生活片| 色婷婷国产精品| 视频二区在线| 性欧美xxxx交| 欧美日日夜夜| 久久久999免费视频| www.久久久久久久久| 国产一级av毛片| 精品国产乱码久久久久久闺蜜| 欧美13一16娇小xxxx| 国产有码一区二区| 欧美国产美女| 中日韩av在线播放| 中文字幕制服丝袜成人av| 国产又色又爽又黄又免费| 久久久999国产| 精品国产亚洲一区二区三区| 永久免费看av| 黑人巨大精品欧美黑白配亚洲 | 日本一区二区三区视频视频| 日韩国产亚洲欧美| 视频直播国产精品| 玖玖精品在线| 91视频成人免费| 国产·精品毛片| 国内免费精品视频| 亚洲欧美中文另类| 高清欧美日韩| 久久国产精品免费观看| 国产成人综合在线播放| 国产无码精品一区二区| 亚洲欧洲中文天堂| 久久av日韩| 国产精品一二三在线观看| 99天天综合性| 怡红院男人天堂| 欧美成人在线影院| 欧美偷窥清纯综合图区| 手机看片福利日韩| 亚洲欧美日韩电影| 日韩中文字幕免费在线观看| 青青a在线精品免费观看| 欧美一级精品片在线看| 激情久久综合网| 舔着乳尖日韩一区| 69av亚洲| 国产精品一区视频网站| 日韩av午夜在线观看| 欧美精品色哟哟| 亚洲欧美日韩天堂一区二区| 91精品视频一区二区| 国产精品无码人妻一区二区在线| 国产偷v国产偷v亚洲高清 | 精品免费一区二区三区| 这里有精品可以观看| 热这里只有精品| 91丝袜呻吟高潮美腿白嫩在线观看| 在线免费看91| 97视频免费观看| 五月天久久777| 欧美成人午夜精品免费|