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

Springboot源碼分析之Spring循環(huán)依賴揭秘

新聞 前端
若你是一個(gè)有經(jīng)驗(yàn)的程序員,那你在開發(fā)中必然碰到過這種現(xiàn)象:事務(wù)不生效。或許剛說到這,有的小伙伴就會(huì)大驚失色了。

摘要:

若你是一個(gè)有經(jīng)驗(yàn)的程序員,那你在開發(fā)中必然碰到過這種現(xiàn)象:事務(wù)不生效。或許剛說到這,有的小伙伴就會(huì)大驚失色了。 Spring 不是解決了循環(huán)依賴問題嗎,它是怎么又會(huì)發(fā)生循環(huán)依賴的呢?,接下來就讓我們一起揭秘 Spring 循環(huán)依賴的最本質(zhì)原因。

Spring循環(huán)依賴流程圖

Spring循環(huán)依賴發(fā)生原因

  • 使用了具有代理特性的BeanPostProcessor
  • 典型的有 事務(wù)注解@Transactional,異步注解@Async等 

源碼分析揭秘

  1. protected Object doCreateBean( ... ){ 
  2.         ... 
  3.         boolean earlySingletonExposure = (mbd.isSingleton() && this.allowCircularReferences && isSingletonCurrentlyInCreation(beanName)); 
  4.         if (earlySingletonExposure) { 
  5.             addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean)); 
  6.         } 
  7.         ... 
  8.      
  9.         // populateBean這一句特別的關(guān)鍵,它需要給A的屬性賦值,所以此處會(huì)去實(shí)例化B~~ 
  10.         // 而B我們從上可以看到它就是個(gè)普通的Bean(并不需要?jiǎng)?chuàng)建代理對(duì)象),實(shí)例化完成之后,繼續(xù)給他的屬性A賦值,而此時(shí)它會(huì)去拿到A的早期引用 
  11.         // 也就在此處在給B的屬性a賦值的時(shí)候,會(huì)執(zhí)行到上面放進(jìn)去的Bean A流程中的getEarlyBeanReference()方法  從而拿到A的早期引用~~ 
  12.         // 執(zhí)行A的getEarlyBeanReference()方法的時(shí)候,會(huì)執(zhí)行自動(dòng)代理創(chuàng)建器,但是由于A沒有標(biāo)注事務(wù),所以最終不會(huì)創(chuàng)建代理,so B合格屬性引用會(huì)是A的**原始對(duì)象** 
  13.         // 需要注意的是:@Async的代理對(duì)象不是在getEarlyBeanReference()中創(chuàng)建的,是在postProcessAfterInitialization創(chuàng)建的代理 
  14.         // 從這我們也可以看出@Async的代理它默認(rèn)并不支持你去循環(huán)引用,因?yàn)樗]有把代理對(duì)象的早期引用提供出來~~~(注意這點(diǎn)和自動(dòng)代理創(chuàng)建器的區(qū)別~) 
  15.      
  16.         // 結(jié)論:此處給A的依賴屬性字段B賦值為了B的實(shí)例(因?yàn)锽不需要?jiǎng)?chuàng)建代理,所以就是原始對(duì)象) 
  17.         // 而此處實(shí)例B里面依賴的A注入的仍舊為Bean A的普通實(shí)例對(duì)象(注意  是原始對(duì)象非代理對(duì)象)  注:此時(shí)exposedObject也依舊為原始對(duì)象 
  18.         populateBean(beanName, mbd, instanceWrapper); 
  19.          
  20.         // 標(biāo)注有@Async的Bean的代理對(duì)象在此處會(huì)被生成~~~ 參照類:AsyncAnnotationBeanPostProcessor 
  21.         // 所以此句執(zhí)行完成后  exposedObject就會(huì)是個(gè)代理對(duì)象而非原始對(duì)象了 
  22.         exposedObject = initializeBean(beanName, exposedObject, mbd); 
  23.          
  24.         ... 
  25.         // 這里是報(bào)錯(cuò)的重點(diǎn)~~~ 
  26.         if (earlySingletonExposure) { 
  27.             // 上面說了A被B循環(huán)依賴進(jìn)去了,所以此時(shí)A是被放進(jìn)了二級(jí)緩存的,所以此處earlySingletonReference 是A的原始對(duì)象的引用 
  28.             // (這也就解釋了為何我說:如果A沒有被循環(huán)依賴,是不會(huì)報(bào)錯(cuò)不會(huì)有問題的   因?yàn)槿魶]有循環(huán)依賴earlySingletonReference =null后面就直接return了) 
  29.             Object earlySingletonReference = getSingleton(beanName, false); 
  30.             if (earlySingletonReference != null) { 
  31.                 // 上面分析了exposedObject 是被@Aysnc代理過的對(duì)象, 而bean是原始對(duì)象 所以此處不相等  走else邏輯 
  32.                 if (exposedObject == bean) { 
  33.                     exposedObject = earlySingletonReference; 
  34.                 } 
  35.                 // allowRawInjectionDespiteWrapping 標(biāo)注是否允許此Bean的原始類型被注入到其它Bean里面,即使自己最終會(huì)被包裝(代理) 
  36.                 // 默認(rèn)是false表示不允許,如果改為true表示允許,就不會(huì)報(bào)錯(cuò)啦。這是我們后面講的決方案的其中一個(gè)方案~~~ 
  37.                 // 另外dependentBeanMap記錄著每個(gè)Bean它所依賴的Bean的Map~~~~ 
  38.                 else if (!this.allowRawInjectionDespiteWrapping && hasDependentBean(beanName)) { 
  39.                     // 我們的Bean A依賴于B,so此處值為["b"] 
  40.                     String[] dependentBeans = getDependentBeans(beanName); 
  41.                     Set<String> actualDependentBeans = new LinkedHashSet<>(dependentBeans.length); 
  42.      
  43.                     // 對(duì)所有的依賴進(jìn)行一一檢查~    比如此處B就會(huì)有問題 
  44.                     // “b”它經(jīng)過removeSingletonIfCreatedForTypeCheckOnly最終返返回false  因?yàn)閍lreadyCreated里面已經(jīng)有它了表示B已經(jīng)完全創(chuàng)建完成了~~~ 
  45.                     // 而b都完成了,所以屬性a也賦值完成兒聊 但是B里面引用的a和主流程我這個(gè)A竟然不相等,那肯定就有問題(說明不是最終的)~~~ 
  46.                     // so最終會(huì)被加入到actualDependentBeans里面去,表示A真正的依賴~~~ 
  47.                     for (String dependentBean : dependentBeans) { 
  48.                         if (!removeSingletonIfCreatedForTypeCheckOnly(dependentBean)) { 
  49.                             actualDependentBeans.add(dependentBean); 
  50.                         } 
  51.                     } 
  52.          
  53.                     // 若存在這種真正的依賴,那就報(bào)錯(cuò)了~~~  則個(gè)異常就是上面看到的異常信息 
  54.                     if (!actualDependentBeans.isEmpty()) { 
  55.                         throw new BeanCurrentlyInCreationException(beanName, 
  56.                                 "Bean with name '" + beanName + "' has been injected into other beans [" + 
  57.                                 StringUtils.collectionToCommaDelimitedString(actualDependentBeans) + 
  58.                                 "] in its raw version as part of a circular reference, but has eventually been " + 
  59.                                 "wrapped. This means that said other beans do not use the final version of the " + 
  60.                                 "bean. This is often the result of over-eager type matching - consider using " + 
  61.                                 "'getBeanNamesOfType' with the 'allowEagerInit' flag turned off, for example."); 
  62.                     } 
  63.                 } 
  64.             } 
  65.         } 
  66.         ... 
  67.     } 

問題簡化

  • 發(fā)生循環(huán)依賴時(shí)候 Object earlySingletonReference = getSingleton(beanName, false); 肯定有值
  • 緩存工廠 addSingletonFactory(beanName, () -> getEarlyBeanReference(beanName, mbd, bean)); 將給實(shí)例對(duì)象添加 SmartInstantiationAwareBeanPostProcessor
  • AbstractAutoProxyCreator 是 SmartInstantiationAwareBeanPostProcessor 的子類,一定記住了,一定記住, SmartInstantiationAwareBeanPostProcessor 的子類很關(guān)鍵!!!!!
  • exposedObject = initializeBean(beanName, exposedObject, mbd); 進(jìn)行 BeanPostProcessor后置處理,注意是 BeanPostProcessor !!!!!

Spring 的循環(huán)依賴被它的三級(jí)緩存給輕易解決了,但是這2個(gè)地方的后置處理帶來了 循環(huán)依賴的問題。

對(duì)比AbstractAdvisorAutoProxyCreator和AsyncAnnotationBeanPostProcessor

由于 SmartInstantiationAwareBeanPostProcessor 的子類會(huì)在兩處都會(huì)執(zhí)行后置處理,所以前后都會(huì)相同的對(duì)象引用,不會(huì)發(fā)生循環(huán)依賴問題,異步注解就不行了 ,至于為什么?自己看上面的分析,仔細(xì)看哦!

如何解決循環(huán)依賴?

  • 改變加載順序
  • @Lazy 注解
  • allowRawInjectionDespiteWrapping 設(shè)置為 true (利用了判斷的那條語句)
  • 別使用相關(guān)的 BeanPostProcessor 設(shè)計(jì)到的注解,,哈哈 這不太現(xiàn)實(shí)。 
     

@Lazy

@Lazy 一般含義是懶加載,它只會(huì)作用于 BeanDefinition.setLazyInit() 。而此處給它增加了一個(gè)能力:延遲處理(代理處理)

  1. // @since 4.0 出現(xiàn)得挺晚,它支持到了@Lazy  是功能最全的AutowireCandidateResolver 
  2.     public class ContextAnnotationAutowireCandidateResolver extends QualifierAnnotationAutowireCandidateResolver { 
  3.         // 這是此類本身唯一做的事,此處精析  
  4.         // 返回該 lazy proxy 表示延遲初始化,實(shí)現(xiàn)過程是查看在 @Autowired 注解處是否使用了 @Lazy = true 注解  
  5.         @Override 
  6.         @Nullable 
  7.         public Object getLazyResolutionProxyIfNecessary(DependencyDescriptor descriptor, @Nullable String beanName) { 
  8.             // 如果isLazy=true  那就返回一個(gè)代理,否則返回null 
  9.             // 相當(dāng)于若標(biāo)注了@Lazy注解,就會(huì)返回一個(gè)代理(當(dāng)然@Lazy注解的value值不能是false) 
  10.             return (isLazy(descriptor) ? buildLazyResolutionProxy(descriptor, beanName) : null); 
  11.         } 
  12.      
  13.         // 這個(gè)比較簡單,@Lazy注解標(biāo)注了就行(value屬性默認(rèn)值是true) 
  14.         // @Lazy支持標(biāo)注在屬性上和方法入?yún)⑸蟸~~  這里都會(huì)解析 
  15.         protected boolean isLazy(DependencyDescriptor descriptor) { 
  16.             for (Annotation ann : descriptor.getAnnotations()) { 
  17.                 Lazy lazy = AnnotationUtils.getAnnotation(ann, Lazy.class); 
  18.                 if (lazy != null && lazy.value()) { 
  19.                     return true
  20.                 } 
  21.             } 
  22.             MethodParameter methodParam = descriptor.getMethodParameter(); 
  23.             if (methodParam != null) { 
  24.                 Method method = methodParam.getMethod(); 
  25.                 if (method == null || void.class == method.getReturnType()) { 
  26.                     Lazy lazy = AnnotationUtils.getAnnotation(methodParam.getAnnotatedElement(), Lazy.class); 
  27.                     if (lazy != null && lazy.value()) { 
  28.                         return true
  29.                     } 
  30.                 } 
  31.             } 
  32.             return false
  33.         } 
  34.      
  35.         // 核心內(nèi)容,是本類的靈魂~~~ 
  36.         protected Object buildLazyResolutionProxy(final DependencyDescriptor descriptor, final @Nullable String beanName) { 
  37.             Assert.state(getBeanFactory() instanceof DefaultListableBeanFactory, 
  38.                     "BeanFactory needs to be a DefaultListableBeanFactory"); 
  39.      
  40.             // 這里毫不客氣的使用了面向?qū)崿F(xiàn)類編程,使用了DefaultListableBeanFactory.doResolveDependency()方法~~~ 
  41.             final DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) getBeanFactory(); 
  42.      
  43.             //TargetSource 是它實(shí)現(xiàn)懶加載的核心原因,在AOP那一章節(jié)了重點(diǎn)提到過這個(gè)接口,此處不再敘述 
  44.             // 它有很多的著名實(shí)現(xiàn)如HotSwappableTargetSource、SingletonTargetSource、LazyInitTargetSource、 
  45.             //SimpleBeanTargetSource、ThreadLocalTargetSource、PrototypeTargetSource等等非常多 
  46.             // 此處因?yàn)橹恍枰约河茫圆捎媚涿麅?nèi)部類的方式實(shí)現(xiàn)~~~ 此處最重要是看getTarget方法,它在被使用的時(shí)候(也就是代理對(duì)象真正使用的時(shí)候執(zhí)行~~~) 
  47.             TargetSource ts = new TargetSource() { 
  48.                 @Override 
  49.                 public Class<?> getTargetClass() { 
  50.                     return descriptor.getDependencyType(); 
  51.                 } 
  52.                 @Override 
  53.                 public boolean isStatic() { 
  54.                     return false
  55.                 } 
  56.          
  57.                 // getTarget是調(diào)用代理方法的時(shí)候會(huì)調(diào)用的,所以執(zhí)行每個(gè)代理方法都會(huì)執(zhí)行此方法,這也是為何doResolveDependency 
  58.                 // 我個(gè)人認(rèn)為它在效率上,是存在一定的問題的~~~所以此處建議盡量少用@Lazy~~~    
  59.                 //不過效率上應(yīng)該還好,對(duì)比http、序列化反序列化處理,簡直不值一提  所以還是無所謂  用吧 
  60.                 @Override 
  61.                 public Object getTarget() { 
  62.                     Object target = beanFactory.doResolveDependency(descriptor, beanName, nullnull); 
  63.                     if (target == null) { 
  64.                         Class<?> type = getTargetClass(); 
  65.                         // 對(duì)多值注入的空值的友好處理(不要用null) 
  66.                         if (Map.class == type) { 
  67.                             return Collections.emptyMap(); 
  68.                         } else if (List.class == type) { 
  69.                             return Collections.emptyList(); 
  70.                         } else if (Set.class == type || Collection.class == type) { 
  71.                             return Collections.emptySet(); 
  72.                         } 
  73.                         throw new NoSuchBeanDefinitionException(descriptor.getResolvableType(), 
  74.                                 "Optional dependency not present for lazy injection point"); 
  75.                     } 
  76.                     return target; 
  77.                 } 
  78.                 @Override 
  79.                 public void releaseTarget(Object target) { 
  80.                 } 
  81.             };    
  82.      
  83.             // 使用ProxyFactory  給ts生成一個(gè)代理 
  84.             // 由此可見最終生成的代理對(duì)象的目標(biāo)對(duì)象其實(shí)是TargetSource,而TargetSource的目標(biāo)才是我們業(yè)務(wù)的對(duì)象 
  85.             ProxyFactory pf = new ProxyFactory(); 
  86.             pf.setTargetSource(ts); 
  87.             Class<?> dependencyType = descriptor.getDependencyType(); 
  88.              
  89.             // 如果注入的語句是這么寫的private AInterface a;  那這類就是借口 值是true 
  90.             // 把這個(gè)接口類型也得放進(jìn)去(不然這個(gè)代理都不屬于這個(gè)類型,反射set的時(shí)候豈不直接報(bào)錯(cuò)了嗎????) 
  91.             if (dependencyType.isInterface()) { 
  92.                 pf.addInterface(dependencyType); 
  93.             } 
  94.             return pf.getProxy(beanFactory.getBeanClassLoader()); 
  95.         } 
  96.     } 

標(biāo)注有 @Lazy 注解完成注入的時(shí)候,最終注入只是一個(gè)此處臨時(shí)生成的代理對(duì)象,只有在真正執(zhí)行目標(biāo)方法的時(shí)候才會(huì)去容器內(nèi)拿到真是的 bean 實(shí)例來執(zhí)行目標(biāo)方法。

利用allowRawInjectionDespiteWrapping屬性來強(qiáng)制改變判斷

  1. @Component 
  2.     public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor { 
  3.         @Override 
  4.         public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { 
  5.             ((AbstractAutowireCapableBeanFactory) beanFactory).setAllowRawInjectionDespiteWrapping(true); 
  6.         } 
  7.     } 

這樣會(huì)導(dǎo)致容器里面的是代理對(duì)象,暴露給其他實(shí)例的是原始引用,導(dǎo)致不生效了。由于它只對(duì)循環(huán)依賴內(nèi)的 Bean 受影響,所以影響范圍并不是全局,因此當(dāng)找不到更好辦法的時(shí)候,此種這樣也不失是一個(gè)不錯(cuò)的方案。

責(zé)任編輯:張燕妮 來源: 博客園精華區(qū)
相關(guān)推薦

2022-08-17 07:52:31

Spring循環(huán)依賴單例池

2023-05-04 08:06:27

Spring循環(huán)依賴

2025-03-17 00:21:00

2022-05-12 18:30:12

SpringBoot循環(huán)依賴初始化

2021-05-06 07:58:57

Spring BeanIOCAOP

2024-06-05 11:43:10

2021-09-01 11:45:10

Spring循環(huán)依賴面試

2022-01-26 10:29:24

微服務(wù)循環(huán)依賴代碼

2020-05-18 08:11:57

Spring循環(huán)依賴

2024-09-09 09:29:05

2020-05-07 10:05:58

Spring循環(huán)依賴Java

2023-10-07 08:40:57

緩存屬性Spring

2021-06-25 09:47:59

Spring循環(huán)依賴Java

2020-07-29 10:40:21

Spring循環(huán)依賴Java

2020-02-10 15:50:18

Spring循環(huán)依賴Java

2020-10-21 09:11:52

Spring Boot源碼分析代碼

2011-05-26 10:05:48

MongoDB

2021-10-21 08:31:31

Spring循環(huán)依賴面試

2019-11-26 14:30:20

Spring循環(huán)依賴Java

2024-08-27 11:00:56

單例池緩存bean
點(diǎn)贊
收藏

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

亚洲综合图片区| 亚洲精品卡一卡二| 黄色在线视频网址| 狠狠久久综合| 欧美日韩中文| 在线观看成人小视频| 91在线视频免费| 91精产国品一二三| 电影在线一区| 日韩美女国产精品| 一区二区三区在线影院| 91精品啪在线观看麻豆免费| 久久网免费视频| 日韩激情综合| 国产精品久久久久9999吃药| 欧美一级电影免费在线观看| 欧美一级片在线免费观看| 亚洲日本天堂| 91蜜桃传媒精品久久久一区二区| 欧美激情视频给我| 国产精品久久久久久久99| 香蕉视频国产在线观看| 日韩经典中文字幕一区| 亚洲视频专区在线| 日韩在线第三页| 天天舔天天干天天操| 欧美88av| 精品国产乱码久久久久久1区2区 | 欧美一级一区二区三区| 中文字幕一区二区精品区| 91麻豆精品国产综合久久久久久 | 亚洲精品888| 欧美精选在线播放| 欧美日韩一区二区三区电影| 艳妇乳肉豪妇荡乳av无码福利| 免费看av成人| 欧美视频三区在线播放| 欧洲高清一区二区| 69成人免费视频| 国产成人ay| 欧美日韩一本到| 波多野结衣家庭教师在线| 香蕉视频国产在线| 日本亚洲最大的色成网站www| 日韩在线观看免费网站| 午夜免费看毛片| 国产91在线视频蝌蚪| 国产精品中文字幕日韩精品| 久久久精品视频成人| 黄色小视频免费网站| 欧美xxxxxx| 国产精品欧美久久久久一区二区| 成人激情视频在线播放| 国产一级视频在线播放| 亚洲精品白浆高清| 欧美日韩精品一区视频| 69精品丰满人妻无码视频a片| 亚洲国产精品二区| 欧美亚洲网站| 久久精品成人动漫| 小早川怜子一区二区的演员表| 亚洲成人五区| 欧美成人精品二区三区99精品| 91av资源网| 在线免费观看黄| k8久久久一区二区三区| 国产精品第一第二| 精品一区在线视频| 在线欧美一区| 日韩专区在线播放| 少妇激情一区二区三区视频| 国产福利91精品一区二区| 亚洲国产人成综合网站| 欧美亚洲国产免费| 亚洲av综合色区无码一二三区 | caoporn国产精品免费公开| 亚洲欧美在线观看视频| 欧美r级电影| 亚洲国产日韩一区| 成人av毛片在线观看| 天堂中文最新版在线中文| 欧美午夜性色大片在线观看| 大陆极品少妇内射aaaaaa| 青青在线视频| 国产精品色一区二区三区| 亚洲一区二区三区欧美| 你懂的在线网址| 精品一区二区影视| 欧美中文字幕精品| 日韩aaaaaa| 伊人久久大香线蕉综合四虎小说| 欧美国产日韩精品| 在线精品免费视| 久久99久久久欧美国产| 国产精品日韩高清| 国产欧美一级片| 久久福利一区| 91精品国产91久久久久久最新| 波多野结衣久久久久| 欧美午夜久久| 国产精品久久久久9999| 丰满人妻妇伦又伦精品国产| 国产一区二区在线观看免费| 国产欧美久久久久久| 五月天婷婷导航| 国产裸体歌舞团一区二区| 久久久久网址| 婷婷国产在线| 成人性视频免费网站| 91成人免费在线观看| 国产精品怡红院| 韩国三级在线一区| 91香蕉亚洲精品| 欧美大片aaa| 亚洲午夜羞羞片| 国产精品久久国产| 深夜国产在线播放| 亚洲一区二区在线视频| 在线观看av日韩| 国产亚洲欧美日韩精品一区二区三区| 欧美va在线播放| 午夜成人亚洲理伦片在线观看| 性色一区二区| 九九九九九精品| 欧美xxxx做受欧美88bbw| 欧美精三区欧美精三区| 手机看片日韩av| 一区二区小说| 97视频在线观看视频免费视频| 五月天婷婷丁香| 韩日精品视频一区| 在线视频欧美一区| 2020国产在线视频| 亚洲v日本v欧美v久久精品| 黄色大片中文字幕| 亚洲黄色网址| 亚洲成在人线av| 亚洲精品一区二区三区影院忠贞| 欧美理论在线播放| 久久久精品国产网站| 日本熟妇一区二区三区| 狠狠色丁香九九婷婷综合五月| 欧美性天天影院| 3d欧美精品动漫xxxx无尽| 欧美剧情片在线观看| x88av在线| 喷水一区二区三区| 亚洲精品乱码久久久久久蜜桃91 | 亚洲网站在线免费观看| 韩国欧美国产1区| 天天成人综合网| 7777kkk亚洲综合欧美网站| 日韩欧美精品网址| 欧美大片免费播放器| 日韩av有码| 欧美成人免费观看| 天天操夜夜操视频| 久久综合色鬼综合色| 在线一区日本视频| 高清一区二区| 亚洲欧美日韩高清| 天天综合天天做| 美女黄网久久| 视频一区视频二区视频三区高| 羞羞污视频在线观看| 日韩视频永久免费| 五月婷婷六月香| 亚洲尤物精选| 欧美视频小说| 亚洲国产91视频| 亚洲欧美精品中文字幕在线| 精品视频一二三区| 国产精品人妖ts系列视频| 亚洲无在线观看| 黑人一区二区| 成人精品久久一区二区三区| 黄色成人在线| 在线观看一区二区精品视频| 女人十八毛片嫩草av| 国产一区二区三区黄视频 | 日韩中文影院| 久久久精品国产亚洲| 手机看片福利在线| 欧美艳星brazzers| 妺妺窝人体色www在线下载| 男人的天堂亚洲一区| 国产精品一区二区三区在线| 色在线视频观看| 精品国产91乱码一区二区三区| www.国产高清| 懂色一区二区三区免费观看| 欧美性视频在线播放| 国产劲爆久久| 精品视频9999| 国产精品亚洲欧美在线播放| 亚洲国产美国国产综合一区二区| 黄免费在线观看| 老司机免费视频久久| 国产一区二区三区av在线| 18视频在线观看| 亚洲男人天堂2023| 国产aⅴ爽av久久久久成人| 中文幕一区二区三区久久蜜桃| 欧美 日韩 国产在线观看| 日韩国产综合| 久久精品国产一区二区三区日韩| 日韩欧美三区| 国产成人97精品免费看片| 天堂中文在线视频| 4438x亚洲最大成人网| 五月婷婷色丁香| 亚洲精品国久久99热| 日本黄色小视频在线观看| thepron国产精品| 精产国品一区二区三区| 国产综合网站| 一本色道久久综合亚洲二区三区| 日韩中文av| 国产乱码一区| 亚洲高清在线一区| 91精品中国老女人| 日韩在线免费| 日韩av理论片| 888av在线| 亚洲女成人图区| 五月天婷婷在线播放| 欧美v国产在线一区二区三区| 国产精品天天操| 欧美日韩在线播| 中文文字幕一区二区三三| 亚洲欧洲日韩女同| 手机在线播放av| 久久精品国产一区二区三区免费看| 午夜一区二区三视频在线观看| 日本一道高清一区二区三区| 日本亚洲欧美成人| 九九色在线视频| 亚洲欧美国产va在线影院| 狠狠躁日日躁夜夜躁av| 日韩精品一区二区三区在线| 欧美另类一区二区| 亚洲mv大片欧洲mv大片精品| 久久免费播放视频| 一区二区久久久久| 国产一级在线视频| 午夜影视日本亚洲欧洲精品| 国产真人真事毛片| 亚洲成av人在线观看| 午夜精品三级久久久有码| 午夜精品爽啪视频| 欧美国产成人精品一区二区三区| 欧美色视频日本高清在线观看| 国产综合精品视频| 91国在线观看| 免费在线一级片| 亚洲一本大道在线| 日本少妇xxxx动漫| 欧美日韩在线另类| 丁香花五月激情| 亚洲永久精品大片| 日韩免费观看一区二区| 狠狠躁夜夜躁久久躁别揉| 三级网站在线播放| 亚洲人成亚洲人成在线观看图片| 男人添女荫道口女人有什么感觉| heyzo高清在线| 久久久噜噜噜久久久| 国产毛片一区二区三区va在线| 欧美精品色一区二区三区| 国产孕妇孕交大片孕| 精品日产卡一卡二卡麻豆| 五月激情婷婷综合| 一本色道久久88精品综合| www.色呦呦| 精品视频全国免费看| 97视频免费在线| 精品精品国产高清a毛片牛牛 | 日本三级一区| 国产精品高潮呻吟久久av野狼 | 精品日韩美女| 日韩毛片免费看| av一区二区在线看| 网友自拍区视频精品| 一区二区三区四区在线视频| 狠狠色丁香久久综合频道| 日韩精品视频一区二区在线观看| 奇米影视一区二区三区| 香蕉视频污视频| 国产精品一二三四五| 亚洲国产精品第一页| 久久爱www久久做| 久久无码专区国产精品s| 久久久一区二区| www.超碰97| 99免费精品视频| 国产农村妇女精品一区| 亚洲高清中文字幕| 日韩xxx视频| 亚洲高清不卡av| 免费观看在线黄色网| 中国日韩欧美久久久久久久久| 午夜成人免费影院| 久久人人爽亚洲精品天堂| 黄网在线免费| 亚洲欧洲中文天堂| 欧美人与禽猛交乱配| 国产精品视频1区| 国产三级一区| 久久久久久亚洲精品不卡4k岛国| 影视亚洲一区二区三区| 波多野结衣天堂| a在线播放不卡| 精品一区在线观看视频| 欧美三级日韩三级| 欧美色18zzzzxxxxx| 欧美激情欧美激情| 99综合久久| 99在线首页视频| 欧美激情另类| 日韩视频在线免费看| 天堂资源在线中文精品| 极品白嫩的小少妇| 成人欧美一区二区三区小说| 日本视频免费观看| 日韩av一区在线观看| 久久天堂电影| 97在线观看视频| 精品三级av在线导航| 久久天天狠狠| 极品日韩av| 9.1在线观看免费| 亚洲另类在线视频| 国产无遮挡aaa片爽爽| 911精品国产一区二区在线| 99青草视频在线播放视| 国产成人一区二区三区| 欧美精品momsxxx| 日本在线视频www| ww亚洲ww在线观看国产| av中文在线播放| 亚洲女人天堂成人av在线| 忘忧草在线影院两性视频| 久久亚洲综合网| 999精品视频| 成年人三级黄色片| 日韩一区中文字幕| 国产高中女学生第一次| 久久99热精品这里久久精品| 亚州一区二区| 亚洲人成无码网站久久99热国产 | 青青草自拍偷拍| 欧美日韩精品专区| av毛片在线看| 成人在线观看av| 国产欧美日韩视频在线| mm1313亚洲国产精品无码试看| 国产午夜精品理论片a级大结局| 免费在线观看一级片| 色偷偷88欧美精品久久久| 国产婷婷在线视频| 欧美大学生性色视频| 极品束缚调教一区二区网站| 内射国产内射夫妻免费频道| 久久蜜桃一区二区| 中文在线a天堂| 欧美乱妇高清无乱码| 久久电影在线| 亚洲欧美另类动漫| 亚洲精品午夜久久久| 人妻一区二区三区四区| 国产v综合ⅴ日韩v欧美大片| 日韩免费久久| 国产精九九网站漫画| 一本色道综合亚洲| 久操视频在线免费播放| 国产精品日韩一区二区三区 | 日韩av观看网址| 午夜激情久久| 国产精品第12页| 中文字幕不卡的av| 国产丰满果冻videossex| 97精品国产91久久久久久| av影片在线一区| 成人一区二区三区仙踪林| 91福利国产精品| 新版中文在线官网| 日本在线视频一区| 奶水喷射视频一区| 亚洲人与黑人屁股眼交| 亚洲国产欧美在线成人app| 另类一区二区三区| 男女超爽视频免费播放| 99免费精品视频| 在线免费av网| 91精品国产91久久久久久吃药| 999精品视频| 免费看污片的网站| 亚洲福利视频专区| 国产精品一区二区精品视频观看 | 欧美xxxx做受欧美护士|