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

這個Spring循環依賴的坑,今天讓我遇見了

開發 后端
這兩天工作遇到了一個挺有意思的Spring循環依賴的問題,但是這個和以往遇到的循環依賴問題都不太一樣,隱藏的相當隱蔽,網絡上也很少看到有其他人遇到類似的問題。這里權且稱他非典型Spring循環依賴問題。

1. 前言

這兩天工作遇到了一個挺有意思的Spring循環依賴的問題,但是這個和以往遇到的循環依賴問題都不太一樣,隱藏的相當隱蔽,網絡上也很少看到有其他人遇到類似的問題。這里權且稱他非典型Spring循環依賴問題。但是我相信我肯定不是第一個踩這個坑的,也一定不是最后一個,可能只是因為踩過的人比較少、鮮有記錄罷了。因此這里權且記錄一下這個坑,方便后人查看。

正如魯迅(我)說過,“這個世上本沒有坑,踩的人多了,也便成了坑”。

2. 典型場景

經常聽很多人在Review別人代碼的時候有如下的評論:“你在設計的時候這些類之間怎么能有循環依賴呢?你這樣會報錯的!”。

其實這句話前半句當然沒有錯,出現循環依賴的確是設計上的問題,理論上應當將循環依賴進行分層,抽取公共部分,然后由各個功能類再去依賴公共部分。

但是在復雜代碼中,各個manager類互相調用太多,總會一不小心出現一些類之間的循環依賴的問題。可有時候我們又發現在用Spring進行依賴注入時,雖然Bean之間有循環依賴,但是代碼本身卻大概率能很正常的work,似乎也沒有任何bug。

很多敏感的同學心里肯定有些犯嘀咕,循環依賴這種觸犯因果律的事情怎么能發生呢?沒錯,這一切其實都并不是那么理所當然。

3. 什么是依賴

其實,不分場景地、籠統地說A依賴B其實是不夠準確、至少是不夠細致的。我們可以簡單定義一下什么是依賴。

所謂A依賴B,可以理解為A中某些功能的實現是需要調用B中的其他功能配合實現的。這里也可以拆分為兩層含義:

  1.  A強依賴B。創建A的實例這件事情本身需要B來參加。對照在現實生活就像媽媽生你一樣。
  2.  A弱依賴B。創建A的實例這件事情不需要B來參加,但是A實現功能是需要調用B的方法。對照在現實生活就像男耕女織一樣。

那么,所謂循環依賴,其實也有兩層含義:

  1.  強依賴之間的循環依賴。
  2.  弱依賴之間的循環依賴。

講到這一層,我想大家應該知道我想說什么了。

4. 什么是依賴調解

對于強依賴而言,A和B不能互相作為存在的前提,否則宇宙就爆炸了。因此這類依賴目前是無法調解的。

對于弱依賴而言,A和B的存在并沒有前提關系,A和B只是互相合作。因此正常情況下是不會出現違反因果律的問題的。

那什么是循環依賴的調解呢?我的理解是:

將 原本是弱依賴關系的兩者誤當做是強依賴關系的做法 重新改回弱依賴關系的過程。

基于上面的分析,我們基本上也就知道Spring是怎么進行循環依賴調解的了(僅指弱依賴,強依賴的循環依賴只有上帝能自動調解)。

5. 為什么要依賴注入

網上經常看到很多手擼IOC容器的入門科普文,大部分人只是將IOC容器實現成一個“存儲Bean的map”,將DI實現成“通過注解+反射將bean賦給類中的field”。實際上很多人都忽視了DI的依賴調解的功能。而幫助我們進行依賴調解本身就是我們使用IOC+DI的一個重要原因。

在沒有依賴注入的年代里,很多人都會將類之間的依賴通過構造函數傳遞(實際上是構成了強依賴)。當項目越來越龐大時,非常容易出現無法調解的循環依賴。這時候開發人員就被迫必須進行重新抽象,非常麻煩。而事實上,我們之所以將原本的弱依賴弄成了強依賴,完全是因為我們將類的構造、類的配置、類的初始化邏輯三個功能耦合在構造函數之中。

而DI就是幫我們將構造函數的功能進行了解耦。

那么Spring是怎么進行解耦的呢?

6. Spring的依賴注入模型

這一部分網上有很多相關內容,我的理解大概是上面提到的三步:

  1.  類的構造,調用構造函數、解析強依賴(一般是無參構造),并創建類實例。
  2.  類的配置,根據Field/GetterSetter中的依賴注入相關注解、解析弱依賴,并填充所有需要注入的類。
  3.  類的初始化邏輯,調用生命周期中的初始化方法(例如@PostConstruct注解或InitializingBean的afterPropertiesSet方法),執行實際的初始化業務邏輯。

這樣,構造函數的功能就由原來的三個弱化為了一個,只負責類的構造。并將類的配置交由DI,將類的初始化邏輯交給生命周期。

想到這一層,忽然解決了我堵在心頭已久的問題。在剛開始學Spring的時候,我一直想不通:

  •  為什么Spring除了構造函數之外還要在Bean生命周期里有一個額外的初始化方法?
  •  這個初始化方法和構造函數到底有什么區別?
  •  為什么Spring建議將初始化的邏輯寫在生命周期里的初始化方法里?

現在,把依賴調解結合起來看,解釋就十分清楚了:

  1.  為了進行依賴調解,Spring在調用構造函數時是沒有將依賴注入進來的。也就是說構造函數中是無法使用通過DI注入進來的bean(或許可以,但是Spring并不保證這一點)。
  2.  如果不在構造函數中使用依賴注入的bean而僅僅使用構造函數中的參數,雖然沒有問題,但是這就導致了這個bean強依賴于他的入參bean。當后續出現循環依賴時無法進行調解。

7.  非典型問題

結論?

根據上面的分析我們應該得到了以下共識:

  •  通過構造函數傳遞依賴的做法是有可能造成無法自動調解的循環依賴的。
  •  純粹通過Field/GetterSetter進行依賴注入造成的循環依賴是完全可以被自動調解的。

因此這樣我就得到了一個我認為正確的結論。這個結論屢試不爽,直到我發現了這次遇到的場景:

在Spring中對Bean進行依賴注入時,在純粹只考慮循環依賴的情況下,只要不使用構造函數注入就永遠不會產生無法調解的循環依賴。

當然,我沒有任何“不建議使用構造器注入”的意思。相反,我認為能夠“優雅地、不引入循環依賴地使用構造器注入”是一個要求更高的、更優雅的做法。貫徹這一做法需要有更高的抽象能力,并且會自然而然的使得各個功能解耦合。

問題

將實際遇到的問題簡化后大概是下面的樣子(下面的類在同一個包中): 

  1. @SpringBootApplication  
  2. @Import({ServiceA.class, ConfigurationA.class, BeanB.class})  
  3. public class TestApplication {  
  4.     public static void main(String[] args) {  
  5.         SpringApplication.run(TestApplication.class, args);  
  6.     }  
  7.  
  1. public class ServiceA {  
  2.     @Autowired  
  3.     private BeanA beanA;  
  4.     @Autowired  
  5.     private BeanB beanB;  
  6.  
  1. public class ConfigurationA {  
  2.     @Autowired  
  3.     public BeanB beanB;  
  4.     @Bean  
  5.     public BeanA beanA() {  
  6.         return new BeanA();  
  7.     }  
  8.  
  1. public class BeanA {  
  2.  
  1. public class BeanB {  
  2.     @Autowired  
  3.     public BeanA beanA;  

首先聲明一點,我沒有用@Component、@Configuration之類的注解,而是采用@Import手動掃描Bean是為了方便指定Bean的初始化順序。Spring會按照我@Import的順序依次加載Bean。同時,在加載每個Bean的時候,如果這個Bean有需要注入的依賴,則會試圖加載他依賴的Bean。

簡單梳理一下,整個依賴鏈大概是這樣:

我們可以發現,BeanA,BeanB,ConfigurationA之間有一個循環依賴,不過莫慌,所有的依賴都是通過非構造函數注入的方式實現的,理論上似乎可以自動調解的。

但是實際上,這段代碼會報下面的錯: 

  1. Caused by: org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'beanA': Requested bean is currently in creation: Is there an unresolvable circular reference? 

這顯然是出現了Spring無法調解的循環依賴了。

這已經有點奇怪了。但是,如果你嘗試將ServiceA類中聲明的BeanA,BeanB調換一下位置,你就會發現這段代碼突然就跑的通了!!!

顯然,調換這兩個Bean的依賴的順序本質是調整了Spring加載Bean的順序(眾所周知,Spring創建Bean是單線程的)。

解釋

相信你已經發現問題了,沒錯,問題的癥結就在于ConfigurationA這個配置類。

配置類和普通的Bean有一個區別,就在于除了同樣作為Bean被管理之外,配置類也可以在內部聲明其他的Bean。

這樣就存在一個問題,配置類中聲明的其他Bean的構造過程其實是屬于配置類的業務邏輯的一部分的。也就是說我們只有先將配置類的依賴全部滿足之后才可以創建他自己聲明的其他的Bean。(如果不加這個限制,那么在創建自己聲明的其他Bean的時候,如果用到了自己的依賴,則有空指針的風險。)

這樣一來,BeanA對ConfigurationA就不再是弱依賴,而是實打實的強依賴了(也就是說ConfigurationA的初始化不僅影響了BeanA的依賴填充,也影響了BeanA的實例構造)。

有了這樣的認識,我們再來分別分析兩種初始化的路徑。

先加載BeanA

  1.  當Spring在試圖加載ServiceA時,先構造了ServiceA,然后發現他依賴BeanA,于是就試圖去加載BeanA;
  2.  Spring想構造BeanA,但是發現BeanA在ConfigurationA內部,于是又試圖加載ConfigurationA(此時BeanA仍未構造);
  3.  Spring構造了ConfigurationA的實例,然后發現他依賴BeanB,于是就試圖去加載BeanB。
  4.  Spring構造了BeanB的實例,然后發現他依賴BeanA,于是就試圖去加載BeanA。
  5.  Spring發現BeanA還沒有實例化,此時Spring發現自己回到了步驟2。。。GG。。。

先加載BeanB

  1.  當Spring在試圖加載ServiceA時,先構造了ServiceA,然后發現他依賴BeanB,于是就試圖去加載BeanB;
  2.  Spring構造了BeanB的實例,然后發現他依賴BeanA,于是就試圖去加載BeanA。
  3.  Spring發現BeanA在ConfigurationA內部,于是試圖加載ConfigurationA(此時BeanA仍未構造);
  4.  Spring構造了ConfigurationA的實例,然后發現他依賴BeanB,并且BeanB的實例已經有了,于是將這個依賴填充進ConfigurationA中。
  5.  Spring發現ConfigurationA已經完成了構造、填充了依賴,于是想起來構造了BeanA。
  6.  Spring發現BeanA已經有了實例,于是將他給了BeanB,BeanB填充的依賴完成。
  7.  Spring回到了為ServiceA填充依賴的過程,發現還依賴BeanA,于是將BeanA填充給了ServiceA。
  8.  Spring成功完成了初始化操作。

結論

總結一下這個問題,結論就是:

除了構造注入會導致強依賴以外,一個Bean也會強依賴于暴露他的配置類。

代碼壞味道

寫到這,我已經覺得有點惡心了。誰在寫代碼的時候沒事做還要這么分析依賴,太容易出鍋了吧!那到底有沒有什么方法能避免分析這種惡心的問題呢?

方法其實是有的,那就是遵守下面的代碼規范————不要對有@Configuration注解的配置類進行Field級的依賴注入。

沒錯,對配置類進行依賴注入,幾乎等價于對配置類中的所有Bean增加了一個強依賴,極大的提高了出現無法調解的循環依賴的風險。我們應當將依賴盡可能的縮小,所有依賴只能由真正需要的Bean直接依賴才行。 

 

責任編輯:龐桂玉 來源: java版web項目
相關推薦

2021-09-01 11:45:10

Spring循環依賴面試

2021-09-30 08:40:28

Oracle數據庫后端開發

2020-12-29 08:34:08

spring循環依賴開發

2025-07-28 02:44:00

閉包函數詞法

2015-03-12 09:51:09

CoreDataiCloud

2022-01-03 20:13:08

Gointerface 面試

2023-05-04 08:06:27

Spring循環依賴

2021-02-24 09:43:36

MySQL數據庫雙引號

2024-07-12 08:52:50

2025-10-10 08:23:56

2025-03-17 00:21:00

2019-11-26 14:30:20

Spring循環依賴Java

2020-02-10 15:50:18

Spring循環依賴Java

2017-12-12 09:18:38

DevOpsIT管理系統

2018-06-27 15:18:11

2018-07-12 12:52:50

2022-07-26 01:00:12

Eureka延遲注冊

2024-06-05 11:43:10

2021-05-06 07:58:57

Spring BeanIOCAOP

2024-03-18 00:00:00

SpringBean設計
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区二区三区69堂| 伊人情人网综合| 少妇高潮av久久久久久| 禁果av一区二区三区| 欧美三级电影精品| 黄色特一级视频| 你懂的在线看| 国内精品免费**视频| 2019中文在线观看| 精品国产精品国产精品| 亚洲视频分类| 91精品国产福利在线观看| 337p粉嫩大胆噜噜噜鲁| 美女av在线播放| 91麻豆精品视频| 成人网页在线免费观看| 在线天堂中文字幕| 欧美精品aa| 日韩视频中文字幕| 美女100%无挡| 国产乱人伦精品一区| 欧美吞精做爰啪啪高潮| 国产中文字幕二区| 黄色在线免费看| 国产欧美日韩另类一区| 国产精品免费区二区三区观看| 中文字幕av久久爽| 一本色道久久综合| 欧美国产日韩一区二区| 中国1级黄色片| 国产在视频线精品视频www666| 日韩欧美亚洲国产另类| 亚洲国产成人va在线观看麻豆| 精品丝袜在线| 一区二区三区在线影院| 宅男一区二区三区| 狠狠v欧美ⅴ日韩v亚洲v大胸| 成人av综合在线| 亚洲字幕在线观看| 国产一区二区自拍视频| 日本亚洲最大的色成网站www| 97久久伊人激情网| 日本在线视频免费| 影音先锋日韩资源| 韩日精品中文字幕| 中文字幕一区二区三区手机版 | 欧美日韩国产综合在线| 老司机午夜福利视频| 国产精品自拍网站| 亚洲一区二区免费在线| 国产内射老熟女aaaa∵| 久久99国产精品久久99| 成人免费视频a| 99国产精品久久久久99打野战| 久久69国产一区二区蜜臀| 国产美女被下药99| 91国偷自产中文字幕久久| 秋霞影院一区二区| 国产综合色香蕉精品| 91麻豆成人精品国产免费网站| 欧美96一区二区免费视频| 国产成人精品一区二区三区| 老熟妇一区二区三区| 久久午夜视频| 国产精品网红福利| 97在线视频人妻无码| 国产一区激情在线| 97中文在线观看| 日批视频在线播放| 91麻豆精品秘密| 亚洲不卡1区| 成人高清免费在线播放| 国产精品盗摄一区二区三区| 无码毛片aaa在线| 超黄网站在线观看| 一本到高清视频免费精品| 日韩一级片播放| 日韩黄色三级| 日韩三级中文字幕| 中文字幕在线免费看线人| 亚洲老女人视频免费| 综合网中文字幕| 欧美特级一级片| 亚洲三级视频| 国产精品一区av| 国产丰满美女做爰| 久久久久88色偷偷免费| 在线视频91| 午夜av不卡| 欧美日韩免费观看一区二区三区| 日韩av影视大全| 一区三区在线欧| 久久精品色欧美aⅴ一区二区| 久久久久久福利| 久久精品综合| 亚洲一区亚洲二区亚洲三区| 少妇高潮久久久| 国产精品日产欧美久久久久| 人妻互换免费中文字幕| 成人开心激情| 精品日韩在线观看| 在线观看亚洲大片短视频| 欧美午夜久久| 国产精品爽爽爽| 五月婷中文字幕| 国产精品灌醉下药二区| 黄色影院一级片| 香蕉成人在线| 亚洲女人天堂av| 久草免费新视频| 日本美女视频一区二区| 国产九色91| 福利在线视频网站| 欧洲一区在线电影| 中文字幕乱码在线| 中文字幕乱码亚洲无线精品一区 | 国产精品久久久免费视频| 久久精品国产精品亚洲综合| 另类视频在线观看+1080p| 毛片大全在线观看| 3d成人h动漫网站入口| 一级性生活大片| 在线欧美三区| 91亚洲精品久久久| yourporn在线观看中文站| 午夜精品视频在线观看| 波多野结衣免费观看| 日本道不卡免费一区| 欧美一级视频在线观看| 免费a视频在线观看| 一区二区三区日韩精品视频| 思思久久精品视频| 日本不卡二三区| 国产成人精品视| 国产中文字幕在线看| 精品久久久久久中文字幕大豆网| a级大片免费看| 国产精品毛片久久| 国产美女精品视频免费观看| 国产小视频免费在线观看| 欧美日韩免费在线观看| 欧美在线一级片| 在线日韩中文| 国产精品99久久久久久久| 日本在线视频网址| 日韩丝袜美女视频| 久久精品欧美一区二区| 国产91色综合久久免费分享| 蜜臀av.com| 中文字幕一区日韩精品| 欧美国产日韩免费| 熟妇人妻中文av无码| 午夜不卡av免费| 精品一区二区视频在线观看| 午夜综合激情| 茄子视频成人在线观看| 日本精品网站| www.亚洲天堂| 精品人妻无码一区二区| 夜夜操天天操亚洲| 亚洲香蕉中文网| 国产精品毛片| 日本不卡二区高清三区| 国产亚洲人成a在线v网站| 日韩在线激情视频| av中文字幕免费在线观看| 一区二区在线观看视频在线观看| 天天躁日日躁狠狠躁av麻豆男男| 亚洲视频成人| 日韩亚洲一区在线播放| 色狠狠一区二区三区| 欧美成人精品三级在线观看| 好吊色在线观看| 日韩欧美一区二区在线| 日日操免费视频| 国产精品亚洲一区二区三区妖精| 国产高清www| 美女毛片一区二区三区四区最新中文字幕亚洲 | 欧美日韩国产在线播放网站| 神马午夜精品91| www.亚洲在线| 亚洲天堂网一区| 欧美国产精品| 欧美在线3区| 久久精品免视看国产成人| 午夜免费日韩视频| 在线观看美女网站大全免费| 日韩精品一区二区三区三区免费| 日韩av在线电影| 亚洲国产经典视频| 国产艳妇疯狂做爰视频| 免费看精品久久片| 成人免费在线网| 超碰成人久久| 国产精品入口免费| 国产成人精品一区二区三区在线 | 99综合电影在线视频| 午夜视频在线瓜伦| 欧美日韩国内| 丝袜足脚交91精品| 国产精品网在线观看| 国产日韩亚洲欧美| 三级在线观看视频| 另类视频在线观看| 国产经典自拍视频在线观看| 精品少妇一区二区三区视频免付费 | 亚洲婷婷免费| 一区二区三区av| 亚洲专区视频| 成人3d动漫一区二区三区91| 国产a亚洲精品| 日本老师69xxx| 高清电影在线观看免费| 久久久电影免费观看完整版| 毛片网站在线观看| 亚洲国产一区二区三区四区| 91国在线视频| 色欧美日韩亚洲| www.av麻豆| 亚洲国产成人av好男人在线观看| 国产wwwwxxxx| 中文在线一区二区| 丰满少妇在线观看资源站| 高清久久久久久| 亚洲网中文字幕| 毛片不卡一区二区| 欧美日韩在线成人| 麻豆久久婷婷| 每日在线更新av| 亚洲激情二区| 欧美大黑帍在线播放| 中文字幕一区二区三三| 中国成人亚色综合网站| 日韩av在线播放网址| 日产精品高清视频免费| 美女少妇全过程你懂的久久| 黄色99视频| 久久精品色综合| 国产一区二区三区奇米久涩| 在线精品自拍| 999在线免费观看视频| 国产 日韩 欧美| 91人成网站www| 国产精品99久久免费| 91久久久久久久一区二区| 色综合一区二区日本韩国亚洲| 国产精品扒开腿做| 国产精成人品2018| 国产精品露脸av在线| 黄色成人小视频| 成人久久久久久| 日韩免费大片| 91精品综合久久久久久五月天| 亚洲a成人v| 7777精品伊久久久大香线蕉语言| 日韩欧美中文在线观看| 99免费在线观看视频| 欧美绝顶高潮抽搐喷水合集| 久久人人97超碰人人澡爱香蕉| 精品一区在线| 亚洲精品不卡| 中文字幕免费一区二区三区| 国产一区二区三区乱码| 国产一区白浆| www.xxx亚洲| 精品在线一区二区| 日本中文字幕精品| av在线这里只有精品| 91网站免费入口| 国产精品理伦片| 久久午夜无码鲁丝片午夜精品| 亚洲第一主播视频| 国产一级一级国产| 欧美日韩电影一区| 亚洲精品喷潮一区二区三区| 亚洲国产欧美一区二区丝袜黑人| 免费在线稳定资源站| 日韩中文字幕久久| 成人在线免费观看黄色| 国产成人涩涩涩视频在线观看| 自拍偷拍亚洲图片| 久久99影院| 日韩精品一区二区久久| 久久久久久久9| 日韩精品每日更新| 日本一区二区三区在线免费观看| 2欧美一区二区三区在线观看视频| 精品亚洲aⅴ无码一区二区三区| 亚洲精品免费电影| 神马久久久久久久| 91精品国产全国免费观看| 日本天堂在线| 久久国产视频网站| 国产精欧美一区二区三区蓝颜男同| 国产一区深夜福利| 青青草久久爱| 激情图片qvod| 日韩av电影天堂| 国产chinese中国hdxxxx| 国产精品久久久久久久久搜平片| 国产一级片免费观看| 欧美性xxxxx极品少妇| 手机在线观看免费av| 精品国偷自产在线| 婷婷午夜社区一区| 国产精品我不卡| 色天天综合网| 日韩亚洲在线视频| 成人深夜在线观看| 欧美特级一级片| 欧美色图12p| 欧美偷拍视频| 久久久免费在线观看| 亚洲精品tv| 西游记1978| 亚洲欧美日韩综合国产aⅴ| 国内自拍偷拍视频| 1024国产精品| 中文字幕在线观看高清| 亚洲视频视频在线| 国产调教在线| 国产精品日本一区二区| 欧美黄在线观看| 午夜av中文字幕| 国产精品精品国产色婷婷| 成人免费毛片视频| 日韩经典中文字幕| 极品av在线| 精品国产一区二区三区麻豆小说 | 韩国精品福利一区二区三区| 久久免费视频2| 理论片日本一区| 少妇av片在线观看| 欧美亚洲一区三区| www免费网站在线观看| 日韩av免费在线看| 神马久久av| 日本三级免费网站| 99re这里只有精品视频首页| 久久精品国产亚洲AV无码麻豆| 精品日韩欧美一区二区| 久草在线视频福利| http;//www.99re视频| 欧美精品一区二区三区久久久竹菊| 一区二区久久精品| 亚洲品质自拍视频| www国产一区| 欧美黑人性猛交| 91在线一区| 18岁网站在线观看| 91丨国产丨九色丨pron| 黄色一级视频免费看| 亚洲最大中文字幕| 日日狠狠久久| 97久久国产亚洲精品超碰热| 大美女一区二区三区| 精品美女久久久久| 亚洲欧美一区二区三区四区| av高清一区| 亚洲第一在线综合在线| 精彩视频一区二区三区| 久久久精品人妻一区二区三区四| 日韩免费一区二区| 女人高潮被爽到呻吟在线观看 | 欧美男男同志| 日产日韩在线亚洲欧美| 日韩精品久久| 男人操女人下面视频| 亚洲成人动漫在线观看| 欧洲天堂在线观看| 国产欧美精品久久久| 欧美午夜在线| 亚洲自拍偷拍一区二区| 欧美日韩专区在线| 日韩三级免费| 欧美日韩在线观看一区| 久久福利资源站| 久久久久久久伊人| 亚洲午夜精品久久久久久性色| 亚洲一区av| 欧美激情 国产精品| 国产欧美一区二区三区网站| 99久久国产免费| 97成人在线视频| 欧美a级成人淫片免费看| 国产精品一区二区无码对白| 一本到高清视频免费精品| 91国内在线| 欧美日韩一区二区视频在线| 国产一区二区三区蝌蚪| 九九热在线免费观看| 久久久精品久久久| 国产成人精品免费视| 中文字幕一二三区| 欧洲色大大久久| mm视频在线视频| 400部精品国偷自产在线观看 | 欧美日韩亚洲综合一区二区三区激情在线| 精油按摩中文字幕久久| 亚洲va在线观看|