国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

Spring框架原理之實例化bean和@Autowired實現(xiàn)原理方式

 更新時間:2025年05月07日 09:30:01   作者:Armyyyyy丶  
這篇文章主要介紹了Spring框架原理之實例化bean和@Autowired實現(xiàn)原理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

兩部分流程都較長,如果只對Bean的實例化感興趣只需要看到5.DefaultSingletonBeanRegistry小節(jié)即可,后面是分析@Autowired注解的實現(xiàn)原理。

一、UML類圖及流程分析

1.UML類圖組成

UML類圖組成如下:

這個圖中我們可以大致分為六個部分:

1、第一部分肯定是BeanDefinition的父類和子類組成的,這部分的組成有需要再細分一下,共可以分為六部分:

  • AttributeAccessor接口:這個接口提供了setAttribute和getAttribute等操作屬性的方法提供給子類實現(xiàn);
  • BeanMetadataElement接口:該接口只提供了一個getSource方法,提供子類獲取源對象方法;
  • BeanDefinition接口:bean定義的直接接口,這個接口提供了常見的scope、lazy、dependsOn、initMethod和destroyMethod等屬性配置方法,規(guī)范了一個Spring管理的Bean必須實現(xiàn)哪些屬性;
  • AnnotatedBeanDefinition:注解bean定義,里面提供了兩個方法,一個是獲取注解元數(shù)據(jù),另一個是獲得方法元數(shù)據(jù);
  • BeanDefinitionHolder:該類和子類BeanComponentDefinition的作用便是持有bean的名字、別名和其對應的BeanDefinition,可以注冊為內(nèi)部bean的占位符;
  • BeanDefinitionBuilder:普通BeanDefinition的構(gòu)造器,這里面可以構(gòu)造RootBeanDefinition、ChildBeanDefinition和GenericBeanDefinition等多個類型的bean定義,想要快速實例化一個bean定義可以用此類完成;

2、BeanDefinitionParser接口:從名字便可以看出來其大致作用,用來解析BeanDefinition的接口,其主要是被Spring的NamespaceHandlerSupport實現(xiàn)子類來完成諸如<component-scan/>和<annotation-config/>等XML標簽的讀取解析去獲取Bean定義的;

3、BeanDefinitionRegistry接口:bean定義的注冊中心,該接口的實現(xiàn)子類將可以完成注冊、刪除和獲取bean定義等操作,Spring默認實現(xiàn)的Bean工廠DefaultListableBeanFactory便實現(xiàn)了該接口來管理bean定義;

4、BeanWrapper接口:這部分的接口功能便是封裝一個bean實例,且提供為這個bean調(diào)用對應的setter和getter方法,設置bean的具體成員屬性值;

5、@Autowired注解實現(xiàn)相關(guān)的類:如圖中的最右側(cè)部分的InjectionPoint實現(xiàn)層級和InjectionMetadata相關(guān)層級,這部分是存儲實現(xiàn)@Autowired注解功能的必要參數(shù),如class類型和這個class對象所需要的自動注入的對象;而DependencyDescriptor則保存了需要賦值的字段或者方法返回值和賦值的beanClass類型,隨后再根據(jù)DependencyDescriptor的具體子類類型判斷返回list、map、array或者單個的bean對象;

6.NamedBeanHolder:用來存儲beanName和已經(jīng)初始化完成的bean實例,這個對象在參數(shù)為class類型調(diào)用getBean時被使用。

2.流程分析

Spring工廠實例化bean時對象的變化流程圖:

我在分析該流程時將其分為了三個部分:

  • 中間的核心部分:這部分的主要流程是在bean工廠的兩個抽象類AbstractBeanFactory和AbstractAutowireCapableBeanFactory中完成的,主要的功能便是通過bean的名稱調(diào)用getBean方法,隨后在這兩個類中完成初始化以及調(diào)用此過程中涉及到的接口,其中比較常用的便是FactoryBean和BeanPostProcessor兩個接口,諸如其它的Aware接口也是在這個流程調(diào)用的;
  • 右邊的封裝部分:雖然這部分調(diào)用的getBean也是BeanFactory接口聲明的方法,但我們分析初始化Bean流程時可以把這個部分當成額外的封裝部分,是對通過beanName獲取bean的一種基于便利性的額外封裝實現(xiàn)。這個流程主要是在DefaultListableBeanFactory類中完成的,其大致作用便是通過class類型獲取唯一的候選者beanName,因為一個class類型可能會在工廠中匹配到多個beanName,因此需要做一些額外處理,當獲得beanName之后再調(diào)用核心部分去實例化bean;
  • 左邊的功能拓展部分:這部分的入口是在獲取到BeanWrapper之后,調(diào)用BeanPostProcessor實現(xiàn)類AutowiredAnnotationBeanPostProcessor來完成的。這部分的功能便是處理@Autowired注解,先通過BeanWrapper獲取bean的class對象,再判斷其字段和方法有哪些是被這個注解的,隨后再依次處理判斷,在獲得自動注入的這些實例時,將再次調(diào)用getBean,形成一個遞歸調(diào)用,完成bean的獲取和賦值到字段或方法上。

二、源碼分析

1.DefaultListableBeanFactory類實例化bean部分

先從外部額外封裝的getBean方法分析起,其關(guān)鍵源碼部分如下:

public class DefaultListableBeanFactory 
        extends AbstractAutowireCapableBeanFactory
        implements ConfigurableListableBeanFactory, BeanDefinitionRegistry,
        Serializable {
    @Override
    public <T> T getBean(Class<T> requiredType) throws BeansException {
       // 對外單個類參數(shù)獲取bean,將會調(diào)用后面帶有參數(shù)args的方法
       return getBean(requiredType, (Object[]) null);
    }
    @Override
    public <T> T getBean(Class<T> requiredType, @Nullable Object... args) 
            throws BeansException {
       // 調(diào)用resolveBean方法解析bean
       Object resolved = resolveBean(ResolvableType
               .forRawClass(requiredType), args, false);
       // 如果返回的是nll,則代表Spring工廠中沒有class類型的bean信息
       if (resolved == null) {
          throw new NoSuchBeanDefinitionException(requiredType);
       }
       return (T) resolved;
    }
    @Nullable
    private <T> T resolveBean(ResolvableType requiredType, 
            @Nullable Object[] args, boolean nonUniqueAsNull) {
       // 流程圖中右側(cè)的最后一步,將resolveNamedBean方法返回的NamedBeanHolder
       // 類型判空,如果不為空則直接將內(nèi)部的beanInstance實例返回,在
       // resolveNamedBean方法中執(zhí)行的是第三步,把ResolvableType轉(zhuǎn)為beanName
       NamedBeanHolder<T> namedBean = resolveNamedBean(requiredType, args, 
               nonUniqueAsNull);
       if (namedBean != null) {
          return namedBean.getBeanInstance();
       }
       // 如果從當前的beanFactory中獲取不到bean的信息則從父類beanFactory中
       // 獲取,依次遞歸下去,這里可以忽略這段代碼(正常情況下沒有層級關(guān)系)
       ...
       return null;
    }
    @Nullable
    private <T> NamedBeanHolder<T> resolveNamedBean(
          ResolvableType requiredType, @Nullable Object[] args, 
          boolean nonUniqueAsNull) throws BeansException {
       // 根據(jù)requiredType中的class類型獲取beanName集合,這里面將會判斷l(xiāng)ist
       // 集合beanDefinitionNames來獲取普通的bean候選者,判斷set集合
       // manualSingletonNames中手動添加的單例對象,兩者都會判斷FactoryBean和
       // 普通的bean對象,并選舉出來稱為候選者,具體流程不分析
       String[] candidateNames = getBeanNamesForType(requiredType);
       // 如果獲取到的beanName是多個,則說明這一個class對應多個bean
       if (candidateNames.length > 1) {
          List<String> autowireCandidates = 
                  new ArrayList<>(candidateNames.length);
          // 先判斷beanDefinitionMap集合中是否含有該candidateName
          // 如果有則后續(xù)進行轉(zhuǎn)換到candidateNames數(shù)組
          for (String beanName : candidateNames) {
             if (!containsBeanDefinition(beanName) || 
                     getBeanDefinition(beanName).isAutowireCandidate()) {
                autowireCandidates.add(beanName);
             }
          }
          // 將List轉(zhuǎn)換為原來的String[]數(shù)組
          if (!autowireCandidates.isEmpty()) {
             candidateNames = StringUtils
                     .toStringArray(autowireCandidates);
          }
       }
       // 如果candidateNames數(shù)組長度為1,則說明class只有一個對應的bean
       if (candidateNames.length == 1) {
          String beanName = candidateNames[0];
          // 直接獲取0號位置的beanName,并調(diào)用getBean(beanName)方法初始化bean
          // 隨后將bean實例賦值到NamedBeanHolder中的beanInstance屬性中
          // 以便該方法返回后直接返回beanInstance屬性對象
          return new NamedBeanHolder<>(beanName, (T) getBean(beanName, 
                  requiredType.toClass(), args));
       }
       else if (candidateNames.length > 1) {
          Map<String, Object> candidates = 
                  new LinkedHashMap<>(candidateNames.length);
          // 對candidateNames進行依次處理
          for (String beanName : candidateNames) {
             // 如果是單例對象,即singletonObjects中含有此bean
             if (containsSingleton(beanName) && args == null) {
                // 直接先調(diào)用getBean(beanName)獲取bean實例
                Object beanInstance = getBean(beanName);
                // 雖然放入到candidates集合中,以便后續(xù)返回具體的bean
                candidates.put(beanName, (beanInstance instanceof NullBean?
                        null : beanInstance));
             }
             else {
                // 如果是原型的,則先把class類型放到candidates中,后續(xù)返回時再
                // 實例化返回
                candidates.put(beanName, getType(beanName));
             }
          }
          // 獲取主要的候選者,即最終的bean返回對象,即聲明對象時是否使用
          // @Primary注解了,如果注解了則使用其中最后一個候選者
          String candidateName = determinePrimaryCandidate(candidates, 
                  requiredType.toClass());
          // 如果判斷的主要候選者為空(沒有一個bean被@Primary注解)
          if (candidateName == null) {
             // 根據(jù)OrderComparator優(yōu)先級獲取優(yōu)先級最高的bean
             candidateName = determineHighestPriorityCandidate(candidates,
                     requiredType.toClass());
          }
          // 如果不為空
          if (candidateName != null) {
             // 從前面組裝的candidates集合Map中獲取對應的bean對象
             // 這里獲取到的可能是bean實例化對象,也有可能是class對象
             Object beanInstance = candidates.get(candidateName);
             // 如果beanInstance是空或者類型是class
             if (beanInstance == null || beanInstance instanceof Class) {
                // 調(diào)用getBean(candidateName)方法實例化bean
                beanInstance = getBean(candidateName, 
                        requiredType.toClass(), args);
             }
             // 使用NamedBeanHolder封裝bean實例并返回
             return new NamedBeanHolder<>(candidateName, (T)beanInstance);
          }
          // 前面?zhèn)魅氲膎onUniqueAsNull值是false,因此如果到這里candidateName
          // 還是為null,則拋出異常沒有唯一的bean可返回
          if (!nonUniqueAsNull) {
             throw new NoUniqueBeanDefinitionException(requiredType, 
                     candidates.keySet());
          }
       }
       // 如果候選者candidateNames為0,則直接返回null
       return null;
    }
}

這個類中主要方法棧為四層,調(diào)用這四個方法棧將會調(diào)用到其它的類中,如調(diào)用完之后將會返回已經(jīng)實例化的bean對象,在調(diào)用方法棧中將會調(diào)用到AbstractBeanFactory類中的getBean方法中。也就是說DefaultListableBeanFactory類只是對getBean(class)這個方法進行了一層額外的封裝,最終還是調(diào)用到了AbstractBeanFactory類中,因此我自己把這部分流程劃為額外封裝實現(xiàn)。

2.AbstractBeanFactory抽象類

前面說過,調(diào)用getBean(class)最終實例化bean時將會調(diào)用到這個類中,且這個類是核心部分的入口,可以說是非常重要了。接下來我們看下其部分關(guān)鍵源碼:

public abstract class AbstractBeanFactory 
        extends FactoryBeanRegistrySupport 
        implements ConfigurableBeanFactory {
    @Override
    public Object getBean(String name) throws BeansException {
       return doGetBean(name, null, null, false);
    }
    @Override
    public <T> T getBean(String name, Class<T> requiredType) 
            throws BeansException {
       return doGetBean(name, requiredType, null, false);
    }
    @Override
    public Object getBean(String name, Object... args) 
            throws BeansException {
       // 這三個方法都是調(diào)用了doGetBean,唯一的不同便在于傳入的參數(shù)不一樣
       // 但是name這個參數(shù)是必須的
       return doGetBean(name, null, args, false);
    }
    protected <T> T doGetBean(final String name, 
            @Nullable final Class<T> requiredType,
            @Nullable final Object[] args, boolean typeCheckOnly) 
            throws BeansException {
       // 或許這個方法看起來會很長,但實際上可以把其分為五個功能大點
       // 一、使用aliasMap集合將傳入的name轉(zhuǎn)變成beanName
       final String beanName = transformedBeanName(name);
       Object bean;
       // 二、先從singletonObjects單例緩存集合中獲取bean對象,如果不為空
       // 則直接返回賦值給sharedInstance對象如果為空則從singletonFactories集合
       // 中獲取單例工廠類,并調(diào)用getObject獲取單例bean對象返回賦值
       Object sharedInstance = getSingleton(beanName);
       if (sharedInstance != null && args == null) {
          // 如果sharedInstance不為空,則調(diào)用getObjectForBeanInstance方法
          // 判斷其是否被FactoryBean封裝的,如果是則調(diào)用該接口的getObject方法
          // 獲取bean對象,如果不是則直接返回,其具體的方法流程略過,主要是
          // 判斷FactoryBean接口的,有興趣的可以去看下,后面都會用到
          bean = getObjectForBeanInstance(sharedInstance, name, beanName, 
                  null);
       } else {
          // 判斷該beanName是否是原型且正在被創(chuàng)建的,如果是則拋出異常
          if (isPrototypeCurrentlyInCreation(beanName)) {
             throw new BeanCurrentlyInCreationException(beanName);
          }
          // 三、判斷該beanFactory的父類工廠是否含有該bean對象,此略過,最終
          // 還是會跑到該方法的后續(xù)流程
          BeanFactory parentBeanFactory = getParentBeanFactory();
          if (parentBeanFactory != null && 
                  !containsBeanDefinition(beanName)) {
             ...
          }
          // typeCheckOnly傳入的是false,因此會進入判斷
          if (!typeCheckOnly) {
             // 該方法的作用便是將beanName添加到alreadyCreated集合中,標記為
             // 已經(jīng)實例化過beanName對應的bean對象
             markBeanAsCreated(beanName);
          }
          // 該try-catch塊將是實例化bean的地方,前面只是判斷
          try {
             // 從mergedBeanDefinitions集合中獲取具體的BeanDefinition對象
             final RootBeanDefinition mbd = 
                     getMergedLocalBeanDefinition(beanName);
             // 判斷該bean定義是否合乎標準,如非抽象類
             checkMergedBeanDefinition(mbd, beanName, args);
             // 四、處理@DependsOn注解中的bean對象,在這里將會先實例化注解中
             // 引用的bean
             String[] dependsOn = mbd.getDependsOn();
             if (dependsOn != null) {
                // 如果獲取的dependsOn不為空則依次遍歷其中引入的值
                for (String dep : dependsOn) {
                   // 判斷是否是循環(huán)依賴,如果是則拋出異常,所謂循環(huán)依賴則是
                   // @Bean注解的A方法使用@DependsOn依賴了@Bean注解的B方法
                   // 但是B方法又使用了@DependsOn依賴了A方法,形成死循環(huán)
                   if (isDependent(beanName, dep)) {
                      throw new BeanCreationException();
                   }
                   // 跑到這里代表前面并沒有死循環(huán)依賴的發(fā)生,則把彼此相關(guān)的
                   // 依賴關(guān)系放入到dependentBeanMap中,因此第一次是絕對會
                   // 執(zhí)行到這里的
                   registerDependentBean(dep, beanName);
                   try {
                      // 實例化依賴的bean
                      getBean(dep);
                   }
                   catch (NoSuchBeanDefinitionException ex) {
                      throw new BeanCreationException();
                   }
                }
             }
             // 五、判斷Bean是單例或是原型進行相應的實例化操作
             if (mbd.isSingleton()) {
                // 如果是單例,則使用lambda實例化一個ObjectFactory對象傳入
                // getSingleton方法實例化單例,這個方法也很重要,后續(xù)會分析
                sharedInstance = getSingleton(beanName, () -> {
                   try {
                      // 實例化的ObjectFactory對象執(zhí)行的方法也很簡單
                      // 單純的調(diào)用createBean方法創(chuàng)造bean對象
                      return createBean(beanName, mbd, args);
                   }
                   catch (BeansException ex) {
                      // 如果創(chuàng)造失敗則銷毀對象(清除緩存)
                      destroySingleton(beanName);
                      throw ex;
                   }
                });
                // 判斷這個bean是否被FactoryBean封裝
                bean = getObjectForBeanInstance(sharedInstance, name, 
                        beanName, mbd);
             } else if (mbd.isPrototype()) {
                // 如果bean是原型
                Object prototypeInstance = null;
                try {
                   // 記錄原型bean正在被創(chuàng)建,在前面會進行判斷
                   beforePrototypeCreation(beanName);
                   prototypeInstance = createBean(beanName, mbd, args);
                }
                finally {
                   // 執(zhí)行完后將當前創(chuàng)建的原型bean標記去除
                   afterPrototypeCreation(beanName);
                }
                // 判斷這個bean是否被FactoryBean封裝
                bean = getObjectForBeanInstance(prototypeInstance, name, 
                        beanName, mbd);
             } else {
                // 如果是其它類型的scope參數(shù)
                String scopeName = mbd.getScope();
                final Scope scope = this.scopes.get(scopeName);
                // scope屬性不能為空
                if (scope == null) {
                   throw new IllegalStateException();
                }
                try {
                   // Scope接口是Spring提供給外部使用的,因此如果指定了
                   // 自定義的Scope實現(xiàn),調(diào)用里面的get方法將會執(zhí)行普通的
                   // 原型bean流程,只是開發(fā)者可以在Scope中對該bean進行
                   // 額外的處理判斷
                   Object scopedInstance = scope.get(beanName, () -> {
                      // 實際上ObjectFactory對象的操作流程和原型bean一模一樣
                      beforePrototypeCreation(beanName);
                      try {
                         return createBean(beanName, mbd, args);
                      }
                      finally {
                         afterPrototypeCreation(beanName);
                      }
                   });
                   // 判斷這個bean是否被FactoryBean封裝
                   bean = getObjectForBeanInstance(scopedInstance, name, 
                           beanName, mbd);
                }
                catch (IllegalStateException ex) {
                   throw new BeanCreationException();
                }
             }
          }
          catch (BeansException ex) {
             cleanupAfterBeanCreationFailure(beanName);
             throw ex;
          }
       }
       // 這部分是判斷如果要求的類型requiredType和獲得的bean類型不一致進行
       // 轉(zhuǎn)換的地方,正常使用是不會出現(xiàn)這種情況的,因此暫時略過
       if (requiredType != null && !requiredType.isInstance(bean)) {
          ...
       }
       // 返回bean對象
       return (T) bean;
    }
    
}

實際上doGetBean這個方法流程可以分為五個部分流程,如下圖:

3.AbstractAutowireCapableBeanFactory抽象類

我們從上面的AbstractBeanFactory類已經(jīng)分析到了createBean方法了,由于創(chuàng)建和初始化bean的核心流程都在AbstractAutowireCapableBeanFactory類的幾個方法中,因此這個類的流程會比較多,大致流程可以看到下面的流程圖:

接下來我們看下其關(guān)鍵部分源碼:

public abstract class AbstractAutowireCapableBeanFactory 
        extends AbstractBeanFactory
        implements AutowireCapableBeanFactory {
    public <T> T createBean(Class<T> beanClass) throws BeansException {
       // AbstractBeanFactory并沒有調(diào)用這個方法,但是我們也可以看下
       // 這個方法流程就是將beanClass封裝成Bean定義且設置成原型
       RootBeanDefinition bd = new RootBeanDefinition(beanClass);
       bd.setScope(SCOPE_PROTOTYPE);
       bd.allowCaching = ClassUtils.isCacheSafe(beanClass, 
               getBeanClassLoader());
       return (T) createBean(beanClass.getName(), bd, null);
    }
    @Override
    protected Object createBean(String beanName, RootBeanDefinition mbd, 
            @Nullable Object[] args)
            throws BeanCreationException {
       // 真正創(chuàng)造bean的方法,這個方法大致可以分為三個部分
       RootBeanDefinition mbdToUse = mbd;
       // 一、將beanName和bean定義解析成對應的class類型
       Class<?> resolvedClass = resolveBeanClass(mbd, beanName);
       if (resolvedClass != null && !mbd.hasBeanClass() && 
               mbd.getBeanClassName() != null) {
          mbdToUse = new RootBeanDefinition(mbd);
          // 確定具體的beanClass類型
          mbdToUse.setBeanClass(resolvedClass);
       }
       // 準備方法覆蓋,無關(guān)緊要
       try {
          mbdToUse.prepareMethodOverrides();
       }
       catch (BeanDefinitionValidationException ex) {
          throw new BeanDefinitionStoreException();
       }
       // 二、如果bean定義的beforeInstantiationResolved屬性為true
       // 則直接使用BeanPostProcessor對bean進行處理,且處理后直接返回
       // 不再使用Spring工廠的實例化流程,意味著Spring很多實例化中途的接口
       // 都將不起作用,還沒見到過這種實例化方式的。這里面將會調(diào)用
       // InstantiationAwareBeanPostProcessor接口的before方法,調(diào)用
       // BeanPostProcessor接口的after方法
       try {
          Object bean = resolveBeforeInstantiation(beanName, mbdToUse);
          if (bean != null) {
             return bean;
          }
       }
       catch (Throwable ex) {
          throw new BeanCreationException();
       }
       try {
          // 三、調(diào)用doCreateBean方法實行真正創(chuàng)建bean流程
          Object beanInstance = doCreateBean(beanName, mbdToUse, args);
          return beanInstance;
       } catch (BeanCreationException | 
               ImplicitlyAppearedSingletonException ex) {
          throw ex;
       } catch (Throwable ex) {
          throw new BeanCreationException();
       }
    }
    protected Object doCreateBean(final String beanName, 
            final RootBeanDefinition mbd, final @Nullable Object[] args)
            throws BeanCreationException {
       // 根據(jù)createBean方法的流程來看,其相當于是外面再封裝了一層,用來解析
       // beanClass屬性和提前使用BeanPostProcessor完成bean的實例化,真正的
       // Spring實例化bean的流程其實是在這個方法中
       // 在這個方法中共可以分為五個部分
       BeanWrapper instanceWrapper = null;
       // 一、如果是單例對象,則把factoryBeanInstanceCache緩存清掉,同時獲取
       // 緩存的BeanWrapper實例對象,單例對象(FactoryBean)在調(diào)用getType等
       // 方法時將會被實例化后放到factoryBeanInstanceCache中,一般流程為null
       if (mbd.isSingleton()) {
          instanceWrapper = this.factoryBeanInstanceCache.remove(beanName);
       }
       // 如果instanceWrapper為null,則調(diào)用createBeanInstance實例化對象
       // 在執(zhí)行完這個方法后bean對象才會被實例化
       if (instanceWrapper == null) {
          // 具體實例化對象的地方,其大部分會調(diào)用instantiateBean方法利用反射來
          // 完成bean的實例化
          instanceWrapper = createBeanInstance(beanName, mbd, args);
       }
       // 分別獲取實例化對象和class類型
       final Object bean = instanceWrapper.getWrappedInstance();
       Class<?> beanType = instanceWrapper.getWrappedClass();
       if (beanType != NullBean.class) {
          mbd.resolvedTargetType = beanType;
       }
       // 二、允許程序在創(chuàng)建bean對象后再修改合并后的bean定義
       synchronized (mbd.postProcessingLock) {
          if (!mbd.postProcessed) {
             try {
                // 里面會調(diào)用MergedBeanDefinitionPostProcessor的實現(xiàn)類
                // 其也是BeanPostProcessor的一個子接口
                applyMergedBeanDefinitionPostProcessors(mbd, beanType, 
                        beanName);
             }
             catch (Throwable ex) {
                throw new BeanCreationException();
             }
             mbd.postProcessed = true;
          }
       }
       // 三、快速緩存單例即使被BeanFactoryAware這樣的生命周期接口觸發(fā)
       // 以便能夠解決循環(huán)引用,前提是該單例bean正在創(chuàng)建中
       boolean earlySingletonExposure = (mbd.isSingleton() && 
               this.allowCircularReferences &&
               isSingletonCurrentlyInCreation(beanName));
       if (earlySingletonExposure) {
          // 將bean緩存到singletonObjects等單例集合中
          // 大部分單例類都會調(diào)用到這里面,以便完成復雜的循環(huán)引用,當所有的
          // 實例被后續(xù)的流程初始化后,最終的單例將變成最終的形態(tài)
          addSingletonFactory(beanName, () -> 
                  getEarlyBeanReference(beanName, mbd, bean));
       }
       Object exposedObject = bean;
       // 四、對bean進行bean定義屬性填充及執(zhí)行一系列Spring初始化接口
       try {
          // 構(gòu)造bean,這里面將會處理@Autowired和@Resource等操作bean成員屬性
          // 的注解,也會分別調(diào)用setter方法去設置對應的值,等下會分析
          populateBean(beanName, mbd, instanceWrapper);
          // initializeBean方法將會執(zhí)行工廠接口的回調(diào),如aware系列接口、
          // InitializingBean接口、initMethod和BeanPostProcessor的接口調(diào)用
          // 這里調(diào)用BeanPostProcessor是真正的調(diào)用其接口after和before方法
          exposedObject = initializeBean(beanName, exposedObject, mbd);
       } catch (Throwable ex) {
          if (ex instanceof BeanCreationException && 
                  beanName.equals(((BeanCreationException) ex)
                          .getBeanName())) {
             throw (BeanCreationException) ex;
          } else {
             throw new BeanCreationException();
          }
       }
       // 五、判斷單例對象是否造成了兩次實例化導致單例對象出現(xiàn)不一致的現(xiàn)象
       // 如果前面的提前存儲單例對象成立,則進入(一般來說會進入)
       if (earlySingletonExposure) {
          // 再次獲得提前放入的bean對象
          Object earlySingletonReference = getSingleton(beanName, false);
          // 如果提前放入的bean對象引入不為空
          if (earlySingletonReference != null) {
             // 如果經(jīng)過populateBean和initializeBean方法后bean引用沒變
             // 則把早期的bean對象賦值給exposedObject對象
             if (exposedObject == bean) {
                exposedObject = earlySingletonReference;
             } else if (!this.allowRawInjectionDespiteWrapping && 
                     hasDependentBean(beanName)) {
                // 如果經(jīng)過兩個初始化方法bean引用變了,則說明其它的bean已經(jīng)
                // 通過這兩個方法實例化成功了單例bean,且兩個單例bean不一致
                // 拋出異常
                String[] dependentBeans = getDependentBeans(beanName);
                Set<String> actualDependentBeans = 
                        new LinkedHashSet<>(dependentBeans.length);
                for (String dependentBean : dependentBeans) {
                   if (!removeSingletonIfCreatedForTypeCheckOnly(
                           dependentBean)) {
                      actualDependentBeans.add(dependentBean);
                   }
                }
                if (!actualDependentBeans.isEmpty()) {
                   throw new BeanCurrentlyInCreationException();
                }
             }
          }
       }
       try {
          // 注冊需要銷毀的bean對象:實現(xiàn)了DisposableBean和AutoCloseable接口
          // 或者指明了destroy方法
          registerDisposableBeanIfNecessary(beanName, bean, mbd);
       } catch (BeanDefinitionValidationException ex) {
          throw new BeanCreationException();
       }
       // 返回暴露的bean對象
       return exposedObject;
    }
    protected void populateBean(String beanName, RootBeanDefinition mbd, 
            @Nullable BeanWrapper bw) {
       // 這個方法共可以分為四個部分
       // 該方法的主要作用便是使用bean定義屬性值為BeanWrapper中的對象
       // 填充對應的值
       if (bw == null) {
          // 如果bean定義為空且屬性值不為空則拋出異常,否則直接跳過該方法
          if (mbd.hasPropertyValues()) {
             throw new BeanCreationException();
          } else {
             return;
          }
       }
       // 一、根據(jù)InstantiationAwareBeanPostProcessor接口的
       // postProcessAfterInstantiation方法返回值判斷是否
       // 繼續(xù)執(zhí)行填充bean對象屬性
       boolean continueWithPropertyPopulation = true;
       if (!mbd.isSynthetic() && 
               hasInstantiationAwareBeanPostProcessors()) {
          for (BeanPostProcessor bp : getBeanPostProcessors()) {
             if (bp instanceof InstantiationAwareBeanPostProcessor) {
                InstantiationAwareBeanPostProcessor ibp = 
                        (InstantiationAwareBeanPostProcessor) bp;
                // 根據(jù)其接口方法返回值判斷要不要繼續(xù)執(zhí)行后面的填充流程
                if (!ibp.postProcessAfterInstantiation(bw
                        .getWrappedInstance(), beanName)) {
                   continueWithPropertyPopulation = false;
                   break;
                }
             }
          }
       }
       // 為false則直接跳過
       if (!continueWithPropertyPopulation) {
          return;
       }
       // 獲取bean定義中的屬性值
       PropertyValues pvs = (mbd.hasPropertyValues() ? 
               mbd.getPropertyValues() : null);
       // 二、判斷bean的自動注入模式為AUTOWIRE_BY_NAME或AUTOWIRE_BY_TYPE
       // 一般都是使用默認的后續(xù)流程,只有特殊指定才會進入這兩步,這兩個
       // 方法的作用便是把當前的bean定義根據(jù)參數(shù)名字或者類型從bean工廠中
       // 獲取對應的bean,并且保存到newPvs對象中,如mybatis的mapper便是
       // 使用type類型獲取到sqlSessionTemplate和sqlSessionFactory兩個bean的
       if (mbd.getResolvedAutowireMode() == AUTOWIRE_BY_NAME || 
               mbd.getResolvedAutowireMode() == AUTOWIRE_BY_TYPE) {
          MutablePropertyValues newPvs = new MutablePropertyValues(pvs);
          // 根據(jù)autotowire的名稱(如適用)添加屬性值
          if (mbd.getResolvedAutowireMode() == AUTOWIRE_BY_NAME) {
             autowireByName(beanName, mbd, bw, newPvs);
          }
          // 根據(jù)自動裝配的類型(如果適用)添加屬性值
          if (mbd.getResolvedAutowireMode() == AUTOWIRE_BY_TYPE) {
             autowireByType(beanName, mbd, bw, newPvs);
          }
          pvs = newPvs;
       }
       // 判斷是否有InstantiationAwareBeanPostProcessor接口,有為true
       boolean hasInstAwareBpps = 
               hasInstantiationAwareBeanPostProcessors();
       // 是否需要檢查依賴,一般而言此值默認為false,暫時忽略
       boolean needsDepCheck = (mbd.getDependencyCheck() != 
               AbstractBeanDefinition.DEPENDENCY_CHECK_NONE);
       // 三、如果有InstantiationAwareBeanPostProcessor接口則進入
       PropertyDescriptor[] filteredPds = null;
       if (hasInstAwareBpps) {
          if (pvs == null) {
             pvs = mbd.getPropertyValues();
          }
          // 依次獲取InstantiationAwareBeanPostProcessor接口調(diào)用其
          // postProcessProperties方法和postProcessPropertyValues方法
          // 并獲得這兩個方法的返回值,以便后續(xù)使用
          // 解析@Autowired注解并賦值便是在段方法中完成的,后面會分析
          for (BeanPostProcessor bp : getBeanPostProcessors()) {
             if (bp instanceof InstantiationAwareBeanPostProcessor) {
                InstantiationAwareBeanPostProcessor ibp = 
                        (InstantiationAwareBeanPostProcessor) bp;
                PropertyValues pvsToUse = ibp.postProcessProperties(pvs, 
                        bw.getWrappedInstance(), beanName);
                // 此方法流程已被官方刪除,原來的流程實際調(diào)用的也是
                // postProcessProperties,因此這一段可以忽略
                if (pvsToUse == null) {
                   ...
                }
                pvs = pvsToUse;
             }
          }
       }
       // 略過
       if (needsDepCheck) {
          if (filteredPds == null) {
             filteredPds = filterPropertyDescriptorsForDependencyCheck(bw,
                     mbd.allowCaching);
          }
          checkDependencies(beanName, mbd, filteredPds, pvs);
       }
       // 四、如果返回的pvs不為空,則說明這些屬性需要設置到BeanWrapper中
       if (pvs != null) {
          applyPropertyValues(beanName, mbd, bw, pvs);
       }
    }
    protected Object initializeBean(final String beanName, 
            final Object bean, @Nullable RootBeanDefinition mbd) {
       // 這個方法共可以分為四個部分
       // 一、調(diào)用invokeAwareMethods方法,從名字就可以看出來,這個方法是用來
       // 調(diào)用Aware系列接口,包括BeanNameAware、BeanClassLoaderAware和
       // BeanFactoryAware,System.getSecurityManager()語句只是為了判斷當前
       // 系統(tǒng)有沒有權(quán)限調(diào)用Aware接口
       if (System.getSecurityManager() != null) {
          AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
             invokeAwareMethods(beanName, bean);
             return null;
          }, getAccessControlContext());
       } else {
          invokeAwareMethods(beanName, bean);
       }
       Object wrappedBean = bean;
       // 二、調(diào)用BeanPostProcessor接口的postProcessBeforeInitialization方法
       if (mbd == null || !mbd.isSynthetic()) {
          wrappedBean = 
                  applyBeanPostProcessorsBeforeInitialization(wrappedBean,
                          beanName);
       }
       try {
          // 三、這里面會調(diào)用InitializingBean接口的afterPropertiesSet方法
          // 且會調(diào)用指定的initMethod和destroyMethod方法
          invokeInitMethods(beanName, wrappedBean, mbd);
       } catch (Throwable ex) {
          throw new BeanCreationException();
       }
       // 四、調(diào)用BeanPostProcessor接口的postProcessAfterInitialization方法
       if (mbd == null || !mbd.isSynthetic()) {
          wrappedBean = 
                  applyBeanPostProcessorsAfterInitialization(wrappedBean, 
                          beanName);
       }
       // 返回經(jīng)過Aware、init、destroy、BeanPostProcessor接口的before和after
       // 系列接口方法處理過的bean對象
       return wrappedBean;
    }
}

想要理清楚這里面的流程,還是需要自己親自走一遍創(chuàng)建的源碼流程,否則不管看多少次流程分析到頭來也還是會生疏忘記。

4.DefaultSingletonBeanRegistry類

這個類主要負責單例對象的緩存和一些判斷。接下來看下其部分關(guān)鍵源碼:

public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry 
        implements SingletonBeanRegistry {
    // 保存單例對象的Map集合
    private final Map<String, Object> singletonObjects = 
            new ConcurrentHashMap<>(256);
    // 保存單例對象和其對應的ObjectFactory集合
    private final Map<String, ObjectFactory<?>> singletonFactories = 
            new HashMap<>(16);
    // 提前緩存單例的集合
    private final Map<String, Object> earlySingletonObjects = 
            new HashMap<>(16);
    // 正在創(chuàng)建單例的集合
    private final Set<String> singletonsCurrentlyInCreation =
            Collections.newSetFromMap(new ConcurrentHashMap<>(16));
    // 注冊成功的單例bean對象
    private final Set<String> registeredSingletons = 
            new LinkedHashSet<>(256);
    @Override
    @Nullable
    public Object getSingleton(String beanName) {
       // 在前面創(chuàng)建bean的流程中調(diào)用的便是這個方法
       return getSingleton(beanName, true);
    }
    protected Object getSingleton(String beanName, 
            boolean allowEarlyReference) {
       // 這個方法實際上只是從緩存中獲取單例對象
       Object singletonObject = this.singletonObjects.get(beanName);
       if (singletonObject == null && 
               isSingletonCurrentlyInCreation(beanName)) {
          synchronized (this.singletonObjects) {
             // 進入到這里說明緩存對象沒有命中
             singletonObject = this.earlySingletonObjects.get(beanName);
             // 再判斷提前緩存的單例對象集合能不能命中
             if (singletonObject == null && allowEarlyReference) {
                // 如果提前緩存的單例對象也無法命中則從singletonFactories
                // 集合中查找對應的ObjectFactory對象,如果不為空則調(diào)用其
                // getObject初始化bean對象
                ObjectFactory<?> singletonFactory = this
                        .singletonFactories.get(beanName);
                if (singletonFactory != null) {
                   // 調(diào)用getObject初始化單例bean對象,并緩存起來
                   singletonObject = singletonFactory.getObject();
                   this.earlySingletonObjects.put(beanName, 
                           singletonObject);
                   this.singletonFactories.remove(beanName);
                }
             }
          }
       }
       return singletonObject;
    }
    protected void addSingleton(String beanName, Object singletonObject) {
       // 添加單例說明這個單例對象已經(jīng)完全初始化完成,因此可以把提前緩存在
       // earlySingletonObjects和singletonFactories集合的bean刪除,直接放進
       // singletonObjects和registeredSingletons集合
       synchronized (this.singletonObjects) {
          this.singletonObjects.put(beanName, singletonObject);
          this.singletonFactories.remove(beanName);
          this.earlySingletonObjects.remove(beanName);
          this.registeredSingletons.add(beanName);
       }
    }
    public Object getSingleton(String beanName, 
            ObjectFactory<?> singletonFactory) {
       // 這個方法在前面初始化單例bean時會被調(diào)用,且singletonFactory對象
       // 是由lambda實例化的一個對象,里面只有一個調(diào)用createBean方法語句
       synchronized (this.singletonObjects) {
          Object singletonObject = this.singletonObjects.get(beanName);
          // 先判斷單例bean緩存有沒有這個bean,如果有就直接返回,沒有則進入判斷
          if (singletonObject == null) {
             // 該單例bean有另外一個線程正在初始化中拋出異常
             if (this.singletonsCurrentlyInDestruction) {
                throw new BeanCreationNotAllowedException();
             }
             // 記錄單例beanName正在實例化中
             beforeSingletonCreation(beanName);
             boolean newSingleton = false;
             boolean recordSuppressedExceptions = 
                     (this.suppressedExceptions == null);
             if (recordSuppressedExceptions) {
                this.suppressedExceptions = new LinkedHashSet<>();
             }
             try {
                // 調(diào)用getObject方法(實際為調(diào)用createBean方法,因為這個
                // 對象方法中只有調(diào)用createBean方法語句)
                singletonObject = singletonFactory.getObject();
                newSingleton = true;
             } catch (IllegalStateException ex) {
                
                singletonObject = this.singletonObjects.get(beanName);
                if (singletonObject == null) {
                   throw ex;
                }
             } catch (BeanCreationException ex) {
                if (recordSuppressedExceptions) {
                   for (Exception suppressedException : 
                           this.suppressedExceptions) {
                      ex.addRelatedCause(suppressedException);
                   }
                }
                throw ex;
             } finally {
                if (recordSuppressedExceptions) {
                   this.suppressedExceptions = null;
                }
                // 標記beanName已經(jīng)創(chuàng)建完成
                afterSingletonCreation(beanName);
             }
             // 如果創(chuàng)建過程中為拋出異常則添加到單例緩存中
             if (newSingleton) {
                addSingleton(beanName, singletonObject);
             }
          }
          // 返回單例對象
          return singletonObject;
       }
    }
}

5.AutowiredAnnotationBeanPostProcessor類

這個類是BeanPostProcessor接口的實現(xiàn)類,是完成@Autowired注解原理的地方,接下來看到其關(guān)鍵源碼:

public class AutowiredAnnotationBeanPostProcessor 
        extends InstantiationAwareBeanPostProcessorAdapter
        implements MergedBeanDefinitionPostProcessor, PriorityOrdered, 
        BeanFactoryAware {
    // 這個集合中保存了@Autowired和@Value注解
    private final Set<Class<? extends Annotation>> autowiredAnnotationTypes =
        new LinkedHashSet<>(4);
    @Override
    public PropertyValues postProcessProperties(PropertyValues pvs, 
            Object bean, String beanName) {
       // 找到這個bean哪些字段和方法需要自動注入
       InjectionMetadata metadata = findAutowiringMetadata(beanName, 
               bean.getClass(), pvs);
       try {
          // 調(diào)用注入流程
          metadata.inject(bean, beanName, pvs);
       } catch (BeanCreationException ex) {
          throw ex;
       } catch (Throwable ex) {
          throw new BeanCreationException();
       }
       return pvs;
    }
    private InjectionMetadata findAutowiringMetadata(String beanName, 
            Class<?> clazz, @Nullable PropertyValues pvs) {
       // 返回到類名作為緩存鍵,以便向后兼容自定義調(diào)用者。
       String cacheKey = (StringUtils.hasLength(beanName) ? 
               beanName : clazz.getName());
       // 首先對并發(fā)映射進行快速檢查,使用最小的鎖定。
       InjectionMetadata metadata = this
               .injectionMetadataCache.get(cacheKey);
       // 先進行一層緩存判斷,但是不上鎖,可以讓一大批線程通過這個判斷方法
       // 完成是否需要刷新的判斷,而不需要阻塞線程
       if (InjectionMetadata.needsRefresh(metadata, clazz)) {
          synchronized (this.injectionMetadataCache) {
             metadata = this.injectionMetadataCache.get(cacheKey);
             // 進行第二次判斷,此時判斷的對象是需要刷新的,且并發(fā)量高只有幾個
             // 線程會同時到這里,保證了最小粒度線程判斷,這種使用方法和單例對
             // 象的兩重判斷原理一樣,都是為了避免同一個class執(zhí)行多次if塊里面
             // 的流程
             if (InjectionMetadata.needsRefresh(metadata, clazz)) {
                if (metadata != null) {
                   metadata.clear(pvs);
                }
                // 根據(jù)類獲取需要自動注入的字段和方法
                metadata = buildAutowiringMetadata(clazz);
                // 放入緩存
                this.injectionMetadataCache.put(cacheKey, metadata);
             }
          }
       }
       return metadata;
    }
    private InjectionMetadata buildAutowiringMetadata(
            final Class<?> clazz) {
       // 看起來這個方法很長,但實際上只執(zhí)行了兩個有用的邏輯
       List<InjectionMetadata.InjectedElement> elements = 
               new ArrayList<>();
       Class<?> targetClass = clazz;
       do {
           // 當前類所需要自動注入的元素集合
          final List<InjectionMetadata.InjectedElement> currElements = 
                  new ArrayList<>();
          // 依次遍歷字段判斷哪些字段擁有autowiredAnnotationTypes集合中的注解
          // 如果有的話則將其封裝添加到currElements集合中
          ReflectionUtils.doWithLocalFields(targetClass, field -> {
             AnnotationAttributes ann = findAutowiredAnnotation(field);
             if (ann != null) {
                if (Modifier.isStatic(field.getModifiers())) {
                   return;
                }
                boolean required = determineRequiredStatus(ann);
                currElements.add(new AutowiredFieldElement(field, 
                        required));
             }
          });
          // 類似遍歷字段的,這里只是遍歷了方法,其它流程一樣
          ReflectionUtils.doWithLocalMethods(targetClass, method -> {
             Method bridgedMethod = BridgeMethodResolver
                     .findBridgedMethod(method);
             if (!BridgeMethodResolver.isVisibilityBridgeMethodPair(method,
                     bridgedMethod)) {
                return;
             }
             AnnotationAttributes ann = 
                     findAutowiredAnnotation(bridgedMethod);
             if (ann != null && method.equals(ClassUtils
                     .getMostSpecificMethod(method, clazz))) {
                if (Modifier.isStatic(method.getModifiers())) {

                   return;
                }
                boolean required = determineRequiredStatus(ann);
                PropertyDescriptor pd = BeanUtils
                        .findPropertyForMethod(bridgedMethod, clazz);
                currElements.add(new AutowiredMethodElement(method, 
                        required, pd));
             }
          });
          // 添加到需要返回的集合elements中
          elements.addAll(0, currElements);
          // 再遍歷父類,依次循環(huán)
          targetClass = targetClass.getSuperclass();
       } while (targetClass != null && targetClass != Object.class);
       // 封裝成注入元數(shù)據(jù)類型
       return new InjectionMetadata(clazz, elements);
    }
}

可以看到這個類執(zhí)行的操作只是獲取該bean被@Autowired和@Value注解的字段和方法,然后使用InjectedElement和InjectionMetadata對象封裝。

6.InjectionMetadata類

從上面的流程我們知道了會調(diào)用到這個類的inject方法中來,接下來我們看下其部分關(guān)鍵源碼:

public class InjectionMetadata {
    // 需要注入的bean class類型
    private final Class<?> targetClass;
    // 該bean class需要注入的字段和方法集合
    private final Collection<InjectedElement> injectedElements;
    public void inject(Object target, @Nullable String beanName, 
            @Nullable PropertyValues pvs) throws Throwable {
       Collection<InjectedElement> checkedElements = this.checkedElements;
       Collection<InjectedElement> elementsToIterate =
             (checkedElements != null ? checkedElements : 
             this.injectedElements);
       // 如果需要注入的字段和方法集合迭代器不為空
       if (!elementsToIterate.isEmpty()) {
          // 依次循環(huán)調(diào)用元素的inject方法,
          for (InjectedElement element : elementsToIterate) {
             element.inject(target, beanName, pvs);
          }
       }
    }
}

7.AutowiredFieldElement內(nèi)部類

這個類是InjectionMetadata.InjectedElement內(nèi)部類的子類實現(xiàn),主要針對的是需要自動注入字段的執(zhí)行,需要注意的是這個類也是AutowiredAnnotationBeanPostProcessor的內(nèi)部類實現(xiàn)。接下來我們看其關(guān)鍵源碼部分:

private class AutowiredFieldElement 
        extends InjectionMetadata.InjectedElement {
    @Override
    protected void inject(Object bean, @Nullable String beanName, 
            @Nullable PropertyValues pvs) throws Throwable {
       Field field = (Field) this.member;
       Object value;
       // 先判斷是否已經(jīng)被緩存了
       if (this.cached) {
          // 如果緩存了就直接從bean工廠中獲取或直接返回cachedFieldValue的值
          value = resolvedCachedArgument(beanName, this.cachedFieldValue);
       }
       else {
          // 沒有緩存則將字段封裝成DependencyDescriptor對象
          DependencyDescriptor desc = new DependencyDescriptor(field, 
                  this.required);
          // 設置對應的bean類型
          desc.setContainingClass(bean.getClass());
          Set<String> autowiredBeanNames = new LinkedHashSet<>(1);
          TypeConverter typeConverter = beanFactory.getTypeConverter();
          try {
             // 直接調(diào)用bean工廠的resolveDependency方法解析這個bean涉及的
             // 依賴bean,并且最終返回bean值
             value = beanFactory.resolveDependency(desc, beanName, 
                     autowiredBeanNames, typeConverter);
          }
          catch (BeansException ex) {
             throw new UnsatisfiedDependencyException(null, beanName, 
                     new InjectionPoint(field), ex);
          }
          synchronized (this) {
             // 如果未緩存,則說明是第一次
             if (!this.cached) {
                // 如果返回的值不為空
                if (value != null || this.required) {
                   this.cachedFieldValue = desc;
                   // 注冊這個bean和自動注入值的依賴關(guān)系
                   registerDependentBeans(beanName, autowiredBeanNames);
                   if (autowiredBeanNames.size() == 1) {
                      // 如果返回值只有一個,則封裝成對象類型
                      // ShortcutDependencyDescriptor緩存起來
                      String autowiredBeanName = autowiredBeanNames
                              .iterator().next();
                      // 從bean工廠中判斷確實這個value返回值存在且類型正確
                      if (beanFactory.containsBean(autowiredBeanName) &&
                            beanFactory.isTypeMatch(autowiredBeanName, 
                                    field.getType())) {
                         // 緩存起來
                         this.cachedFieldValue = 
                                 new ShortcutDependencyDescriptor(
                                 desc, autowiredBeanName, field.getType());
                      }
                   }
                } else {
                   this.cachedFieldValue = null;
                }
                // 設置為緩存狀態(tài)
                this.cached = true;
             }
          }
       }
       if (value != null) {
          ReflectionUtils.makeAccessible(field);
          // 利用映射把獲得的value值set到字段上
          field.set(bean, value);
       }
    }
}

這個類的作用便是緩存且調(diào)用bean工廠獲取需要注入的bean值,然后set到相應的字段或者方法上。

8.DefaultListableBeanFactory類處理@Autowired注解

我們可以先分析一下處理自動注入依賴的方法流程圖:

直入主題,其關(guān)鍵部分源碼如下:

public class DefaultListableBeanFactory 
        extends AbstractAutowireCapableBeanFactory
        implements ConfigurableListableBeanFactory, BeanDefinitionRegistry,
        Serializable {
    @Override
    @Nullable
    public Object resolveDependency(DependencyDescriptor descriptor, 
            @Nullable String requestingBeanName,
            @Nullable Set<String> autowiredBeanNames, 
            @Nullable TypeConverter typeConverter) throws BeansException {
       // 這個方法也是一個中間方法,前面兩個判斷不用管,只需要看到最后一個即可
       descriptor.initParameterNameDiscovery(getParameterNameDiscoverer());
       if (Optional.class == descriptor.getDependencyType()) {
          return createOptionalDependency(descriptor, requestingBeanName);
       } else if (ObjectFactory.class == descriptor.getDependencyType() ||
             ObjectProvider.class == descriptor.getDependencyType()) {
          return new DependencyObjectProvider(descriptor, 
                  requestingBeanName);
       }
       else if (javaxInjectProviderClass == descriptor.getDependencyType()){
          return new Jsr330Factory().createDependencyProvider(descriptor, 
                  requestingBeanName);
       } else {
          // 正常流程直接看到這一步來即可,調(diào)用返回的result一般情況下為null
          Object result = getAutowireCandidateResolver()
                  .getLazyResolutionProxyIfNecessary(
                descriptor, requestingBeanName);
          if (result == null) {
             // 因此一般情況下會調(diào)用這個方法獲取bean對象,這個方法也是需要重點
             // 分析的
             result = doResolveDependency(descriptor, requestingBeanName, 
                     autowiredBeanNames, typeConverter);
          }
          return result;
       }
    }
    @Nullable
    public Object doResolveDependency(DependencyDescriptor descriptor, 
            @Nullable String beanName, 
            @Nullable Set<String> autowiredBeanNames, 
            @Nullable TypeConverter typeConverter) throws BeansException {
       // 像前面介紹的流程一樣,將DependencyDescriptor對象轉(zhuǎn)換為InjectionPoint
       // 這個方法也很長,需要慢慢分析,大致可以分為六個部分
       InjectionPoint previousInjectionPoint = 
               ConstructorResolver.setCurrentInjectionPoint(descriptor);
       try {
          // 一、如果是ShortcutDependencyDescriptor類型的則會直接調(diào)用getBean
          // 方法,但是一般都是DependencyDescriptor類型,大部分情況可忽略
          Object shortcut = descriptor.resolveShortcut(this);
          if (shortcut != null) {
             return shortcut;
          }
          // 二、從descriptor對象的注解中嘗試獲取值,只有當方法返回的類型是
          // QualifierAnnotationAutowireCandidateResolver才會這樣做,默認的
          // 是ContextAnnotationAutowireCandidateResolver類型,此流程可忽略
          Class<?> type = descriptor.getDependencyType();
          Object value = getAutowireCandidateResolver()
                  .getSuggestedValue(descriptor);
          if (value != null) {
             // 如果獲得的值是String類型,則需要使用使用Expression語法獲取值
             if (value instanceof String) {
                String strVal = resolveEmbeddedValue((String) value);
                BeanDefinition bd = (beanName != null && 
                        containsBean(beanName) ?
                            getMergedBeanDefinition(beanName) : null);
                // 實際會調(diào)用Expression語法獲取值
                value = evaluateBeanDefinitionString(strVal, bd);
             }
             TypeConverter converter = (typeConverter != null ?
                      typeConverter : getTypeConverter());
             try {
                // 對返回的值進行類型轉(zhuǎn)換
                return converter.convertIfNecessary(value, type, 
                        descriptor.getTypeDescriptor());
             } catch (UnsupportedOperationException ex) {
                return (descriptor.getField() != null ?
                      converter.convertIfNecessary(value, type, 
                              descriptor.getField()) :
                      converter.convertIfNecessary(value, type, 
                              descriptor.getMethodParameter()));
             }
          }
          // 三、解決自動注入的值為數(shù)組、Map集合或者Collection集合,如果是
          // 數(shù)組則直接把bean工廠中這個類型的按照Comparator排序返回;如果是
          // Collection集合且類型為接口則獲取對應的bean對象且進行類型轉(zhuǎn)換和
          // 排序處理;如果是Map則直接key為beanName,value為這個類型的對象;
          // 這幾個類型descriptor對象將被封裝成MultiElementDescriptor類型
          // 這個類型后續(xù)將會調(diào)用bean工廠的getBean方法,獲取集合需要的bean對象
          // 這里實際會調(diào)用到findAutowireCandidates方法中,只是中間解析了上面
          // 所說的三種集合類型,findAutowireCandidates這個方法等下分析
          Object multipleBeans = resolveMultipleBeans(descriptor, 
                  beanName, autowiredBeanNames, typeConverter);
          if (multipleBeans != null) {
             return multipleBeans;
          }
          // 四、直接調(diào)用findAutowireCandidates方法獲取Map集合key為beanName
          // Object為bean對象
          Map<String, Object> matchingBeans = 
                  findAutowireCandidates(beanName, type, descriptor);
          if (matchingBeans.isEmpty()) {
             // 如果為空且required為true,則檢查beanDefinitionNames中
             // 是否有該類型的bean,如果沒有則拋出異常
             if (isRequired(descriptor)) {
                raiseNoMatchingBeanFound(type, 
                        descriptor.getResolvableType(), descriptor);
             }
             return null;
          }
          String autowiredBeanName;
          Object instanceCandidate;
          // 五、處理獲取到的候選matchingBeans集合,分為單個和多個,數(shù)量為0
          // 的情況以前面已經(jīng)處理了
          if (matchingBeans.size() > 1) {
             // 如果候選有多個,則使用Comparator獲取最高優(yōu)先級的候選者
             // 或者beanName一模一樣的bean對象
             autowiredBeanName = determineAutowireCandidate(matchingBeans,
                     descriptor);
             if (autowiredBeanName == null) {
                // 如果候選者為空且required為true,則檢查并拋出異常
                if (isRequired(descriptor) || 
                        !indicatesMultipleBeans(type)) {
                   return descriptor.resolveNotUnique(descriptor
                           .getResolvableType(), matchingBeans);
                } else {
                   // required為false則直接返回null
                   return null;
                }
             }
             // 獲取候選者
             instanceCandidate = matchingBeans.get(autowiredBeanName);
          }
          else {
             // 僅有一個,直接獲取第一個的key和值
             Map.Entry<String, Object> entry = 
                     matchingBeans.entrySet().iterator().next();
             autowiredBeanName = entry.getKey();
             instanceCandidate = entry.getValue();
          }
          // 六、對獲取到的單個候選者進行處理
          if (autowiredBeanNames != null) {
             autowiredBeanNames.add(autowiredBeanName);
          }
          // 如果從候選者們獲取到的的類型是class,則需要調(diào)用resolveCandidate
          // 方法來通過class類型實例化bean,resolveCandidate方法會直接調(diào)用
          // bean工廠的getBean方法;如果不是class類型,那一定是實例化好的
          // bean對象
          if (instanceCandidate instanceof Class) {
             instanceCandidate = descriptor
                     .resolveCandidate(autowiredBeanName, type, this);
          }
          Object result = instanceCandidate;
          // 進行required參數(shù)的判斷,不滿足拋異常
          if (result instanceof NullBean) {
             if (isRequired(descriptor)) {
                raiseNoMatchingBeanFound(type, 
                        descriptor.getResolvableType(), descriptor);
             }
             result = null;
          }
          // 判斷獲取的類型和值是否一樣,不一樣則拋出異常
          if (!ClassUtils.isAssignableValue(type, result)) {
             throw new BeanNotOfRequiredTypeException(autowiredBeanName, 
                     type, instanceCandidate.getClass());
          }
          return result;
       }
       finally {
          ConstructorResolver.setCurrentInjectionPoint(
                  previousInjectionPoint);
       }
    }
    protected Map<String, Object> findAutowireCandidates(
            @Nullable String beanName, Class<?> requiredType, 
            DependencyDescriptor descriptor) {
       // 在獲取到beanName和這個bean的class類型后將會調(diào)用這個方法來獲取
       // 這個class類型的一系列候選者,該方法一共可以分為三個部分
       // 一、或者這個beanName的候選者名稱
       String[] candidateNames = BeanFactoryUtils
               .beanNamesForTypeIncludingAncestors(
             this, requiredType, true, descriptor.isEager());
       Map<String, Object> result = 
               new LinkedHashMap<>(candidateNames.length);
       // 一、判斷resolvableDependencies集合中類型相同的對象
       // 遍歷判斷已經(jīng)解析過的依賴對象,如果類型相同或者是需要實例化的父類
       // 則將其添加到result中
       for (Map.Entry<Class<?>, Object> classObjectEntry : 
               this.resolvableDependencies.entrySet()) {
          Class<?> autowiringType = classObjectEntry.getKey();
          if (autowiringType.isAssignableFrom(requiredType)) {
             Object autowiringValue = classObjectEntry.getValue();
             autowiringValue = AutowireUtils
                 .resolveAutowiringValue(autowiringValue, requiredType);
             if (requiredType.isInstance(autowiringValue)) {
                result.put(ObjectUtils.identityToString(autowiringValue), 
                        autowiringValue);
                break;
             }
          }
       }
       // 二、對前一步獲取到的對象和候選者名稱進行遍歷處理,處理后的結(jié)果將會添加
       // 到result中addCandidateEntry方法后面會分析
       for (String candidate : candidateNames) {
          if (!isSelfReference(beanName, candidate) && 
                  isAutowireCandidate(candidate, descriptor)) {
             addCandidateEntry(result, candidate, descriptor, 
                     requiredType);
          }
       }
       // 三、如果需要返回的候選者結(jié)果集為空,正常情況下前面獲取到的result為空
       // 這個方法塊中獲取到的result也為空,但是其具體作用場景尚不清楚
       // 因此暫時略過
       if (result.isEmpty()) {
          // 如果第一輪沒有找到任何內(nèi)容,考慮回退匹配對應的名稱對象
          boolean multiple = indicatesMultipleBeans(requiredType);
          ...
       }
       return result;
    }
    private void addCandidateEntry(Map<String, Object> candidates, 
            String candidateName,
            DependencyDescriptor descriptor, Class<?> requiredType) {
       // 解決不同的descriptor對象
       if (descriptor instanceof MultiElementDescriptor) {
          // MultiElementDescriptor類型則直接調(diào)用bean工廠的getBean方法獲取
          // 處理化bean對象
          Object beanInstance = descriptor.resolveCandidate(candidateName,
                  requiredType, this);
          if (!(beanInstance instanceof NullBean)) {
             candidates.put(candidateName, beanInstance);
          }
       } else if (containsSingleton(candidateName) || 
               (descriptor instanceof StreamDependencyDescriptor &&
             ((StreamDependencyDescriptor) descriptor).isOrdered())) {
          // 如果是單例或者是StreamDependencyDescriptor類型,也是調(diào)用
          // bean工廠的getBean方法獲取處理化bean對象,只是value可能為NullBean
          Object beanInstance = descriptor.resolveCandidate(candidateName,
                  requiredType, this);
          candidates.put(candidateName, (beanInstance instanceof NullBean ?
                  null : beanInstance));
       } else {
          // 無法識別處理的則將String名字編程對象的class對象,以方便后續(xù)流程
          // 直接初始化class類型對應的bean對象
          candidates.put(candidateName, getType(candidateName));
       }
    }
}

至此,兩個流程的分析便已經(jīng)結(jié)束了,要想了解其具體流程還是需要自己去走一遍源碼,并且仔細分析一下各個方法的搭配和前后流程關(guān)系,否則不管看多少遍都是無用功。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java list集合排序按某一屬性排序操作

    java list集合排序按某一屬性排序操作

    這篇文章主要介紹了java list集合排序按某一屬性排序操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 解析java中volatile關(guān)鍵字

    解析java中volatile關(guān)鍵字

    這篇文章主要為大家解析了java中volatile關(guān)鍵字,經(jīng)常有人把volatile關(guān)鍵字和synchronized或者lock混淆,本文就為大家好好區(qū)分,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 詳解Hibernate緩存與性能優(yōu)化

    詳解Hibernate緩存與性能優(yōu)化

    在hibernate中,提到性能優(yōu)化,很自然地我們就想到了緩存。緩存是什么,都有哪些呢?下面這篇文章就主要給大家介紹了關(guān)于Hibernate緩存與性能優(yōu)化的相關(guān)資料,需要的朋友可以參考下。
    2017-02-02
  • Spring Boot項目如何同時支持HTTP和HTTPS協(xié)議的實現(xiàn)

    Spring Boot項目如何同時支持HTTP和HTTPS協(xié)議的實現(xiàn)

    這篇文章主要介紹了Spring Boot項目如何同時支持HTTP和HTTPS協(xié)議的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • BigDecimal divide除法除不盡報錯的問題及解決

    BigDecimal divide除法除不盡報錯的問題及解決

    這篇文章主要介紹了BigDecimal divide除法除不盡報錯的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作

    Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作

    這篇文章主要介紹了Springboot JPA 枚舉Enum類型存入到數(shù)據(jù)庫的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java SpringMVC異步處理詳解

    Java SpringMVC異步處理詳解

    這篇文章主要介紹了Java springmvc的處理異步,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-10-10
  • @Slf4j?如何實現(xiàn)日志輸入到外部文件

    @Slf4j?如何實現(xiàn)日志輸入到外部文件

    這篇文章主要介紹了@Slf4j?如何實現(xiàn)日志輸入到外部文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • ssm框架Springmvc文件上傳實現(xiàn)代碼詳解

    ssm框架Springmvc文件上傳實現(xiàn)代碼詳解

    這篇文章主要介紹了ssm框架Springmvc文件上傳實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • Java實現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的示例

    Java實現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的示例

    這篇文章主要介紹了Java實現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的示例,幫助大家方便的進行文件格式轉(zhuǎn)換,完成需求,感興趣的朋友可以了解下
    2020-11-11

最新評論

97香蕉碰碰人妻国产樱花| 一区二区三区四区中文| 黄色片一级美女黄色片| 亚洲天堂精品久久久| 男人的天堂一区二区在线观看| 五月婷婷在线观看视频免费| 香蕉片在线观看av| 日本少妇精品免费视频| 亚洲中文字字幕乱码| 亚洲国产成人无码麻豆艾秋| 熟女妇女老妇一二三区| 亚洲女人的天堂av| 一区二区三区精品日本| 亚洲一级av大片免费观看| 精品高潮呻吟久久av| 国产视频一区在线观看| 国产亚洲精品视频合集| 边摸边做超爽毛片18禁色戒| 欧美一区二区三区啪啪同性| 欧美另类一区二区视频| 超碰97人人做人人爱| 38av一区二区三区| 亚洲福利精品视频在线免费观看| 在线免费观看国产精品黄色| 99精品国自产在线人| 在线观看911精品国产| 国产一区二区在线欧美| 亚洲老熟妇日本老妇| 日韩亚洲高清在线观看| 亚洲熟女女同志女同| 又粗又长 明星操逼小视频| 91久久国产成人免费网站| 狠狠的往里顶撞h百合| 丝袜亚洲另类欧美变态| 日本女人一级免费片| 性色蜜臀av一区二区三区| 最新91九色国产在线观看| 青青青青青操视频在线观看| 欧亚乱色一区二区三区| 天天色天天爱天天爽| 99精品视频在线观看免费播放| 亚洲一区二区久久久人妻| 午夜在线观看岛国av,com| 日本女人一级免费片| 99久久激情婷婷综合五月天| 中文字幕av熟女人妻| 91大屁股国产一区二区| 动色av一区二区三区| 神马午夜在线观看视频| 11久久久久久久久久久| 欧美日韩熟女一区二区三区| 男生用鸡操女生视频动漫 | 久久这里只有精品热视频| 国产成人精品av网站| 大香蕉伊人中文字幕| 国产精品久久久久久久女人18| 日韩北条麻妃一区在线| 在线观看av观看av| 老司机免费视频网站在线看| 黑人3p华裔熟女普通话| 日韩欧美一级精品在线观看| 久久久噜噜噜久久熟女av| 曰本无码人妻丰满熟妇啪啪| 人人妻人人爱人人草| 青草久久视频在线观看| 久久久极品久久蜜桃| 亚洲一级特黄特黄黄色录像片| 狠狠地躁夜夜躁日日躁| 国产精品日韩欧美一区二区| 国产aⅴ一线在线观看| 男人操女人的逼免费视频| 中国产一级黄片免费视频播放| 亚欧在线视频你懂的| 福利视频网久久91| 国产精品入口麻豆啊啊啊 | 91九色国产porny蝌蚪| 日韩欧美高清免费在线| 天天日天天透天天操| 91自产国产精品视频| 久久久久久97三级| 欧美在线精品一区二区三区视频| 国产一区二区视频观看| 欧美成人精品欧美一级黄色| 亚洲欧美清纯唯美另类| 超鹏97历史在线观看| 中文字幕日韩人妻在线三区| 亚洲av男人的天堂你懂的| 边摸边做超爽毛片18禁色戒| 中文字幕一区二区三区人妻大片 | 国产视频在线视频播放| 国产精彩对白一区二区三区| 91福利视频免费在线观看| 日韩美女搞黄视频免费| 2020久久躁狠狠躁夜夜躁| 国产V亚洲V天堂无码欠欠| 男人操女人的逼免费视频| 偷拍自拍视频图片免费| 日韩在线视频观看有码在线| 精品久久久久久久久久久a√国产| 91国产在线免费播放| 天天摸天天日天天操| 五十路av熟女松本翔子| 国产女人叫床高潮大片视频| 极品丝袜一区二区三区| 亚洲综合另类精品小说| 亚洲少妇人妻无码精品| 国产午夜无码福利在线看| 黑人解禁人妻叶爱071| 在线观看视频 你懂的| 成人H精品动漫在线无码播放| 扒开腿挺进肉嫩小18禁视频| 粉嫩av蜜乳av蜜臀| 日本性感美女视频网站| 亚洲欧美色一区二区| 一区二区三区四区五区性感视频| 日韩成人综艺在线播放| 中文字幕人妻被公上司喝醉在线| 欧美成人综合视频一区二区| 都市激情校园春色狠狠| 欧美日韩v中文在线| 国产日韩精品免费在线| 超级碰碰在线视频免费观看| 免费在线看的黄片视频| 福利视频网久久91| 人妻熟女中文字幕aⅴ在线| 最新91九色国产在线观看| 97资源人妻免费在线视频| 少妇ww搡性bbb91| 超级福利视频在线观看| 性生活第二下硬不起来| 最新欧美一二三视频| 久久精品美女免费视频| 亚洲变态另类色图天堂网| 熟女在线视频一区二区三区| 日本裸体熟妇区二区欧美| 天天干夜夜操天天舔| 啪啪啪18禁一区二区三区 | 天天日天天天天天天天天天天| 精品美女福利在线观看| av视屏免费在线播放| 黄色三级网站免费下载| 护士小嫩嫩又紧又爽20p| 视频啪啪啪免费观看| 日韩中文字幕福利av| 亚洲欧美一卡二卡三卡| jiuse91九色视频| 久久久久久久精品成人热| 日美女屁股黄邑视频| 开心 色 六月 婷婷| 熟女91pooyn熟女| 欧美精品久久久久久影院| 91麻豆精品久久久久| 国产黄色高清资源在线免费观看| 欧美另类z0z变态| 91国语爽死我了不卡| 成人24小时免费视频| 欧美成人小视频在线免费看| 九九视频在线精品播放| 国产精品免费不卡av| 亚洲一区二区久久久人妻| 啊啊啊想要被插进去视频| 2020久久躁狠狠躁夜夜躁| 色哟哟在线网站入口| 少妇与子乱在线观看| 2018最新中文字幕在线观看| 欧美精品黑人性xxxx| av完全免费在线观看av| 亚洲一区二区三区五区| 操日韩美女视频在线免费看| 中文字幕人妻三级在线观看| 绝顶痉挛大潮喷高潮无码| 亚洲最大免费在线观看| 一级a看免费观看网站| 国产一区成人在线观看视频 | 动漫黑丝美女的鸡巴| 欧美老鸡巴日小嫩逼| v888av在线观看视频| 欧美一级视频一区二区| 久久综合老鸭窝色综合久久 | 女蜜桃臀紧身瑜伽裤| 大香蕉玖玖一区2区| 春色激情网欧美成人| 亚洲少妇高潮免费观看| 福利片区一区二体验区| 中国黄片视频一区91| 日韩伦理短片在线观看| 青青青青爽手机在线| 日韩无码国产精品强奸乱伦| 成人高潮aa毛片免费| 超pen在线观看视频公开97| 免费在线看的黄网站| 国产V亚洲V天堂无码欠欠| 日韩美在线观看视频黄| 亚洲另类综合一区小说| 熟女少妇激情五十路| 中文亚洲欧美日韩无线码| 91极品新人『兔兔』精品新作| 天天干天天操天天爽天天摸| 2022中文字幕在线| 亚洲午夜精品小视频| 懂色av蜜桃a v| 亚洲在线免费h观看网站| 中国黄片视频一区91| 亚洲第一伊人天堂网| chinese国产盗摄一区二区| 激情小视频国产在线| 阴茎插到阴道里面的视频| 五月精品丁香久久久久福利社| 99精品亚洲av无码国产另类| 日本阿v视频在线免费观看| 国产福利小视频大全| 国产午夜亚洲精品不卡在线观看| 91传媒一区二区三区| 欧美专区日韩专区国产专区| 少妇人妻二三区视频| 激情色图一区二区三区| 亚洲一级av大片免费观看| 成人av电影免费版| 亚洲福利天堂久久久久久| 欧美精品伦理三区四区| 亚洲图片欧美校园春色| 成人精品在线观看视频| 日本精品视频不卡一二三| 欧美一区二区中文字幕电影| 99视频精品全部15| 经典av尤物一区二区| 2021久久免费视频| 亚洲另类综合一区小说| 一区国内二区日韩三区欧美| 久久久久久久久久久免费女人| 精品国产午夜视频一区二区| 久久这里只有精彩视频免费| av在线资源中文字幕| 精品日产卡一卡二卡国色天香| 亚洲伊人久久精品影院一美女洗澡 | 亚洲国产在线精品国偷产拍| aaa久久久久久久久| 亚洲中文精品人人免费| 一级黄色片夫妻性生活| 18禁无翼鸟成人在线| 欧美视频一区免费在线| 亚洲欧美综合在线探花| 888亚洲欧美国产va在线播放| 亚洲老熟妇日本老妇| 亚洲欧美福利在线观看| 青娱乐在线免费视频盛宴| 婷婷六月天中文字幕| 老司机福利精品视频在线| 精品成人午夜免费看| 成人av久久精品一区二区| 人人妻人人爽人人添夜| 一区二区三区av高清免费| 欧美国产亚洲中英文字幕| 老司机你懂得福利视频| 精品一区二区三区在线观看| 久久丁香婷婷六月天| 99精品免费久久久久久久久a| 国产露脸对白在线观看| 亚洲免费福利一区二区三区| 日本熟女精品一区二区三区| 日韩人妻xxxxx| 日本韩国亚洲综合日韩欧美国产| 天天操天天污天天射| 男大肉棒猛烈插女免费视频 | 欧美精品 日韩国产| 国产丰满熟女成人视频| 精品欧美一区二区vr在线观看 | av久久精品北条麻妃av观看| 国产黄色大片在线免费播放| 噜噜色噜噜噜久色超碰| 美女骚逼日出水来了| 日本a级视频老女人| 一区二区三区日韩久久| 69精品视频一区二区在线观看| 亚洲欧美综合另类13p| 老司机福利精品免费视频一区二区 | 黄色录像鸡巴插进去| 最近中文2019年在线看| 欧美老妇精品另类不卡片| 人妻另类专区欧美制服| 亚洲激情av一区二区| 亚洲综合在线观看免费| 青青草在观免费国产精品| 大鸡八强奸视频在线观看| 亚洲人人妻一区二区三区| www天堂在线久久| 国产中文精品在线观看| 91亚洲手机在线视频播放| 天天色天天舔天天射天天爽| 亚洲另类综合一区小说| 精品av久久久久久久| 都市激情校园春色狠狠| 天天日天天日天天擦| 色av色婷婷人妻久久久精品高清| 91免费放福利在线观看| 男人的天堂av日韩亚洲| 久久免费看少妇高潮完整版| 天天做天天干天天操天天射| 国产三级精品三级在线不卡| 亚洲免费成人a v| 国际av大片在线免费观看| 自拍偷拍亚洲精品第2页| jiuse91九色视频| 午夜激情久久不卡一区二区| 亚洲一区二区三区久久受| 亚洲熟色妇av日韩熟色妇在线| 天天日天天操天天摸天天舔| 中文字幕高清在线免费播放| 天天日天天干天天插舔舔| 在线视频这里只有精品自拍| 久久久久久久久久性潮| 2o22av在线视频| 国产福利小视频免费观看| 91精品国产综合久久久蜜| 亚洲另类图片蜜臀av| 性生活第二下硬不起来| 伊人日日日草夜夜草| av欧美网站在线观看| 老司机欧美视频在线看| 国产+亚洲+欧美+另类| 78色精品一区二区三区| 久久热这里这里只有精品| 一区二区三区久久中文字幕| 国产美女精品福利在线| 中文字幕,亚洲人妻| 国产精品入口麻豆啊啊啊 | 亚洲最大免费在线观看| 爆乳骚货内射骚货内射在线| 白白操白白色在线免费视频| 视频啪啪啪免费观看| 天天射夜夜操狠狠干| 男生舔女生逼逼的视频| 啪啪啪啪啪啪啪啪啪啪黄色| 免费大片在线观看视频网站| 精品一线二线三线日本| 欧美久久一区二区伊人| 欧美精品 日韩国产| 天码人妻一区二区三区在线看| 国产 在线 免费 精品| 精品区一区二区三区四区人妻| 91精品综合久久久久3d动漫| 免费在线看的黄网站| 激情内射在线免费观看| 男人的天堂av日韩亚洲| 在线观看911精品国产| 插小穴高清无码中文字幕| 男生舔女生逼逼的视频| 色综合久久久久久久久中文| 国产亚洲欧美视频网站| 欧美成人精品欧美一级黄色| gay gay男男瑟瑟在线网站| 深田咏美亚洲一区二区| 亚洲熟妇x久久av久久| 欧美第一页在线免费观看视频| 国产精品探花熟女在线观看| eeuss鲁片一区二区三区| 国产福利小视频二区| 69精品视频一区二区在线观看| 天天射,天天操,天天说| 经典亚洲伊人第一页| 女人精品内射国产99| 大鸡巴后入爆操大屁股美女| 91综合久久亚洲综合| 国产免费高清视频视频| 青娱乐蜜桃臀av色| 青青青aaaa免费| 精品人妻每日一部精品| 老司机福利精品视频在线| 韩国爱爱视频中文字幕| 欧美老妇精品另类不卡片| 精品欧美一区二区vr在线观看 | 免费岛国喷水视频在线观看| 亚洲成人激情视频免费观看了 | 国产日韩欧美视频在线导航 | 国产精品大陆在线2019不卡| 中文字幕视频一区二区在线观看| 亚洲av日韩精品久久久| 精品av国产一区二区三区四区| 狍和女人的王色毛片| 日本女大学生的黄色小视频| 4个黑人操素人视频网站精品91| 欧美黑人性暴力猛交喷水| 啪啪啪啪啪啪啪啪啪啪黄色| 亚洲av极品精品在线观看| 欧美爆乳肉感大码在线观看| 在线观看国产免费麻豆| 九九热99视频在线观看97| av一本二本在线观看| 日日夜夜狠狠干视频| 97瑟瑟超碰在线香蕉| 日韩剧情片电影在线收看| 玖玖一区二区在线观看| 偷青青国产精品青青在线观看| 国产精品3p和黑人大战| 在线可以看的视频你懂的| 免费福利av在线一区二区三区| 国产使劲操在线播放| 含骚鸡巴玩逼逼视频| 91人妻精品一区二区在线看| 亚洲一级特黄特黄黄色录像片| 视频一区二区在线免费播放| 老司机午夜精品视频资源| 1区2区3区4区视频在线观看| 成年人的在线免费视频| 亚洲天堂av最新网址| AV天堂一区二区免费试看| 丁香花免费在线观看中文字幕| 国产九色91在线观看精品| 天天日天天舔天天射进去| 久久久91蜜桃精品ad| 不卡一不卡二不卡三| 精品av国产一区二区三区四区| 欧美黑人巨大性xxxxx猛交| 国产黄色高清资源在线免费观看 | 在线国产精品一区二区三区| 水蜜桃国产一区二区三区| 人妻少妇一区二区三区蜜桃| 99精品国产自在现线观看| 青青伊人一精品视频| 精品一区二区三区三区88 | 天美传媒mv视频在线观看| 瑟瑟视频在线观看免费视频| 97超碰人人搞人人| 国产精品国产三级麻豆| 精品久久婷婷免费视频| 亚洲国产精品美女在线观看| 日韩美女综合中文字幕pp| 亚洲专区激情在线观看视频| 国产精品三级三级三级| 在线不卡日韩视频播放| 亚洲精品乱码久久久久久密桃明| 午夜激情高清在线观看| 青青青国产片免费观看视频| 日本脱亚入欧是指什么| 日本性感美女三级视频| 久久尻中国美女视频| 欧美va不卡视频在线观看 | 日韩精品一区二区三区在线播放| 男人的网址你懂的亚洲欧洲av| 亚洲av午夜免费观看| 精品成人啪啪18免费蜜臀| av天堂中文字幕最新| 亚洲高清视频在线不卡| 亚洲激情,偷拍视频| 国产日韩av一区二区在线| 97色视频在线观看| 91试看福利一分钟| 免费十精品十国产网站| 少妇深喉口爆吞精韩国| 韩国AV无码不卡在线播放| 极品性荡少妇一区二区色欲| 久久麻豆亚洲精品av| 久久精品亚洲成在人线a| 亚洲精品一线二线在线观看| 偷拍自拍福利视频在线观看| 国产亚洲四十路五十路| 国产三级片久久久久久久| 亚洲一区二区三区五区| 水蜜桃国产一区二区三区| 人人爽亚洲av人人爽av| 国产精品中文av在线播放| 国产成人精品福利短视频| 黑人进入丰满少妇视频| 中文亚洲欧美日韩无线码| 阿v天堂2014 一区亚洲| 色偷偷伊人大杳蕉综合网| 欧美专区第八页一区在线播放 | 啊啊好大好爽啊啊操我啊啊视频| 美女大bxxxx内射| 日美女屁股黄邑视频| 亚洲欧美成人综合在线观看| 美日韩在线视频免费看| 51精品视频免费在线观看| 黄色大片免费观看网站| 欧美另类z0z变态| 性欧美激情久久久久久久| 青娱乐最新视频在线| 夜色17s精品人妻熟女| 国产精品国产精品一区二区| 日本熟妇一区二区x x| 国产精品三级三级三级| 国内自拍第一页在线观看| 黄页网视频在线免费观看| 天天做天天干天天舔| 日视频免费在线观看| 国产妇女自拍区在线观看| 欧美一区二区三区高清不卡tv| 中出中文字幕在线观看| 精品一线二线三线日本| 18禁网站一区二区三区四区| 久碰精品少妇中文字幕av| 国产使劲操在线播放| 超级av免费观看一区二区三区| 少妇人妻二三区视频| 日韩成人综艺在线播放| 国产三级精品三级在线不卡| 社区自拍揄拍尻屁你懂的| 日本午夜爽爽爽爽爽视频在线观看| 日韩在线视频观看有码在线| 亚洲午夜伦理视频在线| 中文字幕乱码人妻电影| 综合激情网激情五月天| 扒开让我视频在线观看| 女人精品内射国产99| 欧亚乱色一区二区三区| 成年人黄视频在线观看| 18禁美女黄网站色大片下载| 99久久99一区二区三区| 宅男噜噜噜666免费观看| 久久精品国产23696| 亚洲成人午夜电影在线观看| 精品一线二线三线日本| 青青尤物在线观看视频网站| 精品av国产一区二区三区四区| 日本一本午夜在线播放| 亚洲成人免费看电影| 国产大学生援交正在播放| 97精品人妻一区二区三区精品 | 伊人开心婷婷国产av| 亚洲欧美一区二区三区爱爱动图| 亚洲一区二区三区在线高清| 国产一区av澳门在线观看| 啊慢点鸡巴太大了啊舒服视频| weyvv5国产成人精品的视频| 精品老妇女久久9g国产| 中文字幕中文字幕人妻| 国产精品视频欧美一区二区| 精品成人午夜免费看| 视频 国产 精品 熟女 | 亚洲福利天堂久久久久久| 久久久精品国产亚洲AV一| 精品黑人一区二区三区久久国产 | 韩国三级aaaaa高清视频| 影音先锋女人av噜噜色| 9久在线视频只有精品| 99久久中文字幕一本人| 色呦呦视频在线观看视频| 青青社区2国产视频| 午夜精品亚洲精品五月色| 久久精品国产亚洲精品166m| 99热99这里精品6国产| 五月婷婷在线观看视频免费| 亚洲成av人无码不卡影片一| 制丝袜业一区二区三区| 2021久久免费视频| 91传媒一区二区三区| sejizz在线视频| av破解版在线观看| 亚洲欧美国产麻豆综合| 99久久激情婷婷综合五月天| 欧美一区二区三区四区性视频| 大陆胖女人与丈夫操b国语高清| 欧美综合婷婷欧美综合| 国产熟妇人妻ⅹxxxx麻豆| 日本人妻少妇18—xx| 日本免费视频午夜福利视频| 2022精品久久久久久中文字幕| 日本一区二区三区免费小视频| 爱有来生高清在线中文字幕| 亚洲天堂av最新网址| 偷拍美女一区二区三区| 夜女神免费福利视频| 人妻爱爱 中文字幕| av日韩在线观看大全| 成人高潮aa毛片免费| 999久久久久999| 国产之丝袜脚在线一区二区三区| 中文字幕在线一区精品| 在线观看的黄色免费网站| 成年人黄色片免费网站| 久久久久91精品推荐99| 欧美va不卡视频在线观看| 91精品免费久久久久久| 国产综合高清在线观看| 91人妻人人做人人爽在线| 亚洲国产成人最新资源| 天天干天天搞天天摸| 久久久久久久精品老熟妇| 日韩精品中文字幕在线| 亚洲成人午夜电影在线观看| 最新黄色av网站在线观看| 91极品大一女神正在播放| 国产精品精品精品999| 亚洲另类综合一区小说| 做爰视频毛片下载蜜桃视频1| 蜜臀av久久久久蜜臀av麻豆| 国产精品入口麻豆啊啊啊| 欧美日韩不卡一区不区二区| 欧美爆乳肉感大码在线观看| 2018最新中文字幕在线观看| 狠狠操狠狠操免费视频| 亚洲自拍偷拍综合色| 在线视频国产欧美日韩| 国产亚洲欧美45p| 日本性感美女写真视频| 婷婷午夜国产精品久久久| 91‖亚洲‖国产熟女| 久久久精品国产亚洲AV一| jiujiure精品视频在线| 大陆精品一区二区三区久久| 欧美天堂av无线av欧美| jiujiure精品视频在线| 亚洲第一伊人天堂网| 激情人妻校园春色亚洲欧美 | 91成人精品亚洲国产| 97超碰免费在线视频| 大屁股肉感人妻中文字幕在线| av在线shipin| 日本阿v视频在线免费观看| 欧美久久久久久三级网| 国产在线一区二区三区麻酥酥| 中文字幕综合一区二区| 青青青青青操视频在线观看| 岛国一区二区三区视频在线| 97精品综合久久在线| 99精品免费观看视频| 天天操天天操天天碰| 92福利视频午夜1000看| 国产实拍勾搭女技师av在线| 国产janese在线播放| 美女av色播在线播放| 少妇人妻真实精品视频| 人妻少妇中文有码精品| 国产九色91在线视频| 国产污污污污网站在线| 瑟瑟视频在线观看免费视频| 97少妇精品在线观看| 亚洲国产精品久久久久久6| 国产97在线视频观看| 蝴蝶伊人久久中文娱乐网| 在线观看欧美黄片一区二区三区| 亚洲欧美国产麻豆综合| 国产va精品免费观看| 成熟丰满熟妇高潮xx×xx| 亚洲精品福利网站图片| 99re久久这里都是精品视频| 亚洲 欧美 自拍 偷拍 在线| 一本久久精品一区二区| 亚洲国产欧美国产综合在线| 久久免看30视频口爆视频| 欧美综合婷婷欧美综合| 久久久久久国产精品| 中文字幕人妻av在线观看| 国产一区二区视频观看| 日本熟妇丰满厨房55| 亚洲成人激情视频免费观看了 | 99re久久这里都是精品视频| asmr福利视频在线观看| 人妻久久无码中文成人| 国产亚洲视频在线二区| 欧洲黄页网免费观看| 亚洲少妇人妻无码精品| 久草视频在线看免费| 日本成人不卡一区二区| 骚逼被大屌狂草视频免费看| 日韩人妻丝袜中文字幕| 久久h视频在线观看| av亚洲中文天堂字幕网| 欧美aa一级一区三区四区| 影音先锋女人av噜噜色| 姐姐的朋友2在线观看中文字幕| 国产黄色高清资源在线免费观看| wwwxxx一级黄色片| 成年美女黄网站18禁久久| 五十路丰满人妻熟妇| 99精品视频在线观看婷婷| 97人妻夜夜爽二区欧美极品| 岛国毛片视频免费在线观看| 国产aⅴ一线在线观看| 沙月文乃人妻侵犯中文字幕在线 | 97国产在线av精品| 特级欧美插插插插插bbbbb| 中文字幕综合一区二区| 97a片免费在线观看| 天天日天天干天天舔天天射| 亚洲少妇高潮免费观看| 99re6热在线精品| 亚洲av日韩av网站| 亚洲一区二区三区在线高清| 成人18禁网站在线播放| 在线视频这里只有精品自拍| 欧美日韩国产一区二区三区三州| 韩国黄色一级二级三级| 狠狠鲁狠狠操天天晚上干干| 亚洲天堂精品福利成人av| 欧美偷拍亚洲一区二区| 精品国产亚洲av一淫| 国产免费av一区二区凹凸四季| 绝色少妇高潮3在线观看| 51精品视频免费在线观看| 偷拍3456eee| 75国产综合在线视频| 亚洲国产成人在线一区| 美女视频福利免费看| 真实国模和老外性视频| 精品一区二区三区三区88| 一区二区久久成人网| 亚洲超碰97人人做人人爱| 一区二区三区的久久的蜜桃的视频 | 51国产成人精品视频| 深夜男人福利在线观看| av中文字幕网址在线| 国产在线拍揄自揄视频网站| 五十路熟女人妻一区二区9933| 91人妻精品一区二区久久| 男人天堂av天天操| 93视频一区二区三区| 100%美女蜜桃视频| 一二三区在线观看视频| 最新的中文字幕 亚洲| 51国产成人精品视频| 国产日本精品久久久久久久| 偷拍自拍亚洲美腿丝袜| 久久久久久久久久一区二区三区| 成人高潮aa毛片免费| 绝顶痉挛大潮喷高潮无码 | 精品人人人妻人人玩日产欧| 欧美成人精品欧美一级黄色| 东京热男人的av天堂| 日本性感美女写真视频| 国产久久久精品毛片| 黑人巨大精品欧美视频| 2022精品久久久久久中文字幕| 天天日天天操天天摸天天舔| 国产久久久精品毛片| 国产黄色大片在线免费播放| 大尺度激情四射网站| 狠狠操操操操操操操操操| 中国熟女一区二区性xx| 国产九色91在线观看精品| 精产国品久久一二三产区区别| 水蜜桃一区二区三区在线观看视频 | 超级福利视频在线观看| 美女小视频网站在线| 成人av免费不卡在线观看| 亚洲成人av一区在线| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | av在线观看网址av| 桃色视频在线观看一区二区 | 999热精品视频在线| 亚洲午夜精品小视频| 美女骚逼日出水来了| 亚洲熟女久久久36d| 成人免费做爰高潮视频| 超级福利视频在线观看| 搡老妇人老女人老熟女| 大香蕉伊人中文字幕| 3337p日本欧洲大胆色噜噜| 久久永久免费精品人妻专区 | 五十路丰满人妻熟妇| av男人天堂狠狠干| 精品国产午夜视频一区二区| 人人超碰国字幕观看97| 欧美日韩亚洲国产无线码| 亚洲av日韩av第一区二区三区| 扒开腿挺进肉嫩小18禁视频| 91麻豆精品传媒国产黄色片| 欧洲精品第一页欧洲精品亚洲| 欧美另类一区二区视频| 最新91九色国产在线观看| 午夜精品在线视频一区| 亚洲综合另类精品小说| 欧美精品欧美极品欧美视频 | 亚洲av男人的天堂你懂的| 日本女人一级免费片| 1区2区3区不卡视频| 在线视频自拍第三页| 中文字幕—97超碰网| 特黄老太婆aa毛毛片| 老司机午夜精品视频资源| 成人高潮aa毛片免费| 亚洲一区自拍高清免费视频| 日韩伦理短片在线观看| 亚洲 欧美 精品 激情 偷拍 | 亚洲成人av在线一区二区| 日韩人妻xxxxx| 2022天天干天天操| 岛国黄色大片在线观看| 97少妇精品在线观看| 精品一区二区三区欧美| 日本熟妇一区二区x x| 狠狠操狠狠操免费视频| 亚洲中文精品人人免费| 日韩精品中文字幕福利| 欧美精品 日韩国产| 国产精品入口麻豆啊啊啊 | 日韩美女福利视频网| 99久久成人日韩欧美精品| 99热99这里精品6国产| 福利午夜视频在线合集| 又色又爽又黄又刺激av网站| 久久久久久性虐视频| 免费在线黄色观看网站| av天堂加勒比在线| 免费观看国产综合视频| 黑人解禁人妻叶爱071| 女同性ⅹxx女同h偷拍| 免费福利av在线一区二区三区| 精品美女久久久久久| 干逼又爽又黄又免费的视频| 亚洲图片欧美校园春色| 国产成人自拍视频播放 | 日韩影片一区二区三区不卡免费| 五月婷婷在线观看视频免费| 亚洲激情av一区二区| 中文字幕奴隷色的舞台50| 天天做天天干天天操天天射| 岛国一区二区三区视频在线| 久久www免费人成一看片| 中文乱理伦片在线观看| 2025年人妻中文字幕乱码在线| 日本精品一区二区三区在线视频。 | 天天干天天日天天干天天操 | 国产熟妇人妻ⅹxxxx麻豆| 美女日逼视频免费观看| 深田咏美亚洲一区二区| 绯色av蜜臀vs少妇| 天天色天天舔天天射天天爽| 最新91九色国产在线观看| 91传媒一区二区三区| 亚洲人人妻一区二区三区| 欧洲亚洲欧美日韩综合| 亚洲午夜福利中文乱码字幕| 免费在线看的黄网站| 91p0rny九色露脸熟女| 精品一线二线三线日本| 美女av色播在线播放| 日韩欧美高清免费在线| 内射久久久久综合网| 欧美成人黄片一区二区三区 | 国产极品精品免费视频| 绝顶痉挛大潮喷高潮无码| 女同性ⅹxx女同hd| 亚洲丝袜老师诱惑在线观看| 搡老熟女一区二区在线观看| 大黑人性xxxxbbbb| 阴茎插到阴道里面的视频| 欧美日韩激情啪啪啪| 午夜精品九一唐人麻豆嫩草成人| 久久久久五月天丁香社区| 亚洲av无乱一区二区三区性色| 99热99这里精品6国产| 色婷婷综合激情五月免费观看 | 夜色撩人久久7777| 免费男阳茎伸入女阳道视频| 动漫精品视频在线观看| 欧美偷拍亚洲一区二区| 综合一区二区三区蜜臀| 红桃av成人在线观看| 宅男噜噜噜666国产| 成人影片高清在线观看| japanese五十路熟女熟妇| 北条麻妃av在线免费观看| 国产亚洲视频在线观看| 视频一区 二区 三区 综合| 亚洲欧美另类手机在线| 欧美精品黑人性xxxx| 青娱乐极品视频青青草| 强行扒开双腿猛烈进入免费版| 一二三中文乱码亚洲乱码one| 自拍偷拍日韩欧美亚洲| 亚洲国产精品免费在线观看| 91人妻精品久久久久久久网站| 中文字幕无码一区二区免费| 2018最新中文字幕在线观看| 干逼又爽又黄又免费的视频| 高清成人av一区三区| 黑人借宿ntr人妻的沦陷2| 亚洲欧美清纯唯美另类| 日美女屁股黄邑视频| av在线免费观看亚洲天堂| av手机免费在线观看高潮| 大鸡巴操娇小玲珑的女孩逼| 亚洲午夜伦理视频在线| 3337p日本欧洲大胆色噜噜| 91精品啪在线免费| 做爰视频毛片下载蜜桃视频1| 在线国产中文字幕视频| 男人的天堂在线黄色| 青青青青在线视频免费观看| 成年人黄色片免费网站| 国内资源最丰富的网站| 大香蕉大香蕉大香蕉大香蕉大香蕉| 亚洲熟妇x久久av久久| 阴茎插到阴道里面的视频| 美女视频福利免费看| 超污视频在线观看污污污| 亚洲成人国产av在线| 福利一二三在线视频观看| 国产女人叫床高潮大片视频| 亚洲综合自拍视频一区| 日辽宁老肥女在线观看视频| 日韩影片一区二区三区不卡免费 | 亚洲高清国产一区二区三区| 免费看国产又粗又猛又爽又黄视频| 美女福利视频导航网站| 女同久久精品秋霞网| 国产普通话插插视频| 日本最新一二三区不卡在线 | 大香蕉大香蕉大香蕉大香蕉大香蕉| 成人在线欧美日韩国产| 夜夜嗨av一区二区三区中文字幕| 日韩欧美高清免费在线| 国产熟妇人妻ⅹxxxx麻豆| 天天日天天舔天天射进去| 亚洲欧美激情中文字幕| 少妇人妻久久久久视频黄片| 成人影片高清在线观看| 天天干天天操天天插天天日| 天天日天天透天天操| asmr福利视频在线观看| 超鹏97历史在线观看| 亚洲 中文 自拍 另类 欧美| 欧美日韩国产一区二区三区三州| 欧美va亚洲va天堂va| av在线免费中文字幕| 91色秘乱一区二区三区| 天天躁日日躁狠狠躁av麻豆| 精品老妇女久久9g国产| 日韩在线中文字幕色| 又色又爽又黄的美女裸体| 成年人黄视频在线观看| 天天日天天爽天天爽| 美味人妻2在线播放| 老有所依在线观看完整版| 十八禁在线观看地址免费| 国产自拍黄片在线观看| 1000部国产精品成人观看视频| 大骚逼91抽插出水视频| 亚洲精品乱码久久久久久密桃明| 亚洲另类在线免费观看| 三上悠亚和黑人665番号| 亚洲一区二区人妻av| 91精品国产黑色丝袜| 日本丰满熟妇BBXBBXHD| 日韩欧美亚洲熟女人妻| 亚洲一区二区三区uij| 国产精品福利小视频a| 天天日天天玩天天摸| 亚洲av日韩av网站| 亚洲一区二区三区在线高清 | 在线观看国产网站资源| 男女之间激情网午夜在线| 精品视频一区二区三区四区五区| 亚洲另类综合一区小说| 天堂av中文在线最新版| 久草视频在线看免费| 91国产在线免费播放| 黑人进入丰满少妇视频| 成人综合亚洲欧美一区| 黄色片一级美女黄色片| 日本人妻欲求不满中文字幕| 精品国产高潮中文字幕| 美女福利视频导航网站| 馒头大胆亚洲一区二区| 国产精品精品精品999| 色哟哟国产精品入口| 日本黄色特一级视频| 成人久久精品一区二区三区| 日韩黄色片在线观看网站| 欧美一区二区三区啪啪同性| 91chinese在线视频| 日韩亚洲高清在线观看| 日韩亚洲高清在线观看| yy6080国产在线视频| 天天色天天舔天天射天天爽| 国产成人自拍视频在线免费观看| 午夜在线一区二区免费| 久久永久免费精品人妻专区| 大陆精品一区二区三区久久| 精品欧美一区二区vr在线观看| 成人24小时免费视频| 伊人情人综合成人久久网小说| 综合激情网激情五月天| 韩国女主播精品视频网站| 国产超码片内射在线| 88成人免费av网站| 青娱乐在线免费视频盛宴 | 精品少妇一二三视频在线| 东京热男人的av天堂| 好太好爽好想要免费| 一区二区三区四区视频在线播放| 人妻自拍视频中国大陆| 熟女人妻在线观看视频| 黑人大几巴狂插日本少妇| 国产成人精品久久二区91| 国产又大又黄免费观看| 美女 午夜 在线视频| 在线新三级黄伊人网| 免费看国产又粗又猛又爽又黄视频 | 水蜜桃国产一区二区三区| 国产精品三级三级三级| av破解版在线观看| 人人超碰国字幕观看97| 日韩av中文在线免费观看| 亚洲精品福利网站图片| 瑟瑟视频在线观看免费视频| 中文乱理伦片在线观看| 美女 午夜 在线视频| 端庄人妻堕落挣扎沉沦| 亚洲粉嫩av一区二区三区| 日本黄色特一级视频| 日韩在线视频观看有码在线| 狠狠鲁狠狠操天天晚上干干| 午夜国产免费福利av| 天堂av在线官网中文| 少妇与子乱在线观看| 大陆胖女人与丈夫操b国语高清| 五十路熟女av天堂| 亚洲 清纯 国产com| 亚洲人人妻一区二区三区| 北条麻妃肉色丝袜视频| 亚洲午夜高清在线观看| 国产女人露脸高潮对白视频| 日本性感美女三级视频| 国产精品久久久久网| 夜女神免费福利视频| 国产1区,2区,3区| 亚洲av无硬久久精品蜜桃| 在线观看免费视频色97| 久久艹在线观看视频| 无码国产精品一区二区高潮久久4| 人妻凌辱欧美丰满熟妇| 99精品一区二区三区的区| 国产日韩精品电影7777| 手机看片福利盒子日韩在线播放| 青青青视频自偷自拍38碰| 天天干天天操天天扣| 97资源人妻免费在线视频| av成人在线观看一区| 成人国产影院在线观看| 天天躁日日躁狠狠躁av麻豆| 五十路丰满人妻熟妇| 日本少妇精品免费视频| 国产精品中文av在线播放| 丝袜亚洲另类欧美变态| 色狠狠av线不卡香蕉一区二区| 久久这里只有精彩视频免费| 在线制服丝袜中文字幕| 最新中文字幕乱码在线| 66久久久久久久久久久| 硬鸡巴动态操女人逼视频| 1区2区3区4区视频在线观看| 人妻少妇精品久久久久久| 午夜久久久久久久99| 熟女人妻在线观看视频| 亚洲福利天堂久久久久久| 天天想要天天操天天干| 蜜桃精品久久久一区二区| 五月天中文字幕内射| 成人30分钟免费视频| 精品首页在线观看视频| 91极品大一女神正在播放| 国产第一美女一区二区三区四区| 91国产在线免费播放| 国产精品久久久久久久女人18| 插逼视频双插洞国产操逼插洞| 天堂av在线播放免费| 成年人中文字幕在线观看| 午夜青青草原网在线观看| 黑人性生活视频免费看| 中文字幕人妻av在线观看| 精品美女久久久久久| 老司机福利精品免费视频一区二区 | 免费国产性生活视频| 亚洲欧洲一区二区在线观看| 78色精品一区二区三区| 国产精品伦理片一区二区| 色偷偷伊人大杳蕉综合网| av天堂加勒比在线| 11久久久久久久久久久| 欧美在线精品一区二区三区视频 | 老司机午夜精品视频资源| 国产夫妻视频在线观看免费| 国产精品人妻一区二区三区网站 | 男人操女人逼逼视频网站| 啊啊好慢点插舔我逼啊啊啊视频| 五月天久久激情视频| 蜜臀成人av在线播放| 成人动漫大肉棒插进去视频| 欧美日韩精品永久免费网址| 欧美黑人与人妻精品| 亚洲激情av一区二区| 亚洲av日韩精品久久久| 欲乱人妻少妇在线视频裸| 青娱乐最新视频在线| 偷拍自拍国产在线视频| 午夜成午夜成年片在线观看| av在线免费中文字幕| 老司机福利精品免费视频一区二区| 性欧美日本大妈母与子| 亚洲一区二区人妻av| 天天日天天爽天天干| 激情伦理欧美日韩中文字幕| 亚洲变态另类色图天堂网| av老司机亚洲一区二区| 成人区人妻精品一区二视频| 韩国男女黄色在线观看| 久草视频福利在线首页| 一区二区免费高清黄色视频| 99热久久这里只有精品| 97超碰免费在线视频| 一区二区三区的久久的蜜桃的视频| www天堂在线久久| 啊啊好大好爽啊啊操我啊啊视频| 亚洲特黄aaaa片| 99久久99一区二区三区| 亚欧在线视频你懂的| 国产欧美精品免费观看视频| 美女在线观看日本亚洲一区| 欧美精产国品一二三产品区别大吗| 97成人免费在线观看网站| 午夜毛片不卡免费观看视频 | 欧美亚洲国产成人免费在线| 午夜在线观看岛国av,com| 91欧美在线免费观看| 亚洲一区二区三区久久受 | 亚洲日产av一区二区在线| 欧美 亚洲 另类综合| 超碰中文字幕免费观看| 黄色录像鸡巴插进去| 欧美一级片免费在线成人观看 | 激情内射在线免费观看| av完全免费在线观看av| 成人av中文字幕一区| 91天堂精品一区二区| 亚洲精品国产在线电影| 少妇深喉口爆吞精韩国| 久久久久久9999久久久久| 精内国产乱码久久久久久| 北条麻妃肉色丝袜视频| 大陆精品一区二区三区久久| 78色精品一区二区三区| 福利视频广场一区二区| 日本熟妇喷水xxx| 成人蜜臀午夜久久一区| 免费男阳茎伸入女阳道视频| 操日韩美女视频在线免费看| 成人18禁网站在线播放| 自拍偷拍,中文字幕| 精彩视频99免费在线| 性感美女诱惑福利视频| 日韩北条麻妃一区在线| 国产又粗又黄又硬又爽| 日本韩国亚洲综合日韩欧美国产| 日韩亚国产欧美三级涩爱| 好吊视频—区二区三区| 中文字幕人妻熟女在线电影| 亚洲 人妻 激情 中文| 国产超码片内射在线| 日本人妻少妇18—xx| 无码精品一区二区三区人| 亚洲2021av天堂| 视频在线亚洲一区二区| 色综合久久无码中文字幕波多| 中文字幕人妻av在线观看| 成人资源在线观看免费官网| 中文字幕第1页av一天堂网| 只有精品亚洲视频在线观看| 中国老熟女偷拍第一页| 91av精品视频在线| 亚洲成高清a人片在线观看| 93视频一区二区三区| 少妇深喉口爆吞精韩国| 人妻素人精油按摩中出| 日本av高清免费网站| 91传媒一区二区三区| 成人30分钟免费视频| 大香蕉伊人中文字幕| av高潮迭起在线观看| 美日韩在线视频免费看| av老司机亚洲一区二区| 超碰在线中文字幕一区二区| 中文字幕人妻熟女在线电影| 免费岛国喷水视频在线观看| 久久一区二区三区人妻欧美| 欧美色呦呦最新网址| 国产视频网站国产视频| 91亚洲精品干熟女蜜桃频道| 天天干天天插天天谢| 中文字幕 亚洲av| 又粗又长 明星操逼小视频| 一本久久精品一区二区| 日韩无码国产精品强奸乱伦| 久久久久久国产精品| 亚洲国产免费av一区二区三区| 人人在线视频一区二区| 视频二区在线视频观看| 中文字幕av男人天堂| 91精品啪在线免费| 天码人妻一区二区三区在线看| 黄色录像鸡巴插进去| aⅴ五十路av熟女中出| 天天躁日日躁狠狠躁av麻豆| 97精品视频在线观看| 免费国产性生活视频| 精彩视频99免费在线| 青青青视频自偷自拍38碰| 在线免费观看黄页视频| 黑人变态深video特大巨大| 精品av国产一区二区三区四区| jiujiure精品视频在线| 成人免费毛片aaaa| 天天日天天添天天爽| 最近中文2019年在线看| 亚洲在线免费h观看网站| 亚洲天堂第一页中文字幕| 无码中文字幕波多野不卡| 天天操夜夜骑日日摸| 亚洲国产精品免费在线观看| 日韩人妻丝袜中文字幕| 日本女大学生的黄色小视频| 真实国模和老外性视频| 天天日天天日天天射天天干 | 极品性荡少妇一区二区色欲| 2019av在线视频| 青青青青青手机视频| 人人爽亚洲av人人爽av| 操日韩美女视频在线免费看| 亚洲国产免费av一区二区三区 | 99热99re在线播放| 国产午夜亚洲精品麻豆| 精品视频国产在线观看| 91精品一区二区三区站长推荐| 国产精品视频男人的天堂| ka0ri在线视频| 精品suv一区二区69| 欧美在线偷拍视频免费看| 五月精品丁香久久久久福利社| 亚洲综合在线观看免费| 性感美女高潮视频久久久| 亚洲国产美女一区二区三区软件| 最新欧美一二三视频| 99精品免费观看视频| 一区二区三区四区视频| 98视频精品在线观看| 久久这里只有精品热视频| 视频一区 视频二区 视频| 嫩草aⅴ一区二区三区| 亚洲熟女女同志女同| 又色又爽又黄的美女裸体| 日韩精品激情在线观看| 只有精品亚洲视频在线观看| 视频 国产 精品 熟女 | 青青草国内在线视频精选| 亚洲激情偷拍一区二区| 好吊视频—区二区三区| 亚洲午夜福利中文乱码字幕| 自拍偷拍 国产资源| 天天摸天天日天天操| 日韩av大胆在线观看| 精品av国产一区二区三区四区| 北条麻妃肉色丝袜视频| 国产九色91在线观看精品| 一区二区三区的久久的蜜桃的视频| 97国产精品97久久| www骚国产精品视频| 亚洲护士一区二区三区| 天天爽夜夜爽人人爽QC| 天天干天天搞天天摸| 黄色中文字幕在线播放| 美味人妻2在线播放| 国产极品美女久久久久久| 亚洲成人免费看电影| 男人的天堂av日韩亚洲| 日韩少妇人妻精品无码专区| 真实国产乱子伦一区二区| 红桃av成人在线观看| 瑟瑟视频在线观看免费视频| 中文字幕欧美日韩射射一| 欧美亚洲牲夜夜综合久久| 国产午夜亚洲精品麻豆| 日本脱亚入欧是指什么| 国产黄色大片在线免费播放| 国产亚洲欧美45p| 天美传媒mv视频在线观看| 边摸边做超爽毛片18禁色戒| 人妻凌辱欧美丰满熟妇| 91精品国产高清自在线看香蕉网 | chinese国产盗摄一区二区| ka0ri在线视频| 免费无码人妻日韩精品一区二区| 18禁美女黄网站色大片下载| 三级等保密码要求条款| 日韩人妻丝袜中文字幕| 97人妻人人澡爽人人精品| 亚洲 欧美 自拍 偷拍 在线| 欧美乱妇无乱码一区二区| 在线观看911精品国产| 日本av熟女在线视频| 丝袜长腿第一页在线| 国产精品探花熟女在线观看| 中国熟女@视频91| 国产熟妇一区二区三区av| 夜色17s精品人妻熟女| 爆乳骚货内射骚货内射在线| 成人色综合中文字幕| 国产熟妇人妻ⅹxxxx麻豆| 国产欧美日韩第三页| 中国无遮挡白丝袜二区精品| 100%美女蜜桃视频| 清纯美女在线观看国产| 亚洲欧美激情中文字幕| 亚洲av男人天堂久久| 色婷婷久久久久swag精品| 国产精品入口麻豆啊啊啊| 国产露脸对白在线观看| 午夜频道成人在线91| 深田咏美亚洲一区二区| 绝顶痉挛大潮喷高潮无码| 自拍偷拍亚洲欧美在线视频| 亚洲天堂成人在线观看视频网站| 在线视频精品你懂的| 经典亚洲伊人第一页| 欧美80老妇人性视频| 欧美成人综合视频一区二区| 黑人解禁人妻叶爱071| 被大鸡吧操的好舒服视频免费| 超碰在线观看免费在线观看| 1024久久国产精品| 日韩少妇人妻精品无码专区| 日本在线不卡免费视频| 这里有精品成人国产99| 精品黑人一区二区三区久久国产 | 老司机免费视频网站在线看| 欧美 亚洲 另类综合| 日日夜夜大香蕉伊人| 经典亚洲伊人第一页| 制服丝袜在线人妻中文字幕| 无码精品一区二区三区人| 伊人精品福利综合导航| 91www一区二区三区| 丁香花免费在线观看中文字幕| 欧美老妇精品另类不卡片| 快点插进来操我逼啊视频| 人人妻人人人操人人人爽| 日日摸夜夜添夜夜添毛片性色av| 精品老妇女久久9g国产| 懂色av蜜桃a v| 十八禁在线观看地址免费| 中文字幕第1页av一天堂网| 国产精品自拍视频大全| 日韩精品中文字幕播放| 青青青青青手机视频| 亚洲av无乱一区二区三区性色| 国产丰满熟女成人视频| av在线免费资源站| 亚洲免费av在线视频| 成人蜜桃美臀九一一区二区三区| 亚洲欧美国产麻豆综合| 久久免费看少妇高潮完整版| 100%美女蜜桃视频| 偷拍自拍亚洲视频在线观看| 日韩成人综艺在线播放| 国产欧美日韩在线观看不卡| 大胸性感美女羞爽操逼毛片| 欧美一区二区中文字幕电影| 中文字幕中文字幕 亚洲国产| 日韩影片一区二区三区不卡免费| 日韩美av高清在线| 国产黄色大片在线免费播放| 成人av天堂丝袜在线观看| 天天日天天鲁天天操| 97人人模人人爽人人喊| 亚洲欧美综合在线探花| 国产性生活中老年人视频网站| 91麻豆精品久久久久| 青青草原色片网站在线观看| 成人激情文学网人妻| 又粗又硬又猛又黄免费30| 888亚洲欧美国产va在线播放| 国产污污污污网站在线| 97a片免费在线观看| 啊啊啊想要被插进去视频| 亚洲1卡2卡三卡4卡在线观看 | 日韩美女综合中文字幕pp| 黑人进入丰满少妇视频| 夏目彩春在线中文字幕| 狠狠躁夜夜躁人人爽天天久天啪| 91快播视频在线观看| 男人和女人激情视频| avjpm亚洲伊人久久| 亚洲av成人网在线观看| 日韩亚洲高清在线观看| 大白屁股精品视频国产| 亚洲精品三级av在线免费观看| 99婷婷在线观看视频| 中文字幕一区二区亚洲一区| 免费人成黄页网站在线观看国产 | 国产三级影院在线观看| 亚洲中文字幕国产日韩| 国产福利在线视频一区| 国产美女精品福利在线| 日韩美女精品视频在线观看网站| 国产精品久久久久网| 又黄又刺激的午夜小视频| 色婷婷久久久久swag精品| 97少妇精品在线观看| 国产精品久久久久网| 成人高潮aa毛片免费| 亚洲av黄色在线网站| 欧洲精品第一页欧洲精品亚洲| 人妻少妇亚洲精品中文字幕| 大香蕉日本伊人中文在线| 国产欧美精品免费观看视频| 天天操天天爽天天干| 日韩美女综合中文字幕pp| 国产麻豆剧传媒精品国产av蜜桃| 一色桃子人妻一区二区三区| 欧美特色aaa大片| 在线观看国产网站资源| av视网站在线观看| 黄色在线观看免费观看在线| 中文字幕最新久久久| 日本韩国免费一区二区三区视频 | 国产欧美日韩在线观看不卡| 丝袜肉丝一区二区三区四区在线看| 日韩精品一区二区三区在线播放| 亚洲欧美激情国产综合久久久| 免费一级特黄特色大片在线观看| 国产高清女主播在线| 国产黄色大片在线免费播放| 成人久久精品一区二区三区| 免费成人va在线观看| 国产在线观看黄色视频| 天天艹天天干天天操| 极品粉嫩小泬白浆20p主播| 92福利视频午夜1000看 | 国产日韩欧美美利坚蜜臀懂色| 热思思国产99re| 521精品视频在线观看| 18禁美女无遮挡免费| 日本午夜爽爽爽爽爽视频在线观看| 黑人进入丰满少妇视频| 91麻豆精品传媒国产黄色片| 熟女视频一区,二区,三区| 在线免费观看欧美小视频| 成年午夜免费无码区| okirakuhuhu在线观看| 成年人午夜黄片视频资源| 国产麻豆国语对白露脸剧情| 男女第一次视频在线观看| 综合精品久久久久97| 午夜毛片不卡在线看| 成人精品视频99第一页| nagger可以指黑人吗| 欧美精品 日韩国产| 日韩一区二区三区三州| 动漫精品视频在线观看| 3337p日本欧洲大胆色噜噜| aⅴ五十路av熟女中出| 2021最新热播中文字幕| 噜噜色噜噜噜久色超碰| 成人免费毛片aaaa| 夜色撩人久久7777| 2020久久躁狠狠躁夜夜躁| 国产一区二区久久久裸臀| 1区2区3区不卡视频| 国产熟妇人妻ⅹxxxx麻豆| 人妻无码中文字幕专区| 少妇人妻真实精品视频| 欧美成人综合视频一区二区| 亚洲第一黄色在线观看| 欧美成人一二三在线网| 精品一区二区三区三区88| 97色视频在线观看| 区一区二区三国产中文字幕| 黄片色呦呦视频免费看| 国产三级精品三级在线不卡| 天天干夜夜操啊啊啊| 欧美一区二区三区激情啪啪啪| 丝袜美腿视频诱惑亚洲无| 国产日韩欧美视频在线导航| 4个黑人操素人视频网站精品91| 91大神福利视频网| 视频 国产 精品 熟女 | 极品粉嫩小泬白浆20p主播| 偷拍美女一区二区三区| 国产密臀av一区二区三| 天天摸天天干天天操科普| 国产欧美精品免费观看视频| 国产日韩精品一二三区久久久 | 四川乱子伦视频国产vip| 91麻豆精品秘密入口在线观看| 国产九色91在线视频| 可以免费看的www视频你懂的| 欧美专区日韩专区国产专区| 人妻无码色噜噜狠狠狠狠色| 2021久久免费视频| 熟女在线视频一区二区三区| 污污小视频91在线观看| 久久热这里这里只有精品| 狠狠躁夜夜躁人人爽天天久天啪| 国产揄拍高清国内精品对白| 欧美性受xx黑人性猛交| 亚洲人妻视频在线网| 玩弄人妻熟妇性色av少妇| 国产第一美女一区二区三区四区 | 2022国产综合在线干| 激情五月婷婷免费视频| 亚洲最大黄了色网站| 99久久久无码国产精品性出奶水| 国产精品日韩欧美一区二区| 精品一区二区三区三区88| 日本韩国免费福利精品| 全国亚洲男人的天堂| 风流唐伯虎电视剧在线观看| 久久精品亚洲成在人线a| 中文字幕最新久久久| 青青草原色片网站在线观看| 中文字幕av熟女人妻| 日韩近亲视频在线观看| 视频一区 视频二区 视频| 国产在线一区二区三区麻酥酥| 色偷偷伊人大杳蕉综合网| 中文字幕第一页国产在线| 亚洲中文字幕国产日韩| 9久在线视频只有精品| 老师啊太大了啊啊啊尻视频| 亚欧在线视频你懂的| 91国偷自产一区二区三区精品| 国产在线观看免费人成短视频| 午夜福利人人妻人人澡人人爽| 欧美日韩在线精品一区二区三| 早川濑里奈av黑人番号| 国产精品自拍偷拍a| 久久美欧人妻少妇一区二区三区| 91小伙伴中女熟女高潮| 欧洲黄页网免费观看| 国产一区二区久久久裸臀| 亚洲高清视频在线不卡| 天天摸天天亲天天舔天天操天天爽| 97人妻色免费视频| 偷青青国产精品青青在线观看 | av中文字幕电影在线看| 黄色成年网站午夜在线观看| 亚洲成人熟妇一区二区三区| 大香蕉大香蕉大香蕉大香蕉大香蕉| 精品亚洲中文字幕av| 337p日本大胆欧美人| 青青草原色片网站在线观看 | 国产精品自拍在线视频| 特大黑人巨大xxxx| 免费在线福利小视频| 一区二区三区久久中文字幕| 欧美精品激情在线最新观看视频| 成人资源在线观看免费官网| 亚洲精品无码久久久久不卡| 黄色片黄色片wyaa| av森泽佳奈在线观看| 人妻丝袜诱惑我操她视频| 中文字幕在线免费第一页| 2025年人妻中文字幕乱码在线| 国产老熟女伦老熟妇ⅹ| 久久久久久久精品老熟妇| 77久久久久国产精产品| 女生自摸在线观看一区二区三区| 99精品国产自在现线观看| 亚洲一区二区人妻av| 91精品国产综合久久久蜜| 人妻自拍视频中国大陆| 欧美另类重口味极品在线观看| 日韩欧美国产一区ab| 国产熟妇人妻ⅹxxxx麻豆| gav成人免费播放| 免费岛国喷水视频在线观看| 在线免费视频 自拍| 偷拍美女一区二区三区| 亚洲免费av在线视频| 久久久麻豆精亚洲av麻花| 国产老熟女伦老熟妇ⅹ| 中文字幕av熟女人妻| 久久香蕉国产免费天天| 亚洲免费福利一区二区三区| 超碰公开大香蕉97| 国产1区,2区,3区| 干逼又爽又黄又免费的视频| 国产欧美精品不卡在线| 91九色porny国产蝌蚪视频| 青青青激情在线观看视频| 亚洲少妇高潮免费观看| 亚洲无码一区在线影院| yy96视频在线观看| 天天干天天日天天谢综合156| 激情五月婷婷综合色啪| 中文字幕国产专区欧美激情| 黄色片年轻人在线观看| 又色又爽又黄又刺激av网站| 久久艹在线观看视频| 国产精品中文av在线播放| 国产午夜亚洲精品不卡在线观看| 亚洲第一伊人天堂网| 国语对白xxxx乱大交| 精品欧美一区二区vr在线观看 | 久草免费人妻视频在线| 久久久久只精品国产三级| 在线免费观看日本伦理| 91‖亚洲‖国产熟女| 在线成人日韩av电影| 97人妻人人澡爽人人精品| 天天摸天天日天天操| 75国产综合在线视频| 精品亚洲在线免费观看| 在线网站你懂得老司机| 大鸡巴操娇小玲珑的女孩逼| 天天操天天插天天色| 亚洲免费在线视频网站| 馒头大胆亚洲一区二区| 欧美激情精品在线观看| 人人在线视频一区二区| 中文字幕+中文字幕| 欧美乱妇无乱码一区二区| 动漫美女的小穴视频| 日本人妻精品久久久久久| 日韩视频一区二区免费观看| 亚洲av成人免费网站| 国产一区二区视频观看| 日本韩国免费一区二区三区视频| 亚洲 色图 偷拍 欧美| 99热久久这里只有精品8| 男女第一次视频在线观看| 国产露脸对白在线观看| 国产亚洲四十路五十路| 国产丰满熟女成人视频| 天天射夜夜操综合网| 99热久久极品热亚洲| 超碰97人人澡人人| 久久一区二区三区人妻欧美| 欧美精品一二三视频| 亚洲 图片 欧美 图片| 一级a看免费观看网站| 国际av大片在线免费观看| 久久热久久视频在线观看| 天天干天天操天天扣| 亚洲高清国产自产av| 2020av天堂网在线观看| 亚洲自拍偷拍综合色| 亚洲国产免费av一区二区三区 | 五十路av熟女松本翔子| 日韩欧美制服诱惑一区在线| 夫妻在线观看视频91| 2018最新中文字幕在线观看| 抽查舔水白紧大视频| www天堂在线久久| 欧美日本在线观看一区二区| 亚洲欧美精品综合图片小说| 美女视频福利免费看| 亚洲人妻国产精品综合| 99re6热在线精品| 92福利视频午夜1000看 | 沈阳熟妇28厘米大战黑人| 久久精品国产23696| 女同性ⅹxx女同hd| 五十路人妻熟女av一区二区| 国产亚洲精品视频合集| 日本午夜福利免费视频| 人妻素人精油按摩中出| 亚洲精品午夜久久久久| 少妇人妻真实精品视频| 中文字幕视频一区二区在线观看| 成人激情文学网人妻| 91国产在线免费播放| 日本性感美女视频网站| eeuss鲁片一区二区三区| 91试看福利一分钟| 韩国一级特黄大片做受| 超碰97人人做人人爱| 97国产在线观看高清| 日韩欧美国产精品91| 欧美精品亚洲精品日韩在线| 日本脱亚入欧是指什么| 日韩av有码中文字幕| 青青青青操在线观看免费| 日韩熟女系列一区二区三区| 超级av免费观看一区二区三区| 97超碰人人搞人人| 99av国产精品欲麻豆| 自拍偷拍vs一区二区三区| av老司机亚洲一区二区| 国产中文精品在线观看| 特一级特级黄色网片| 93视频一区二区三区| 国产麻豆91在线视频| 日本欧美视频在线观看三区| 欧美一区二区中文字幕电影| 一区二区久久成人网| 性欧美激情久久久久久久| 国产 在线 免费 精品| 在线 中文字幕 一区| 午夜的视频在线观看| 日视频免费在线观看| 免费黄色成人午夜在线网站| 亚洲综合在线视频可播放| 插小穴高清无码中文字幕| 又粗又长 明星操逼小视频| 91九色porny蝌蚪国产成人| 国产精品一区二区三区蜜臀av| 黄色片年轻人在线观看| 又大又湿又爽又紧A视频| 综合页自拍视频在线播放| 日本脱亚入欧是指什么| 中文字幕在线永久免费播放| 九一传媒制片厂视频在线免费观看| 亚洲欧美一区二区三区电影| 美女福利写真在线观看视频| 人人爱人人妻人人澡39| 天天综合天天综合天天网| 人人爽亚洲av人人爽av| 视频一区二区三区高清在线| lutube在线成人免费看| av中文字幕网址在线| 社区自拍揄拍尻屁你懂的| 在线观看的黄色免费网站| 99精品视频在线观看婷婷| 一区二区三区蜜臀在线| 韩国男女黄色在线观看| 国产麻豆剧传媒精品国产av蜜桃| yy6080国产在线视频| 3337p日本欧洲大胆色噜噜| 黑人巨大精品欧美视频| 亚洲国产精品中文字幕网站| 国产亚洲国产av网站在线| 国产精品久久9999| 成人午夜电影在线观看 久久| 男生用鸡操女生视频动漫| 亚洲av无码成人精品区辽| 亚洲成人av在线一区二区| 一区二区三区国产精选在线播放| 77久久久久国产精产品| 中文字幕日本人妻中出| 精品一线二线三线日本| 亚洲综合一区二区精品久久| 精品一区二区三区午夜| 动漫av网站18禁| 美女小视频网站在线| 欧美日韩亚洲国产无线码| 日本一二三区不卡无| 色综合久久无码中文字幕波多| 黄色视频成年人免费观看| 亚洲国产成人在线一区| 青青青青视频在线播放| 98精产国品一二三产区区别| 欧美偷拍自拍色图片| 中文字幕,亚洲人妻| 日韩av大胆在线观看| 黄色视频在线观看高清无码| 中文字幕之无码色多多| www骚国产精品视频| 天天日天天添天天爽| 在线不卡成人黄色精品| 三级黄色亚洲成人av| 男人插女人视频网站| 亚洲国产美女一区二区三区软件| 亚洲熟女女同志女同| 91中文字幕免费在线观看| 日韩中文字幕在线播放第二页| 在线可以看的视频你懂的| 硬鸡巴动态操女人逼视频| 熟女在线视频一区二区三区| 性感美女诱惑福利视频| 国产精品国色综合久久| 欧美特色aaa大片| 人妻自拍视频中国大陆| 老鸭窝日韩精品视频观看| 日比视频老公慢点好舒服啊| 亚洲成av人无码不卡影片一| 天天色天天舔天天射天天爽| 久久免看30视频口爆视频| 91快播视频在线观看| 92福利视频午夜1000看| 在线免费观看黄页视频| 亚洲av自拍天堂网| 国产亚州色婷婷久久99精品| 午夜在线一区二区免费| 亚洲第一伊人天堂网| 晚上一个人看操B片| 久久一区二区三区人妻欧美| 国产又粗又猛又爽又黄的视频美国| 天天干天天操天天爽天天摸| 人妻素人精油按摩中出| 国产免费高清视频视频| 高清成人av一区三区| 天堂va蜜桃一区入口| 国产又粗又黄又硬又爽| 欧美精产国品一二三产品价格| 亚洲国产成人最新资源| 午夜在线观看岛国av,com| 日本女大学生的黄色小视频| 欧美久久一区二区伊人| 扒开让我视频在线观看| 中文字幕av熟女人妻| 欧美日韩高清午夜蜜桃大香蕉| 99久久久无码国产精品性出奶水 | 免费啪啪啪在线观看视频| 中文字幕在线永久免费播放| 午夜频道成人在线91| 亚洲 色图 偷拍 欧美| 大鸡八强奸视频在线观看| 精品人妻伦一二三区久| 色综合色综合色综合色| 亚洲一区二区三区精品视频在线 | 在线可以看的视频你懂的| 国产伊人免费在线播放| 亚洲人妻30pwc| 男生舔女生逼逼视频| 国产精品久久久久久久精品视频| 日韩av有码一区二区三区4| 欧洲欧美日韩国产在线| avjpm亚洲伊人久久| 99久久中文字幕一本人| 国产精品国产三级国产精东| 国产日韩av一区二区在线| 夜色17s精品人妻熟女| av在线免费观看亚洲天堂| 日韩美女福利视频网| 中国熟女@视频91| 91‖亚洲‖国产熟女| 鸡巴操逼一级黄色气| 99热99这里精品6国产| 久久一区二区三区人妻欧美| 亚洲熟色妇av日韩熟色妇在线| 男生用鸡操女生视频动漫| 无码日韩人妻精品久久| 欧美精品久久久久久影院| 98精产国品一二三产区区别| 超pen在线观看视频公开97| 中文字幕人妻熟女在线电影| 1区2区3区不卡视频| 久草极品美女视频在线观看| 国产又粗又猛又爽又黄的视频美国 | 久久久久久久一区二区三| 99热久久这里只有精品8| 欧美男同性恋69视频| 亚洲欧美清纯唯美另类| 人妻无码中文字幕专区| 少妇被强干到高潮视频在线观看| 国产一区二区久久久裸臀| 欧洲精品第一页欧洲精品亚洲| 天堂av狠狠操蜜桃| 国产精品系列在线观看一区二区| 中文字幕最新久久久| 97精品综合久久在线| 亚洲国产成人在线一区| 大陆精品一区二区三区久久| 欧美偷拍自拍色图片| 美味人妻2在线播放| 天天操,天天干,天天射| 男人和女人激情视频| 人妻少妇中文有码精品| 丝袜国产专区在线观看| 一区二区三区日韩久久| 四虎永久在线精品免费区二区| 揄拍成人国产精品免费看视频| 欧美成人综合色在线噜噜| av网站色偷偷婷婷网男人的天堂| 搡老妇人老女人老熟女| 亚洲少妇高潮免费观看| 国产亚洲成人免费在线观看| 超鹏97历史在线观看| av一区二区三区人妻| 人妻久久久精品69系列| 欧美专区第八页一区在线播放| 馒头大胆亚洲一区二区| 一个色综合男人天堂| 欧美另类一区二区视频| 天天摸天天亲天天舔天天操天天爽| 青春草视频在线免费播放| 欧美精产国品一二三区| 久精品人妻一区二区三区| 国产乱子伦精品视频潮优女| 日本裸体熟妇区二区欧美| 国产精品系列在线观看一区二区| 中文字幕免费福利视频6| 88成人免费av网站| japanese日本熟妇另类| 伊人综合免费在线视频| 国产黄色高清资源在线免费观看| 天天想要天天操天天干| 动漫黑丝美女的鸡巴| 亚洲成人熟妇一区二区三区| 亚洲福利天堂久久久久久| 青青热久免费精品视频在线观看| 日本三极片中文字幕| 啪啪啪操人视频在线播放| 国产精品3p和黑人大战| 美女福利视频网址导航| 2025年人妻中文字幕乱码在线| 久久久久久9999久久久久| 沈阳熟妇28厘米大战黑人| 2025年人妻中文字幕乱码在线| 男人的天堂av日韩亚洲| 成人免费毛片aaaa| 在线国产精品一区二区三区| 午夜精品一区二区三区4| 日本高清成人一区二区三区| 大屁股肉感人妻中文字幕在线| 日韩视频一区二区免费观看| aⅴ精产国品一二三产品| 蜜臀成人av在线播放| 一区二区三区精品日本| 色狠狠av线不卡香蕉一区二区| 欧美一区二区中文字幕电影| 五月激情婷婷久久综合网| 天天日天天干天天干天天日| 99视频精品全部15| 狠狠躁夜夜躁人人爽天天久天啪| 国产精品一区二区久久久av| 天天操天天射天天操天天天 | 午夜精品亚洲精品五月色| 亚洲2021av天堂| 在线制服丝袜中文字幕| 亚洲天堂精品福利成人av| 亚洲成人国产综合一区| 我想看操逼黄色大片| 天天躁日日躁狠狠躁躁欧美av| 2021天天色天天干| 欧美成一区二区三区四区| 男人的天堂在线黄色| 57pao国产一区二区| 精品欧美一区二区vr在线观看| 亚洲欧美人精品高清| 免费观看国产综合视频| 中国黄片视频一区91| 9l人妻人人爽人人爽| 日韩欧美国产精品91| av高潮迭起在线观看| 亚洲精品ww久久久久久| 免费无码人妻日韩精品一区二区| 精品久久久久久久久久久a√国产| 亚洲av第国产精品| 国产大鸡巴大鸡巴操小骚逼小骚逼| 青青青青青手机视频| 午夜精品久久久久久99热| 免费观看理论片完整版| 2021年国产精品自拍| 91国产在线免费播放| 欧美亚洲偷拍自拍色图| 色av色婷婷人妻久久久精品高清| 国产日本精品久久久久久久| 中文字幕之无码色多多| 大陆精品一区二区三区久久| 精品av久久久久久久| 大香蕉大香蕉在线有码 av| 日本熟女50视频免费| 天天摸天天亲天天舔天天操天天爽| 91色九色porny| 人妻av无码专区久久绿巨人| 中文字幕成人日韩欧美| 国产日本欧美亚洲精品视| 人人人妻人人澡人人| 国产又色又刺激在线视频| 国产一区二区视频观看| 偷偷玩弄新婚人妻h视频| 亚洲综合乱码一区二区| 日韩近亲视频在线观看| 98视频精品在线观看| 91国产资源在线视频| 日韩北条麻妃一区在线| 青青青青视频在线播放| 国产性感美女福利视频| 美女张开腿让男生操在线看| 国产白袜脚足J棉袜在线观看| 亚洲丝袜老师诱惑在线观看| 40道精品招牌菜特色| 蜜臀av久久久久蜜臀av麻豆| 18禁无翼鸟成人在线| 亚洲福利精品福利精品福利| 人妻熟女在线一区二区| 中文字幕av一区在线观看| 天天艹天天干天天操| 久草福利电影在线观看| 偷拍3456eee| 大香蕉日本伊人中文在线| 女生自摸在线观看一区二区三区| 日本av在线一区二区三区| 伊人日日日草夜夜草| 欧亚乱色一区二区三区| 韩国女主播精品视频网站| 欧美日韩情色在线观看| 人妻少妇精品久久久久久| 亚洲精品无码久久久久不卡| 日本熟妇色熟妇在线观看| 97青青青手机在线视频| 国产精品亚洲在线观看| 欧美精品久久久久久影院| 国产女人被做到高潮免费视频 | 日本一二三区不卡无| 成人sm视频在线观看| 日本三极片视频网站观看| 欧美日韩高清午夜蜜桃大香蕉| 2018在线福利视频| 天天射夜夜操狠狠干| 一区二区三区四区五区性感视频 | 国产精品一区二区久久久av| 亚洲精品国偷自产在线观看蜜桃| 亚洲一区久久免费视频| 美女吃鸡巴操逼高潮视频| 久久精品在线观看一区二区| 99婷婷在线观看视频| 免费男阳茎伸入女阳道视频| 欧美一区二区三区乱码在线播放| 国产在线免费观看成人| 久草视频在线免播放| 淫秽激情视频免费观看| 国语对白xxxx乱大交| 日韩三级黄色片网站| 精品成人啪啪18免费蜜臀| 青娱乐蜜桃臀av色| 99精品视频在线观看免费播放| 91麻豆精品久久久久| 欧美aa一级一区三区四区| 大鸡巴操娇小玲珑的女孩逼| 国产精品黄大片在线播放| 一区二区三区美女毛片| 偷偷玩弄新婚人妻h视频| 在线免费观看av日韩| 可以免费看的www视频你懂的| 天堂va蜜桃一区入口| 天天摸天天干天天操科普| 51国产偷自视频在线播放| 熟女人妻一区二区精品视频| 青青伊人一精品视频| 精品区一区二区三区四区人妻| 国产一区自拍黄视频免费观看| 精内国产乱码久久久久久| 午夜91一区二区三区| 日本啪啪啪啪啪啪啪| 粉嫩欧美美人妻小视频| 91精品国产91久久自产久强| rct470中文字幕在线| 国产清纯美女al在线| 红杏久久av人妻一区| 一区二区熟女人妻视频| 亚洲黄色av网站免费播放| 91在线视频在线精品3| 免费无码人妻日韩精品一区二区| 一本久久精品一区二区| 社区自拍揄拍尻屁你懂的| 扒开让我视频在线观看| 精品成人午夜免费看| 国产精品大陆在线2019不卡 | www骚国产精品视频| 国产片免费观看在线观看| 桃色视频在线观看一区二区| 少妇人妻100系列| 国产露脸对白在线观看| 亚洲精品一区二区三区老狼| 国产亚洲视频在线二区| 日本韩国亚洲综合日韩欧美国产| 91she九色精品国产| 免费大片在线观看视频网站| 精品人妻每日一部精品| 午夜国产福利在线观看| 国产亚州色婷婷久久99精品| 欧美一区二区三区乱码在线播放| 99热这里只有国产精品6| 日本一区美女福利视频| 日本啪啪啪啪啪啪啪| 女人精品内射国产99| 在线观看黄色成年人网站| 精品一线二线三线日本| 懂色av之国产精品| 美女福利视频网址导航| 免费大片在线观看视频网站| 国产极品精品免费视频 | 国产白袜脚足J棉袜在线观看| 日韩三级黄色片网站| 最新91九色国产在线观看| 少妇一区二区三区久久久| 丰满少妇人妻xxxxx| 少妇人妻100系列| 91‖亚洲‖国产熟女| 丝袜肉丝一区二区三区四区在线| 免费看国产又粗又猛又爽又黄视频| 99精品视频在线观看免费播放| 真实国模和老外性视频| 黄色男人的天堂视频| 精品av国产一区二区三区四区 | 日本熟女精品一区二区三区| 蜜桃精品久久久一区二区| 人妻丝袜榨强中文字幕| 激情啪啪啪啪一区二区三区| 久久永久免费精品人妻专区| 亚洲欧美激情国产综合久久久| 偷青青国产精品青青在线观看| 日本av熟女在线视频| 国产a级毛久久久久精品| 国产精品视频一区在线播放| 日韩精品一区二区三区在线播放| 在线新三级黄伊人网| 亚洲美女美妇久久字幕组| 男生用鸡操女生视频动漫 | 久久精品久久精品亚洲人| 少妇高潮无套内谢麻豆| 欧美黑人巨大性xxxxx猛交| 熟女国产一区亚洲中文字幕| 亚洲美女自偷自拍11页| 78色精品一区二区三区| 成人30分钟免费视频| 亚洲专区激情在线观看视频| www日韩毛片av| 99的爱精品免费视频| 无码日韩人妻精品久久| 91九色porny蝌蚪国产成人| 超鹏97历史在线观看| 成人国产激情自拍三区| 少妇ww搡性bbb91| 亚洲另类在线免费观看| 中文字幕高清免费在线人妻| 99国产精品窥熟女精品| 国产综合精品久久久久蜜臀| 美女操逼免费短视频下载链接 | 亚洲另类在线免费观看| 日本乱人一区二区三区| 女警官打开双腿沦为性奴| 97黄网站在线观看| 黄色中文字幕在线播放| 欧美韩国日本国产亚洲| 日韩精品中文字幕福利| 性色蜜臀av一区二区三区| 日韩午夜福利精品试看| 日韩精品啪啪视频一道免费| 国产视频网站国产视频| 日本福利午夜电影在线观看| 亚洲视频在线视频看视频在线| 美女av色播在线播放| 国产卡一卡二卡三乱码手机| 99久久99久国产黄毛片| 韩国AV无码不卡在线播放| 久久久久久久99精品| 亚洲在线观看中文字幕av| 精品91高清在线观看| 美女福利视频网址导航| 国产真实乱子伦a视频| 一区二区三区四区视频在线播放| 天天摸天天日天天操| 在线免费观看视频一二区| 超碰97免费人妻麻豆| 最新黄色av网站在线观看| 91福利在线视频免费观看| 国产性色生活片毛片春晓精品| 国产亚洲欧美45p| 亚洲国产欧美一区二区三区久久| 国产精品日韩欧美一区二区| 97精品综合久久在线| 久久永久免费精品人妻专区 | av俺也去在线播放| 日本男女操逼视频免费看| 亚洲av成人免费网站| 欧美一区二区中文字幕电影| 天天干天天日天天谢综合156| 欧美精品亚洲精品日韩在线| 19一区二区三区在线播放| 中文字幕,亚洲人妻| 噜噜色噜噜噜久色超碰| 国产成人精品一区在线观看| 狠狠操操操操操操操操操| 男人天堂最新地址av| 亚洲国产精品中文字幕网站| 国产美女精品福利在线| 中文字母永久播放1区2区3区| 欧美性受xx黑人性猛交| 黄色片黄色片wyaa| 天码人妻一区二区三区在线看| 天堂女人av一区二区| 伊人综合免费在线视频| 日韩三级电影华丽的外出| 粉嫩av蜜乳av蜜臀| 不戴胸罩引我诱的隔壁的人妻| 亚洲欧美一区二区三区电影| 99久久成人日韩欧美精品| 大香蕉玖玖一区2区| 日本高清成人一区二区三区| 黄色视频在线观看高清无码| 欧美专区日韩专区国产专区| 成年人免费看在线视频| 一区二区三区精品日本| 女同性ⅹxx女同h偷拍| 77久久久久国产精产品| 亚洲成人av在线一区二区| 91国内精品久久久久精品一| 阿v天堂2014 一区亚洲| 久久精品视频一区二区三区四区| 日韩欧美中文国产在线| 久久久精品999精品日本| 999九九久久久精品| 亚洲天堂成人在线观看视频网站 | 黄色成人在线中文字幕| 亚洲推理片免费看网站| 国产片免费观看在线观看| 日本一道二三区视频久久| 视频一区二区综合精品| 国产精品人妻一区二区三区网站| 在线视频国产欧美日韩| 久久久久91精品推荐99| 国产白袜脚足J棉袜在线观看| 93精品视频在线观看| 另类av十亚洲av| 久久精品久久精品亚洲人| 国产高清精品一区二区三区| 老司机欧美视频在线看| 十八禁在线观看地址免费| 啊啊好慢点插舔我逼啊啊啊视频 | 久久艹在线观看视频| 成人高清在线观看视频| 天天插天天狠天天操| 欧美精品欧美极品欧美视频| 国产黄色a级三级三级三级| 福利视频广场一区二区| 成人av天堂丝袜在线观看| 中文字幕一区二区亚洲一区| 国产黄色a级三级三级三级 | 蜜桃专区一区二区在线观看| 99久久激情婷婷综合五月天| 综合精品久久久久97| av日韩在线免费播放| 亚洲免费成人a v| 午夜极品美女福利视频| 无码国产精品一区二区高潮久久4| 日本午夜爽爽爽爽爽视频在线观看| 午夜精品福利一区二区三区p| 亚洲成人av一区在线| 亚洲2021av天堂| 日本高清在线不卡一区二区| 精品一区二区三区欧美| 成人av中文字幕一区| 日本一道二三区视频久久| 美女操逼免费短视频下载链接| 超碰97人人澡人人| 黄色录像鸡巴插进去| 黄页网视频在线免费观看| 日韩熟女系列一区二区三区| 啊慢点鸡巴太大了啊舒服视频| 97精品综合久久在线| 大香蕉伊人国产在线| 热99re69精品8在线播放| 天堂v男人视频在线观看| 亚洲欧洲一区二区在线观看| 国产1区,2区,3区| 国产一区二区三免费视频| 做爰视频毛片下载蜜桃视频1| 日本福利午夜电影在线观看| 手机看片福利盒子日韩在线播放| 欧美日韩在线精品一区二区三| 色狠狠av线不卡香蕉一区二区| 亚洲一区二区三区久久午夜| 人人妻人人爽人人添夜| 国产精品午夜国产小视频| 搡老熟女一区二区在线观看| 天天日天天干天天要| 国产妇女自拍区在线观看| 日韩成人免费电影二区| 欧美 亚洲 另类综合| 早川濑里奈av黑人番号| 大鸡巴操娇小玲珑的女孩逼| 极品粉嫩小泬白浆20p主播| 少妇系列一区二区三区视频| 亚洲国产精品免费在线观看| 亚洲午夜高清在线观看| 五十路av熟女松本翔子| 欧美视频一区免费在线| 精品suv一区二区69| 日韩激情文学在线视频| 国产精品视频男人的天堂| 欧美精品伦理三区四区| 99亚洲美女一区二区三区| 91久久精品色伊人6882| 免费福利av在线一区二区三区| 少妇露脸深喉口爆吞精| 国产卡一卡二卡三乱码手机| 日韩激情文学在线视频| 75国产综合在线视频| 香港一级特黄大片在线播放| 在线免费观看日本片| 51国产成人精品视频| 亚洲 人妻 激情 中文| a v欧美一区=区三区| 国产精品国产三级国产午| 国产精品人妻熟女毛片av久| 岛国青草视频在线观看| 成熟熟女国产精品一区| 天天干天天操天天爽天天摸| 日韩特级黄片高清在线看| 色伦色伦777国产精品| 亚洲1069综合男同| 欧美精品伦理三区四区| 久久久久91精品推荐99| 人人人妻人人澡人人| 亚洲最大免费在线观看| 91极品大一女神正在播放| 视频一区二区综合精品| 国产精品福利小视频a| 青青青青青青草国产| 精品人妻一二三区久久| 综合激情网激情五月天| 天天射夜夜操综合网| 黄色中文字幕在线播放| 国产露脸对白在线观看| 欧美男人大鸡吧插女人视频| 国产91精品拍在线观看| 国产精品精品精品999| 91福利视频免费在线观看| 黄色录像鸡巴插进去| 中文亚洲欧美日韩无线码| 欧美中文字幕一区最新网址| 黄色成年网站午夜在线观看| 天堂av在线官网中文| 在线免费观看国产精品黄色| 亚国产成人精品久久久| 2019av在线视频| 久草电影免费在线观看| 日本性感美女写真视频| 天天干天天操天天玩天天射| 欧美视频一区免费在线| 国产卡一卡二卡三乱码手机| 2021久久免费视频| 亚洲成av人无码不卡影片一| 亚洲综合在线观看免费| 中文字幕免费在线免费| 97精品视频在线观看| 久久久久久久久久久免费女人| 亚洲成人线上免费视频观看| 白嫩白嫩美女极品国产在线观看| 欧美精品资源在线观看| 日韩美女搞黄视频免费| 国产午夜福利av导航| 99热碰碰热精品a中文| 日韩加勒比东京热二区| 一区二区三区久久久91| 超碰97人人做人人爱| 日韩二区视频一线天婷婷五| 日本黄色三级高清视频| 性欧美日本大妈母与子| 天天日天天日天天擦| 亚洲国产美女一区二区三区软件| 亚洲丝袜老师诱惑在线观看| 97国产精品97久久| 精品高潮呻吟久久av| 东京干手机福利视频| 日本人妻少妇18—xx| 欧美激情精品在线观看| 成年人该看的视频黄免费| 午夜的视频在线观看| 青青青青青操视频在线观看| 天堂av狠狠操蜜桃| 亚洲欧美另类手机在线| 人妻少妇亚洲精品中文字幕| 激情人妻校园春色亚洲欧美 | 天天干天天插天天谢| 热久久只有这里有精品| 青青青青青操视频在线观看| 福利视频广场一区二区| 日本一二三区不卡无| 亚洲av一妻不如妾| 91中文字幕最新合集| 国产三级精品三级在线不卡| 国产午夜男女爽爽爽爽爽视频| 国产精品一区二区av国| 日韩av免费观看一区| 国产91嫩草久久成人在线视频| 白白操白白色在线免费视频| 婷婷综合亚洲爱久久| 日本18禁久久久久久| 中文字幕av熟女人妻| 综合精品久久久久97| 免费av岛国天堂网站| 亚洲 欧美 精品 激情 偷拍| 91试看福利一分钟| 直接能看的国产av| 在线观看欧美黄片一区二区三区| 久久久久久cao我的性感人妻 | 色哟哟国产精品入口| 欧美精品亚洲精品日韩在线| 大胆亚洲av日韩av| 日本精品一区二区三区在线视频。| 亚洲另类在线免费观看| 天天日天天干天天舔天天射| 2018最新中文字幕在线观看| 福利一二三在线视频观看| 97欧洲一区二区精品免费| 亚洲人成精品久久久久久久| 又粗又硬又猛又爽又黄的| 亚洲综合在线视频可播放| 91免费观看国产免费| 中文字幕日韩精品日本| 国产精品国产三级麻豆| 91老熟女连续高潮对白| 91九色国产熟女一区二区| 日本韩国亚洲综合日韩欧美国产| 日本在线不卡免费视频| 亚洲 中文 自拍 无码| 国产一线二线三线的区别在哪| 亚洲欧美国产麻豆综合| 清纯美女在线观看国产| 97小视频人妻一区二区| 91欧美在线免费观看| 91大屁股国产一区二区| 亚洲一区二区三区五区| 97a片免费在线观看| 漂亮 人妻被中出中文| 啊用力插好舒服视频| 日韩人妻在线视频免费| 韩国三级aaaaa高清视频| 日韩在线视频观看有码在线| 国产又粗又黄又硬又爽| 天天操夜夜操天天操天天操 | 福利午夜视频在线观看| 欧美黑人与人妻精品| 精品亚洲中文字幕av| 日本午夜爽爽爽爽爽视频在线观看 | 91国产在线免费播放| 99精品国产自在现线观看| 亚洲公开视频在线观看| 沈阳熟妇28厘米大战黑人| 19一区二区三区在线播放| 午夜91一区二区三区| 9国产精品久久久久老师| 日韩av熟妇在线观看| 中文字幕中文字幕 亚洲国产| 中文字幕中文字幕 亚洲国产| 中文 成人 在线 视频| 高清一区二区欧美系列| 中文字幕一区二 区二三区四区 | 天天日天天做天天日天天做| 亚洲精品乱码久久久本| 国产精品人久久久久久| 日本熟女精品一区二区三区| 欧美一区二区三区高清不卡tv| caoporn蜜桃视频|