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

Spring 冷知識:一個提前 AOP 的機(jī)會

開發(fā) 前端
當(dāng) Spring 容器創(chuàng)建一個 Bean 的時候,就會提前被 BeanPostProcessor 攔截,然后給出一個 TargetSource,進(jìn)而據(jù)此創(chuàng)建代理對象,這樣就不需要后續(xù)常規(guī)的 Bean 創(chuàng)建流程了。

今天再來聊一個 Spring 中的冷門知識:Bean 的處理不走正常流程,而是提前進(jìn)行 AOP。

1. Bean 創(chuàng)建流程

在 Bean 創(chuàng)建的過程中,會先給 BeanPostProcessor 一個返回代理對象的機(jī)會:

@Override
protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args)
  throws BeanCreationException {
 //省略。。。
 try {
  // Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
  Object bean = resolveBeforeInstantiation(beanName, mbdToUse);
  if (bean != null) {
   return bean;
  }
 }
 catch (Throwable ex) {
  throw new BeanCreationException(mbdToUse.getResourceDescription(), beanName,
    "BeanPostProcessor before instantiation of bean failed", ex);
 }
 try {
  Object beanInstance = doCreateBean(beanName, mbdToUse, args);
  if (logger.isTraceEnabled()) {
   logger.trace("Finished creating instance of bean '" + beanName + "'");
  }
  return beanInstance;
 }
    //省略。。。
}

小伙伴們看,這里的 resolveBeforeInstantiation 方法就是給 BeanPostProcessor 一個返回代理對象的機(jī)會,在這個方法中,最終就會觸發(fā)到 InstantiationAwareBeanPostProcessor#postProcessBeforeInstantiation 方法,而在 postProcessBeforeInstantiation 方法中,會先判斷當(dāng)前 bean 是否是 AOP 相關(guān)類等:

@Override
public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) {
 Object cacheKey = getCacheKey(beanClass, beanName);
 if (!StringUtils.hasLength(beanName) || !this.targetSourcedBeans.contains(beanName)) {
  if (this.advisedBeans.containsKey(cacheKey)) {
   return null;
  }
  if (isInfrastructureClass(beanClass) || shouldSkip(beanClass, beanName)) {
   this.advisedBeans.put(cacheKey, Boolean.FALSE);
   return null;
  }
 }
 
 TargetSource targetSource = getCustomTargetSource(beanClass, beanName);
 if (targetSource != null) {
  if (StringUtils.hasLength(beanName)) {
   this.targetSourcedBeans.add(beanName);
  }
  Object[] specificInterceptors = getAdvicesAndAdvisorsForBean(beanClass, beanName, targetSource);
  Object proxy = createProxy(beanClass, beanName, specificInterceptors, targetSource);
  this.proxyTypes.put(cacheKey, proxy.getClass());
  return proxy;
 }
 return null;
}

這里主要來說說 getCustomTargetSource 中的邏輯。

先來說什么情況下會走到 getCustomTargetSource 方法:當(dāng)前 Bean 不是代理對象,也不是 AOP 相關(guān)的類,就是一個普普通通的常規(guī)類,那么就會走到 getCustomTargetSource 方法這里來,這里失去查找到一個 TargetSource 對象,然后根據(jù)該對象創(chuàng)建當(dāng)前 bean 的代理對象并返回,如果返回了代理對象,那么后續(xù)的 bean 創(chuàng)建流程就不執(zhí)行了。

我們來看下這個方法的源碼:

@Nullable
protected TargetSource getCustomTargetSource(Class<?> beanClass, String beanName) {
 // We can't create fancy target sources for directly registered singletons.
 if (this.customTargetSourceCreators != null &&
   this.beanFactory != null && this.beanFactory.containsBean(beanName)) {
  for (TargetSourceCreator tsc : this.customTargetSourceCreators) {
   TargetSource ts = tsc.getTargetSource(beanClass, beanName);
   if (ts != null) {
    return ts;
   }
  }
 }
 // No custom TargetSource found.
 return null;
}

可以看到,這里就是當(dāng)前類 AbstractAutoProxyCreator 中有一個 customTargetSourceCreators 變量,現(xiàn)在就是遍歷該變量,通過這個集合中保存的 TargetSourceCreator 來創(chuàng)建 TargetSource 對象。

TargetSourceCreator 是一個接口,這個接口只有一個抽象類 AbstractBeanFactoryBasedTargetSourceCreator,我們來看下 AbstractBeanFactoryBasedTargetSourceCreator 中的 getTargetSource 方法是怎么執(zhí)行的:

@Override
@Nullable
public final TargetSource getTargetSource(Class<?> beanClass, String beanName) {
 AbstractBeanFactoryBasedTargetSource targetSource =
   createBeanFactoryBasedTargetSource(beanClass, beanName);
 if (targetSource == null) {
  return null;
 }

 DefaultListableBeanFactory internalBeanFactory = getInternalBeanFactoryForBean(beanName);
 // We need to override just this bean definition, as it may reference other beans
 // and we're happy to take the parent's definition for those.
 // Always use prototype scope if demanded.
 BeanDefinition bd = getConfigurableBeanFactory().getMergedBeanDefinition(beanName);
 GenericBeanDefinition bdCopy = new GenericBeanDefinition(bd);
 if (isPrototypeBased()) {
  bdCopy.setScope(BeanDefinition.SCOPE_PROTOTYPE);
 }
 internalBeanFactory.registerBeanDefinition(beanName, bdCopy);
 // Complete configuring the PrototypeTargetSource.
 targetSource.setTargetBeanName(beanName);
 targetSource.setBeanFactory(internalBeanFactory);
 return targetSource;
}

首先,TargetSource 對象是通過 createBeanFactoryBasedTargetSource 方法來創(chuàng)建的,這個方法是一個抽象方法,將來在子類中被實(shí)現(xiàn)。

接下來會調(diào)用 getInternalBeanFactoryForBean 方法創(chuàng)建一個新的內(nèi)部容器 internalBeanFactory,本質(zhì)上這個 internalBeanFactory 其實(shí)是一個子容器,現(xiàn)有的容器將作為這個子容器的父容器。

接下來就是獲取到當(dāng)前 beanName 所對應(yīng)的 BeanDefinition,然后進(jìn)行屬性配置,并注冊到內(nèi)部容器中,最后返回 targetSource 對象。

我們來看下這里的 getInternalBeanFactoryForBean 方法:

protected DefaultListableBeanFactory getInternalBeanFactoryForBean(String beanName) {
 synchronized (this.internalBeanFactories) {
  return this.internalBeanFactories.computeIfAbsent(beanName,
    name -> buildInternalBeanFactory(getConfigurableBeanFactory()));
 }
}

protected DefaultListableBeanFactory buildInternalBeanFactory(ConfigurableBeanFactory containingFactory) {
 // Set parent so that references (up container hierarchies) are correctly resolved.
 DefaultListableBeanFactory internalBeanFactory = new DefaultListableBeanFactory(containingFactory);
 // Required so that all BeanPostProcessors, Scopes, etc become available.
 internalBeanFactory.copyConfigurationFrom(containingFactory);
 // Filter out BeanPostProcessors that are part of the AOP infrastructure,
 // since those are only meant to apply to beans defined in the original factory.
 internalBeanFactory.getBeanPostProcessors().removeIf(beanPostProcessor ->
   beanPostProcessor instanceof AopInfrastructureBean);
 return internalBeanFactory;
}

這個其實(shí)就是正常的容器創(chuàng)建,倒也沒啥好說的,但是有幾個需要注意的點(diǎn):

  1. 在調(diào)用 buildInternalBeanFactory 方法構(gòu)建容器的時候,會先調(diào)用 getConfigurableBeanFactory 方法獲取到當(dāng)前容器作為父容器,如果當(dāng)前容器不存在,那么就會拋出異常。這就意味著,當(dāng)我們自己提供 TargetSourceCreator 實(shí)例的時候,一定要指定一個容器。
  2. 在創(chuàng)建了內(nèi)部容器之后,會從內(nèi)部容器中移除所有 AopInfrastructureBean 類型的 BeanPostProcessor,也就是內(nèi)部容器將來創(chuàng)建出來的 bean,不再走 AopInfrastructureBean 類型后置處理器,因?yàn)檫@種類型的后置處理器主要是用來處理 AOP 的,現(xiàn)在,AOP 代理當(dāng)場就生成了,就不再需要這些后置處理器了。

好了,這就是大致的 AOP 提前生成原理,接下來松哥寫一個案例我們一起來看下。

2. 實(shí)踐

首先,我們先來自定義一個 TargetSource:

public class UserServiceTargetSource extends AbstractBeanFactoryBasedTargetSource {
    @Override
    public Object getTarget() throws Exception {
        return getBeanFactory().getBean(getTargetBeanName());
    }

    @Override
    public boolean isStatic() {
        return true;
    }
}

關(guān)于 TargetSource 本身,松哥在之前的 Spring 源碼視頻中已經(jīng)和大家介紹過很多了,這里我就不再啰嗦了。

接下來自定義 TargetSourceCreator:

public class CustomTargetSourceCreator extends AbstractBeanFactoryBasedTargetSourceCreator {

    @Override
    protected AbstractBeanFactoryBasedTargetSource createBeanFactoryBasedTargetSource(Class<?> beanClass, String beanName) {
        if (getBeanFactory() instanceof ConfigurableListableBeanFactory) {
            if (beanClass.isAssignableFrom(UserService.class)) {
                return new UserServiceTargetSource();
            }
        }
        return null;
    }
}

如果要創(chuàng)建的 bean 是 UserService 的話,那么就給返回一個 UserServiceTargetSource 對象。

最后,也是最關(guān)鍵的一步,根據(jù)前面的分析,TargetSourceCreator 是存在于 AnnotationAwareAspectJAutoProxyCreator 這樣一個 InstantiationAwareBeanPostProcessor 類型的后置處理器中的,因此,我們要想辦法把自定義的 TargetSourceCreator 設(shè)置給 AnnotationAwareAspectJAutoProxyCreator,如下:

@Component
public class SetCustomTargetSourceCreator implements BeanPostProcessor, PriorityOrdered, BeanFactoryAware {

    private BeanFactory beanFactory;

    @Override
    public int getOrder() {
        return Integer.MIN_VALUE;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        if(bean instanceof AnnotationAwareAspectJAutoProxyCreator) {
            AnnotationAwareAspectJAutoProxyCreator annotationAwareAspectJAutoProxyCreator = (AnnotationAwareAspectJAutoProxyCreator)bean;
            CustomTargetSourceCreator customTargetSourceCreator = new CustomTargetSourceCreator();
            customTargetSourceCreator.setBeanFactory(beanFactory);
            annotationAwareAspectJAutoProxyCreator.setCustomTargetSourceCreators(customTargetSourceCreator);
        }
        return bean;
    }

    @Override
    public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
        this.beanFactory = beanFactory;
    }
}

AnnotationAwareAspectJAutoProxyCreator 本身就是一個 BeanPostProcessor,我們現(xiàn)在要做的就是修改這個 BeanPostProcessor,BeanPostProcessor 是在 Spring 容器啟動時候的 refresh 方法中去初始化的。

BeanPostProcessor 初始化的時候,先初始化實(shí)現(xiàn)了 PriorityOrdered 接口的,再初始化實(shí)現(xiàn)了 Ordered 接口的,最后再去初始化那些沒有實(shí)現(xiàn)任何排序接口的 BeanPostProcessor。

而我們這里 SetCustomTargetSourceCreator 一定要趕在 AnnotationAwareAspectJAutoProxyCreator 之前進(jìn)行初始化,這樣,當(dāng) AnnotationAwareAspectJAutoProxyCreator 進(jìn)行初始化的時候,就會用到 SetCustomTargetSourceCreator 這樣一個后置處理器,進(jìn)而在該處理器中修改 AnnotationAwareAspectJAutoProxyCreator 的屬性。

AnnotationAwareAspectJAutoProxyCreator 類間接實(shí)現(xiàn)了 Ordered 接口,默認(rèn)優(yōu)先級是最低,但是在 Spring 容器啟動時,在處理 BeanFactoryPostProcessor 時(具體是 ConfigurationClassPostProcessor),將其優(yōu)先級設(shè)置為最高。

所以,我們?nèi)绻胍屪远x的 SetCustomTargetSourceCreator 搶在 AnnotationAwareAspectJAutoProxyCreator 之前執(zhí)行,那么就只能讓 SetCustomTargetSourceCreator 去實(shí)現(xiàn) PriorityOrdered 接口了,實(shí)現(xiàn) PriorityOrdered 接口之后,重寫 getOrder 方法,這個方法返回值是什么無所謂,反正都會在實(shí)現(xiàn)了 Ordered 接口的 BeanPostProcessor 之前執(zhí)行。

最后,我們再在啟動類上開啟自動代理即可:

@Configuration
@ComponentScan
@EnableAspectJAutoProxy
public class JavaConfig {
}

大功告成。

這樣,當(dāng) Spring 容器創(chuàng)建一個 Bean 的時候,就會提前被 BeanPostProcessor 攔截,然后給出一個 TargetSource,進(jìn)而據(jù)此創(chuàng)建代理對象,這樣就不需要后續(xù)常規(guī)的 Bean 創(chuàng)建流程了。好啦,感興趣的小伙伴可以自己去試一試哦~

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2020-09-06 22:59:35

Linux文件命令

2019-08-09 14:20:46

微信軟件手機(jī)

2020-11-16 11:24:00

Spring AOP數(shù)據(jù)庫

2024-09-26 14:48:35

SpringAOP范式

2020-08-17 08:20:16

iOSAOP框架

2011-03-24 09:34:41

SPRING

2023-12-27 08:24:05

射頻天線電波

2014-11-19 13:06:59

2009-06-18 14:54:52

Spring AOP

2021-04-07 15:55:35

微信朋友圈技巧

2015-07-29 15:05:01

2014-08-18 14:58:25

微軟IE

2021-08-26 11:02:55

云計(jì)算云計(jì)算環(huán)境云應(yīng)用

2022-10-21 14:27:53

元宇宙網(wǎng)絡(luò)空間稀缺虛擬環(huán)境

2020-11-13 07:08:51

Spring Boot應(yīng)用Spring

2013-01-15 14:32:03

移動社交商務(wù)社交藍(lán)海

2013-01-17 10:09:50

JavaSpring

2025-02-25 13:00:00

JavaScript開發(fā)前端

2022-06-07 07:58:45

SpringSpring AOP

2009-06-19 13:28:30

Spring AOPSpring 2.0
點(diǎn)贊
收藏

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

国内精品久久久久影院 日本资源| 91国在线观看| 国产精品加勒比| 日本一区二区不卡在线| 欧美日韩一区二区三区在线电影 | 1234区中文字幕在线观看| 成人小视频免费在线观看| 欧美性在线视频| 天堂网中文在线观看| 中文字幕日韩在线| 色狠狠综合天天综合综合| 性做爰过程免费播放| 色中色在线视频| 国产一区二区成人久久免费影院 | 成品人视频ww入口| 成人亚洲性情网站www在线观看| 美国毛片一区二区| 2019中文字幕在线观看| 午夜国产福利一区二区| 男男gay无套免费视频欧美| 欧美男男青年gay1069videost| 免费网站永久免费观看| 一区二区高清不卡| 久久婷婷色综合| 亚洲精品日产aⅴ| 波多野结衣视频免费观看| 欧美精品国产一区二区| 欧美精品乱人伦久久久久久| 免费一级特黄毛片| 男人在线资源站| 久久在线观看免费| 国产精品二区在线| 日韩综合视频在线观看| 亚洲成人在线视频网站| 国产一区二区视频在线观看免费| 色婷婷精品视频| 欧美一级欧美三级| 国产原创精品在线| 亚洲天堂av影院| 亚洲夂夂婷婷色拍ww47| 午夜啪啪免费视频| 成人综合影院| 久久一留热品黄| 国产精品我不卡| 99在线小视频| 黑人巨大精品欧美黑白配亚洲| 国产精品高清在线观看| 欧美熟妇激情一区二区三区| 国产精品视屏| 精品国产乱码久久久久久图片| 久久精品亚洲天堂| 欧洲亚洲精品久久久久| 欧美综合欧美视频| 成人性做爰aaa片免费看不忠| 大乳在线免费观看| www一区二区| 久久久精品国产一区二区三区| 日本不卡免费高清视频| 精品国产乱码久久久久夜深人妻| 亚洲国产精品精华素| 国产精品久久久久久户外露出 | 果冻天美麻豆一区二区国产| 精品久久人人做人人爽| www.com日本| 国产精品任我爽爆在线播放| 亚洲国产又黄又爽女人高潮的| 日本一区二区免费视频| 国产精品欧美大片| 亚洲免费一级电影| 亚洲第一综合网| 成久久久网站| 久久手机免费视频| 久久网一区二区| 日韩亚洲国产欧美| 国产成人久久久| 中文字幕第99页| 久久99九九99精品| 99国精产品一二二线| 国模无码一区二区三区| 91丨九色porny丨蝌蚪| 日本在线播放一区| 欧洲不卡视频| 一区二区高清在线| 欧美在线观看成人| a成人v在线| 亚洲一区在线观看网站| 色欲色香天天天综合网www| 在线成人av观看| 欧美日韩国产欧美日美国产精品| 国产性生活一级片| 精品精品国产毛片在线看| 亚洲欧美一区二区三区久久| 亚洲韩国青草视频| 黄色一级片播放| 日本在线看片免费人成视1000| 亚洲欧美日韩一区二区| 黄色一级在线视频| 欧美一级做a| 欧美精品一区男女天堂| av女人的天堂| 亚洲欧美亚洲| 国产成人精品免高潮费视频| 99热这里只有精品在线| 91色porny| 老汉色影院首页| 亚洲女色av| 在线播放日韩导航| 国产视频久久久久久| 欧美超碰在线| 一区二区欧美日韩视频| 欧美日韩精品在线观看视频| 久久精品五月| 91精品天堂| 国产黄色片在线观看| 亚洲综合一区二区三区| 日本免费观看网站| 久久a级毛片毛片免费观看| 最近2019中文字幕一页二页| 日韩欧美亚洲视频| 国产一区999| 日韩精品极品视频在线观看免费| 第四色日韩影片| 亚洲精品久久久蜜桃| 国产日韩欧美大片| 麻豆精品蜜桃| 欧美三级中文字幕在线观看| 老司机午夜免费福利| 国产精品久久久久久影院8一贰佰| 88xx成人精品| 亚洲欧美另类综合| 亚洲乱码中文字幕综合| 欧美男女交配视频| 久久99国产成人小视频| 57pao国产精品一区| 亚洲精品97久久中文字幕| 国产精品久久久久久久浪潮网站| 女人扒开屁股爽桶30分钟| 爱情电影社保片一区| 欧美成人官网二区| 亚洲国产美女视频| 青草av.久久免费一区| 日韩福利一区二区三区| 亚洲精品一区| 日韩精品视频在线免费观看| 99免费在线观看| 丁香婷婷综合网| 久久这里只有精品8| 日韩精品一区二区三区中文字幕 | 色婷婷国产精品久久包臀| www.四虎在线| 1024日韩| 精品日本一区二区三区| 国产中文在线播放| 亚洲护士老师的毛茸茸最新章节| 日韩经典在线观看| av在线播放成人| 成人在线免费观看av| 天堂网av成人| 国产999精品| 成人在线观看免费| 欧美性xxxxxxxx| jizz日本在线播放| 九九九久久久精品| 成人免费看片视频在线观看| 波多野结衣欧美| 97人人做人人爱| 青青青草原在线| 91激情五月电影| 黄色录像一级片| 国产精品系列在线观看| av免费看网址| 色哟哟精品丝袜一区二区| 国产91露脸中文字幕在线| 九色视频在线播放| 欧美日韩国产首页| 加勒比av在线播放| av在线播放不卡| 北条麻妃视频在线| 国产精品久久久久一区二区三区厕所| 91亚洲精华国产精华| 精品精品导航| 国产伦精品一区二区三区四区| 日韩黄色免费电影| 亚洲电影网站| 国产一区二区三区| 91国产美女在线观看| 国产综合在线观看| 91精品国产高清一区二区三区| 亚洲精品在线观看av| 久久久久久亚洲综合影院红桃| 91淫黄看大片| 一区二区三区午夜探花| 久久精品综合一区| 亚洲高清影院| 97在线观看视频国产| 99reav在线| 亚洲第一福利网站| 中文字幕永久在线| 亚洲在线一区二区三区| www.av天天| 成人丝袜视频网| 黄色手机在线视频| 亚洲妇女av| 92国产精品久久久久首页| 三级在线观看视频| 久久久精品一区| 亚洲自拍偷拍另类| 亚洲成人精品一区| 美女黄色一级视频| 奇米色777欧美一区二区| 免费网站永久免费观看| 成人在线亚洲| 精品免费一区二区三区蜜桃| 国产电影一区二区| 国产极品jizzhd欧美| 毛片网站在线看| xx视频.9999.com| 免费在线观看污视频| 精品剧情在线观看| 一本一道精品欧美中文字幕| 日韩欧美在线字幕| 久久久久久久黄色| 自拍偷拍欧美激情| wwwww黄色| 久久噜噜亚洲综合| 少妇搡bbbb搡bbb搡打电话| 美女在线一区二区| 免费观看成人在线视频| 国产精品嫩草99av在线| 999一区二区三区| 久久久精品久久久久久96| 亚洲高清资源综合久久精品| 亚洲男人都懂第一日本| 久久av二区| 国语一区二区三区| 国产精品嫩草在线观看| 日本精品视频| 亚洲a级在线播放观看| 欧美在线se| 成人a免费视频| 久久免费影院| 国产欧亚日韩视频| 丰满少妇一区| 国产精品视频999| 91成人抖音| 国产欧美韩国高清| 激情亚洲小说| 国产欧美 在线欧美| 先锋影音网一区二区| 成人国产精品日本在线| 91麻豆精品一二三区在线| 国产日韩欧美日韩大片| crdy在线观看欧美| 亚洲一区二区三区四区视频| 国产一区二区三区亚洲综合| 999国产在线| av在线亚洲色图| 天堂蜜桃91精品| 欧美xxxx吸乳| 欧美 日韩 国产 一区| 强开小嫩苞一区二区三区网站| 中文字幕亚洲精品乱码| avove在线观看| 欧美私人啪啪vps| 91精品国产91久久久久麻豆 主演| 亚洲狠狠婷婷| 亚洲国产精品久久久久婷蜜芽| 久久国产一二区| 一级黄色特级片| 国产乱国产乱300精品| 日本精品一二三| 2020国产成人综合网| 亚洲图片第一页| 成人免费在线观看入口| 精品少妇theporn| 欧美日韩免费区域视频在线观看| 69国产精品视频免费观看| 日本久久精品电影| 国产视频手机在线观看| 欧美精品一区二区三| 蜜桃视频在线免费| 日韩中文娱乐网| 青草在线视频| 日韩女在线观看| 国产精选久久| 国产一区免费观看| 日韩成人激情| 九九热只有这里有精品| 久久精品人人| 中文字幕 欧美 日韩| 久久亚洲综合色| 91在线播放观看| 91久久精品一区二区二区| 国产精品一级视频| 日韩精品在线第一页| 一区二区三区精彩视频| 日韩欧美国产一二三区| 国产午夜精品一区理论片| 九九精品在线视频| 欧美aaa视频| 欧美专区在线播放| 国产日韩在线观看视频| 欧美精品v日韩精品v国产精品| 日本不卡一区视频| 久久99蜜桃精品| 波多野结衣视频播放| 亚洲欧美在线高清| 日本一区二区免费电影| 日韩亚洲欧美一区| 成年人视频在线免费观看| 久久久久久久一区二区| 亚洲网站三级| 日本不卡一二三区| 尤物在线精品| 亚洲午夜精品一区| 青青草国产成人av片免费| 四虎永久免费观看| 国产精品第一页第二页第三页| 在线观看亚洲天堂| 欧美一区二区三区白人| 国产精品毛片一区二区三区四区| 欧美黑人国产人伦爽爽爽| 视频在线这里都是精品| 国产精品成人免费视频| 欧美深夜视频| 免费人成自慰网站| 韩国三级电影一区二区| 中文字幕av久久爽一区| 欧美日韩视频免费播放| 国模无码一区二区三区| 久久6免费高清热精品| 欧美一级网址| 亚洲欧洲精品一区二区| 久久最新视频| 亚洲精品成人无码熟妇在线| 国产欧美日韩亚州综合 | 欧美成人milf| 亚洲不卡视频在线| 久久精品一区二区三区四区| 亚洲黄色三级视频| 欧美精品一区二区三区久久久| 日本无删减在线| 99久久精品免费看国产一区二区三区| 欧美成人milf| 一区二区三区四区毛片| 国产精品久久久久久久裸模| 中文字幕 日韩有码| 在线精品国产欧美| 成人国产精品入口免费视频| 色视频一区二区三区| 日韩影院在线观看| 日本一道本视频| 欧美日韩亚洲综合一区 | 中文字幕av一区二区三区高| 国产精品久久久久久久久夜色| 亚洲人成电影网站| 巨胸喷奶水www久久久免费动漫| 少妇免费毛片久久久久久久久| 青青草国产成人av片免费| 91麻豆精品久久毛片一级| 7777精品伊人久久久大香线蕉完整版 | 97精品国产露脸对白| 国产 日韩 欧美 成人| 亚洲精品www久久久久久广东| 国产美女高潮在线| 免费h精品视频在线播放| 欧美日韩一二三四| 91午夜在线观看| 成人一区在线观看| 国产又黄又爽又色| 一区二区三区www| 色综合一区二区日本韩国亚洲| 影音先锋男人的网站| 国产91精品久久久久久久网曝门| 亚洲一区欧美在线| 国产亚洲在线播放| 精品午夜视频| a在线视频观看| 国产精品蜜臀av| 亚洲国产精品欧美久久| 欧美一级淫片videoshd| 欧美日韩在线二区| www日本在线观看| 中文字幕一区三区| 性一交一乱一伧老太| 51久久精品夜色国产麻豆| 欧美视频免费| 丰满饥渴老女人hd| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本欧美一区二区三区不卡视频| 欧美人妖巨大在线| 好久没做在线观看| 日本一区二区三区www| 国产一区二区三区免费观看| 国产精品免费av一区二区| 深夜精品寂寞黄网站在线观看| 99re6热只有精品免费观看| 日韩欧美xxxx| 亚洲综合色婷婷| 成年人在线免费观看|