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

Spring如何使用三級(jí)緩存解決循環(huán)依賴

開發(fā) 前端
三級(jí)緩存中存儲(chǔ)的是單利工廠緩存,通過調(diào)用該對(duì)象的 GetObject 方法,可以獲取到早期暴露出去的 Bean;在該 Bean 要被其他 Bean 引用時(shí),Spring 就會(huì)用工廠對(duì)象創(chuàng)建出該 Bean 的實(shí)例對(duì)象,最終當(dāng)該 Bean 完成構(gòu)造的所有步驟后就會(huì)將該 Bean 放入到一級(jí)緩存中。

1. 前言

在日常開發(fā)中,Bean之間的循環(huán)依賴非常常見,Spring 已經(jīng)幫我們做到使用無感知處理,那么 Spring 是如何實(shí)現(xiàn)的呢?

2. 循環(huán)依賴簡介

2.1 什么是循環(huán)依賴

循環(huán)依賴是指兩個(gè)或多個(gè)對(duì)象存在相互依賴、相互引用的關(guān)系,而這種引用形成一個(gè)環(huán)時(shí),就會(huì)出現(xiàn)循環(huán)引用,如圖:

圖片圖片

public class PersonA { 
  @Autowired
  private PersonB personB;
}
public class PersonB {
  @Autowired
  private PersonA personA;
}

2.2 Spring 處理循環(huán)依賴的前提條件

1.相互依賴的 Bean 必須為單利;

因?yàn)槿绻看握?qǐng)求都創(chuàng)建一個(gè) Bean,那么在處理循環(huán)依賴的時(shí)候,每次都會(huì)產(chǎn)生一個(gè)新的 Bean 實(shí)例,由于沒有全局的實(shí)例 Bean 緩存,則無法處理循環(huán)依賴

2.依賴注入的方式不能都是構(gòu)造函數(shù)注入的方式。

使用構(gòu)造函數(shù)注入,Bean 實(shí)例在構(gòu)造函數(shù)沒有完全被調(diào)用時(shí)是不會(huì)創(chuàng)建的;因?yàn)?PersonA 引用 PersonB,PersonB 又引用 PersonA,兩者都無法進(jìn)行初始化,產(chǎn)生了死鎖

3. 三級(jí)緩存原理

3.1 什么是三級(jí)緩存

Spring 是通過三級(jí)緩存的方式處理循環(huán)依賴,三級(jí)緩存是 Spring Bean 在各個(gè)階段的緩存

一級(jí)緩存(SingletonObjects):

存放已經(jīng)完全實(shí)例化、初始化的bean,實(shí)現(xiàn)了單利bean只會(huì)實(shí)例化和初始化一次

二級(jí)緩存(EarlySingletonObjects):

存放早期暴露出來的Bean對(duì)象,bean的生命周期還未完成(未完成屬性注入與初始化的bean)

三級(jí)緩存(SingletonFactories):

三級(jí)緩存中存儲(chǔ)的是單利工廠緩存,通過調(diào)用該對(duì)象的 GetObject 方法,可以獲取到早期暴露出去的 Bean;在該 Bean 要被其他 Bean 引用時(shí),Spring 就會(huì)用工廠對(duì)象創(chuàng)建出該 Bean 的實(shí)例對(duì)象,最終當(dāng)該 Bean 完成構(gòu)造的所有步驟后就會(huì)將該 Bean 放入到一級(jí)緩存中

/** 一級(jí)緩存 */
private final Map<String, Object> singletonObjects = new ConcurrentHashMap<String, Object>(256);
/** 二級(jí)緩存 */ 
private final Map<String, Object> earlySingletonObjects = new HashMap<String, Object>(16); 
/** 三級(jí)緩存 */ 
private final Map<String, ObjectFactory<?>> singletonFactories = new HashMap<String, ObjectFactory<?>>(16);

3.2 三級(jí)緩存流程

圖片圖片

3.3 三級(jí)緩存源碼解析

創(chuàng)建 Bean 主要的方法是 AbstractBeanFactory.doGetBean 方法

protected <T> T doGetBean( String name, @Nullable Class<T> requiredType, @Nullable Object[] args, boolean typeCheckOnly) throws BeansException {
  // 獲取bean的規(guī)范名稱
  String beanName = transformedBeanName(name); 
  Object bean;  
  // 從各級(jí)緩存中獲取bean對(duì)象 
  Object sharedInstance = getSingleton(beanName); 
  // 跟factoryBean相關(guān)判斷
  if (sharedInstance != null && args == null) { 
...
  } 
  // 獲取factorybean的真是bean
  //若為普通bean則直接返回對(duì)象

  bean = getObjectForBeanInstance(sharedInstance, name, beanName, null); 
} 
...... 
  // 創(chuàng)建單利bean對(duì)象 
  if (mbd.isSingleton()) { 
    sharedInstance = getSingleton(beanName, () -> { 
  try {
    // 創(chuàng)建bean
    return createBean(beanName, mbd, args); 
  } catch (BeansException ex) { 
    // Explicitly remove instance from singleton cache: It might have been put there 
    // eagerly by the creation process, to allow for circular reference resolution. 
    // Also remove any beans that received a temporary reference to the bean. destroySingleton(beanName); 
    throw ex; 
  } 
}); 
  bean = getObjectForBeanInstance(sharedInstance, name, beanName, mbd); 
} 
......    
// 返回bean對(duì)象 return (T) bean; }

我們看兩個(gè)比較重要獲取 Bean 的方法 GetSingleton()

// 這個(gè)方法主要是三級(jí)緩存容器,思路大概是:從一級(jí)緩存查詢,若找不到去二級(jí)緩存查詢,還是不存在則去三級(jí)緩存,若三級(jí)緩存找到了,則將bean放入二級(jí)緩存中
protected Object getSingleton(String beanName, boolean allowEarlyReference) {
  // 從一級(jí)緩存中查找bean
  Object singletonObject = this.singletonObjects.get(beanName);
  // 判斷一級(jí)緩存查找不到bean && bean是否處于創(chuàng)建中,成立,則進(jìn)入循環(huán)依賴
  if (singletonObject == null && isSingletonCurrentlyInCreation(beanName)) {
    synchronized (this.singletonObjects) {
    // 從二級(jí)緩存中查找
    singletonObject = this.earlySingletonObjects.get(beanName);
    // 二級(jí)緩存未查詢到 && 是否允許獲取早期引用
    if (singletonObject == null && allowEarlyReference) {
      // 從三級(jí)緩存查詢
      ObjectFactory<?> singletonFactory = this.singletonFactories.get(beanName);
      // 三級(jí)緩存存在bean
      if (singletonFactory != null) {
        // 獲取bean實(shí)例
        singletonObject = singletonFactory.getObject();
        // 從三級(jí)緩存升級(jí)到二級(jí)緩存,
        this.earlySingletonObjects.put(beanName, singletonObject);
        // 三級(jí)緩存中移除
        this.singletonFactories.remove(beanName);
        }
      }
    }
  }
   // 返回bean
  return singletonObject;
}
public Object getSingleton(String beanName, ObjectFactory<?> singletonFactory) {  
  Assert.notNull(beanName, "Bean name must not be null");  
  synchronized (this.singletonObjects) {        
  // 從一級(jí)緩存中獲取對(duì)應(yīng)bean 
  Object singletonObject = this.singletonObjects.get(beanName);      
  // 若bean不存在 
  if (singletonObject == null) {  
    // 當(dāng)前正在銷毀bean,不能創(chuàng)建
    if (this.singletonsCurrentlyInDestruction) {  
      throw new BeanCreationNotAllowedException(beanName, "Singleton bean creation not allowed while singletons of this factory are in destruction " + "(Do not request a bean from a BeanFactory in a destroy method implementation!)");  
    }  
    if (logger.isDebugEnabled()) {  
      logger.debug("Creating shared instance of singleton bean '" + beanName + "'");  
    }
    // 創(chuàng)建前檢查,記錄正在加載狀態(tài)     
    beforeSingletonCreation(beanName); 
    boolean newSingleton = false;
    boolean recordSuppressedExceptions = (this.suppressedExceptions == null);  
    // 如果當(dāng)前沒有異常,初始化異常集合
    if (recordSuppressedExceptions) {  
      this.suppressedExceptions = new LinkedHashSet<>();  
    }  
    try {
      // 執(zhí)行匿名內(nèi)部類方法 
      singletonObject = singletonFactory.getObject(); 
      newSingleton = true; 
    }  
    catch(IllegalStateException ex){  
      // 執(zhí)行g(shù)etObject方法創(chuàng)建bean
      singletonObject = this.singletonObjects.get(beanName);  
      if (singletonObject == null) {  
        throw ex;  
      }  
    } catch(BeanCreationException ex){  
      if (recordSuppressedExceptions) {  
        or (Exception suppressedException : this.suppressedExceptions) { 
          ex.addRelatedCause(suppressedException);  
      }  
    }  
      throw ex;  
    } finally{  
      if (recordSuppressedExceptions) {  
        this.suppressedExceptions = null;  
      } 
      // 單例bean創(chuàng)建完成后,容器移除bean
      afterSingletonCreation(beanName);  
    }  
    // newSingleton為true時(shí),表示bean創(chuàng)建成功  
    // 判斷是否為新的完成整bean
    if (newSingleton) {            
      // 將bean存入一級(jí)緩存中
      addSingleton(beanName, singletonObject);  
    }  
   } 
   return singletonObject;  
  }  
}

添加與清理緩存

// 將bean放入一級(jí)緩存切清楚二級(jí)、三級(jí)緩存
protected void addSingleton(String beanName, Object singletonObject) {
  synchronized (this.singletonObjects) {xw
    // 添加到一級(jí)緩存中 
    this.singletonObjects.put(beanName, singletonObject); 
    // 從三級(jí)緩存中移除 
    this.singletonFactories.remove(beanName);
    // 從二級(jí)緩存中移除 
    this.earlySingletonObjects.remove(beanName);
    // 放入已注冊(cè)的單利池中
    this.registeredSingletons.add(beanName);
  }
}
// 添加到三級(jí)緩存
protected void addSingletonFactory(String beanName, ObjectFactory<?> singletonFactory) {
  synchronized (this.singletonObjects) {
  // 若一級(jí)緩存不存在bean實(shí)例
  if (!this.singletonObjects.containsKey(beanName)) {
    // 添加到三級(jí)緩存
    this.singletonFactories.put(beanName, singletonFactory);
    // 從第二級(jí)緩存刪除
    this.earlySingletonObjects.remove(beanName);
    // 放入已注冊(cè)的單例池里
    this.registeredSingletons.add(beanName);
  }
}

4.總結(jié)

Spring 循環(huán)依賴是通過map緩存進(jìn)行處理的,其中包括一級(jí)、二級(jí)、三級(jí)緩存,作用如下:

  • 一級(jí)緩存SingletonObjects實(shí)例化、初始化實(shí)例。
  • 二級(jí)緩存EarlySingletonObjects存放的是早期的 Bean ,半成品還未初始化的 bean。
  • 三級(jí)緩存SingletonFactories是一個(gè)對(duì)象工廠,用于創(chuàng)建對(duì)象,然后放入到二級(jí)緩存中。同時(shí)對(duì)象如果存在 Aop 代理,那么返回的對(duì)象就是代理對(duì)象。

參考文獻(xiàn)

http://www.jxzklqfsx.com/article/702892.html

責(zé)任編輯:武曉燕 來源: 政采云技術(shù)
相關(guān)推薦

2023-02-26 11:15:42

緩存循環(huán)依賴

2022-12-02 12:01:30

Spring緩存生命周期

2022-03-01 18:03:06

Spring緩存循環(huán)依賴

2022-05-08 19:23:28

Spring循環(huán)依賴

2021-01-29 14:14:47

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

2024-03-04 08:47:17

Spring框架AOP

2025-06-26 01:55:00

2025-07-02 03:10:00

2024-12-20 16:46:22

Spring三級(jí)緩存

2024-04-15 08:17:21

Spring依賴注入循環(huán)依賴

2022-01-12 07:48:19

緩存Spring 循環(huán)

2019-11-26 14:30:20

Spring循環(huán)依賴Java

2024-03-18 00:00:00

SpringBean設(shè)計(jì)

2023-10-07 08:40:57

緩存屬性Spring

2024-04-12 07:51:05

SpringBean初始化

2022-08-17 07:52:31

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

2020-12-29 08:34:08

spring循環(huán)依賴開發(fā)

2021-06-27 21:06:47

開發(fā)循環(huán)依賴

2020-02-06 13:40:35

編程緩存優(yōu)化

2023-11-28 08:00:00

SpringJava
點(diǎn)贊
收藏

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

亚洲无人区码一码二码三码| 精品久久久久久乱码天堂| 91麻豆制片厂| 日韩一级淫片| 欧美性猛交xxxx富婆弯腰| 色涩成人影视在线播放| 国产丝袜在线视频| 99综合在线| 色婷婷综合成人| 欧美双性人妖o0| 国产69精品久久久久按摩| 夜夜嗨av一区二区三区| 欧美日韩综合网| 国产内射老熟女aaaa∵| 国产欧美一区二区三区国产幕精品| 亚洲欧美日韩高清| 国产成人av免费观看| 中文字幕在线视频久| 日韩理论片一区二区| 久久久综合香蕉尹人综合网| 一二三四区在线| 日韩视频二区| 久久的精品视频| 亚洲国产欧美一区| 成年人视频大全| 国产视频二区在线观看| 国产成人丝袜美腿| 国产精品嫩草影院久久久| www.日本精品| 亚洲一级淫片| 在线观看国产成人av片| 看全色黄大色黄女片18| 999精品视频在线观看| 日韩欧美中文在线| 国产精品久久久久7777| 欧美成年黄网站色视频| 久久毛片高清国产| 国产精品国色综合久久| 国产片在线播放| 日韩高清在线电影| 国产91精品在线播放| 玖玖爱免费视频| 婷婷丁香综合| 日韩中文字幕在线| 国产一区二区三区四区在线| 希岛爱理av免费一区二区| 日韩欧美一级在线播放| 亚洲日本黄色片| 黑人一区二区三区| 欧美午夜免费电影| 成人午夜激情av| 日韩精品专区| 色久优优欧美色久优优| 虎白女粉嫩尤物福利视频| 蜜桃麻豆av在线| 午夜久久福利影院| 日韩a∨精品日韩在线观看| 国产精品一区hongkong| 亚洲一区二区三区在线播放| 久久av高潮av| 136福利第一导航国产在线| 亚洲国产aⅴ天堂久久| 91午夜在线观看| 爱看av在线入口| 精品日本高清在线播放| 天天摸天天碰天天添| 樱桃视频成人在线观看| 在线看国产一区二区| 欧美亚洲日本在线观看| 成人在线视频播放| 欧美视频在线一区二区三区| 日本人视频jizz页码69| 少妇高潮一区二区三区99| 在线成人小视频| 性生活在线视频| 大奶在线精品| 亚洲欧洲在线看| 在线观看天堂av| 欧美国产激情| 午夜精品久久久久久99热软件| 一区二区三区视频免费看| 免费日韩一区二区| 国产精品日韩在线一区| 国产女同91疯狂高潮互磨| 国产99精品国产| 欧美日韩一区二区三区免费| 91se在线| 亚洲成人资源网| 成人性做爰aaa片免费看不忠| 日韩黄色三级| 亚洲国产美女精品久久久久∴| mm131美女视频| 99国产精品免费视频观看| 欧美黄色小视频| 久久久久久不卡| 国产乱人伦精品一区二区在线观看| 国产伦理久久久| 成年在线电影| 亚洲成人久久影院| 一女二男3p波多野结衣| 红杏aⅴ成人免费视频| 国产一区二区黄| 久草中文在线视频| 久久亚洲精选| 国产精品久久九九| av大片在线观看| 亚洲成人av中文| 九九九九九伊人| 一区二区三区日本久久久| 欧美成人激情视频免费观看| 国产午夜免费福利| 韩国视频一区二区| 日本三级中国三级99人妇网站| 黄色一级片在线观看| 狠狠爱在线视频一区| 青娱乐国产精品视频| 一道本一区二区三区| 欧美国产日韩视频| 一本一道人人妻人人妻αv| 92精品国产成人观看免费 | 中文字幕欧美人妻精品一区| 精品视频在线观看免费观看| 亚洲天堂网站在线观看视频| 国产在线观看你懂的| 久久精品国产一区二区| 欧美色图亚洲自拍| 手机av在线| 精品久久久久久综合日本欧美| 视频国产一区二区| 日本在线不卡一区| 欧美日韩在线精品一区二区三区| 欧美日韩经典丝袜| 欧美一区二区三区成人| 国产福利在线导航| 日韩福利视频网| 欧美日韩一区综合| 在线观看v片| 亚洲精品999| 国产在线视频99| 国产99久久久精品| 日本免费成人网| 6080亚洲理论片在线观看| 久久天天躁狠狠躁夜夜爽蜜月| 成人黄色免费网| 国产欧美日韩亚州综合| 日韩手机在线观看视频| 免费一区二区| 国产精品av在线| 成人高清免费观看mv| 在线视频欧美区| 国产精品密蕾丝袜| 日韩综合在线视频| 日韩一区二区电影在线观看| 欧美极品免费| 中文字幕久热精品在线视频| 中文字幕第99页| 亚洲日本成人在线观看| 欧美一区二区三区影院| 亚洲国产免费看| 久久精品国产精品国产精品污| 色网在线免费观看| 亚洲欧美中文字幕在线一区| 91麻豆精品在线| 日韩理论片在线| 精品1卡二卡三卡四卡老狼| 亚洲区欧美区| 欧美另类网站| 欧美亚洲人成在线| 九九热精品在线| 午夜在线观看视频18| 一本久久a久久精品亚洲| 欧美亚洲色综久久精品国产| 久久福利视频一区二区| 狠狠精品干练久久久无码中文字幕 | www.555国产精品免费| 日韩一级网站| 日韩色妇久久av| 激情不卡一区二区三区视频在线| 久久久免费观看| 男男电影完整版在线观看| 欧美日韩精品一区二区三区| 男人的天堂久久久| 91在线国内视频| 色婷婷成人在线| 亚洲无线视频| 亚洲欧美日产图| 成人台湾亚洲精品一区二区 | 日韩精品视频播放| 国产欧美精品一区aⅴ影院 | 久久一留热品黄| 亚洲一区二区三区四区五区| 欧美激情精品久久久六区热门| 久久精品国产综合精品| 偷拍自拍亚洲| 91av在线精品| 中文字幕在线三区| 亚洲人午夜精品| www夜片内射视频日韩精品成人| 欧美视频在线观看免费网址| 国产精品免费在线视频| 99精品视频在线观看免费| 亚洲免费一级视频| 黄色av一区| 亚洲精品tv久久久久久久久| 9l视频自拍蝌蚪9l视频成人| 国产精品美女久久久免费| 国产精品—色呦呦| 中文字幕日韩综合av| 亚州av在线播放| 日韩欧美成人一区| 在线观看国产精品入口男同| 欧美日韩国产区| 好吊色视频在线观看| 国产精品丝袜在线| 51调教丨国产调教视频| 高清国产一区二区| 久久久久久久久久一区| 日本中文字幕一区二区有限公司| 国产精品午夜在线| 午夜影院福利社| 九色综合国产一区二区三区| 成人免费aaa| 好吊日精品视频| 日韩视频在线观看视频| 欧美三级伦理在线| 国产尤物91| 国产精品极品在线观看| 亚洲在线观看视频| 国产精品亲子伦av一区二区三区 | 日韩三区免费| 992tv在线成人免费观看| 在线观看wwwxxxx| 日韩色av导航| 免费大片黄在线| 最近2019中文字幕一页二页| 国产在线资源| 亚洲欧美日韩国产中文| 欧美少妇另类| 亚洲乱码国产乱码精品精| 日韩国产福利| 国产视频综合在线| 天堂av中文在线资源库| 亚洲第一精品久久忘忧草社区| 亚洲爱爱综合网| 欧美一级欧美三级在线观看| 一区二区三区免费在线| 欧美美女一区二区三区| 中文字幕一区2区3区| 欧美中文字幕一区二区三区| 久久精品五月天| 欧美在线色视频| 中文字幕乱码中文字幕| 欧美在线一区二区三区| 中文无码av一区二区三区| 欧美亚洲国产怡红院影院| 91丨九色丨海角社区| 三级久久三级久久久| 久久综合色视频| 亚洲在线国产日韩欧美| 国产精品-区区久久久狼| 久久人人超碰| 第四色婷婷基地| 狠狠色狠狠色综合| 四虎国产精品免费| 成人教育av在线| 国产精品一区二区入口九绯色| 26uuu国产日韩综合| 亚洲黄色小说视频| 国产精品国产成人国产三级| 日本不卡一区视频| 亚洲蜜桃精久久久久久久| 久久国产精品波多野结衣av| 精品久久香蕉国产线看观看亚洲| 国产成人无码专区| 欧美精品丝袜久久久中文字幕| 成人黄色免费视频| 精品亚洲一区二区三区四区五区| 精品美女视频在线观看免费软件| 国产91在线观看丝袜| 国产精品视频免费一区二区三区 | 欧美精品二区三区四区免费看视频| 国产精品午夜一区二区三区| 国产在线视频不卡| 清纯唯美激情亚洲| 蜜桃av色综合| 国产精品黑丝在线播放| 欧美精品久久久久久久自慰| 久久午夜电影| 麻豆免费在线观看视频| 久久久一区二区| 国产在线一卡二卡| 欧美性69xxxx肥| 国产片在线播放| 亚洲欧洲一区二区三区久久| 国产人成网在线播放va免费| 2018国产精品视频| 亚洲精品tv| 久久综合入口| 欧美激情91| 精品久久久噜噜噜噜久久图片| 国产剧情一区二区三区| 国产成人av一区二区三区不卡| 亚洲人精品午夜| 无码视频在线观看| 亚洲成人xxx| 蜜桃视频在线观看www社区 | 成人在线观看免费播放| 国产精品18毛片一区二区| 成人毛片免费看| 成年人午夜视频在线观看| 激情五月婷婷综合网| 免费黄色在线视频| 一级日本不卡的影视| 中文字幕免费视频观看| 亚洲精品福利在线| 浪潮av一区| 国产精品久久一区主播| 精品人人人人| 成人区一区二区| 激情图片小说一区| 97在线观看免费视频| 婷婷国产v国产偷v亚洲高清| 99久久亚洲精品日本无码| 国产一级揄自揄精品视频| 欧美少妇网站| 国产精品一级久久久| 亚洲午夜精品一区 二区 三区| 免费看a级黄色片| 久久欧美一区二区| 亚洲黄色一区二区| 欧美xxxx老人做受| 99福利在线| 91久久久在线| 久久一区二区三区电影| 天堂中文视频在线| av午夜一区麻豆| 国产一级大片在线观看| 日韩一区二区免费电影| 国产区在线观看| 亚洲一区二区三区xxx视频| 99久久久久| 婷婷激情5月天| 亚洲视频一二区| 国产精品久久久久久久久久久久久久久久 | 日本二区三区视频| 欧美视频在线播放| 波多野结衣在线影院| 国产精品成熟老女人| 国产一区二区精品久| 丁香婷婷激情网| 中文字幕免费一区| 久久精品99北条麻妃| 日韩视频中文字幕| 亚洲欧洲日韩精品在线| a级黄色片网站| 国产很黄免费观看久久| 久久久一区二区三区四区| 精品第一国产综合精品aⅴ| av白虎一区| 欧美一级爽aaaaa大片| 久久视频一区| 啪啪一区二区三区| 91精品黄色片免费大全| 人妖欧美1区| 久久久久久久有限公司| 首页综合国产亚洲丝袜| 国产jizz18女人高潮| 欧美一区欧美二区| 丁香花高清在线观看完整版| 国产一区二区不卡视频| 久久午夜精品| 欧美特黄一级片| 亚洲第一精品夜夜躁人人躁| 国内激情视频在线观看| 日韩国产高清一区| 国产最新精品精品你懂的| 亚洲天堂网一区| 国产精品免费丝袜| 国产欧美一级片| **欧美日韩vr在线| 欧美日韩国产一区二区三区不卡| 国产精品自拍视频在线| 亚洲精品福利视频网站| 亚洲三级中文字幕| 国产精品美乳在线观看| 在线电影一区二区| 黑丝av在线播放| 欧美日韩国产片| heyzo中文字幕在线| 日韩av不卡在线播放| 激情文学综合丁香| 黄色片中文字幕| 久久成人这里只有精品| 中文有码一区| 久久黄色一级视频| 精品1区2区3区| 黄色在线网站噜噜噜| 在线日韩av永久免费观看| 99久久伊人久久99| 国产一区二区三区成人|