日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring AOP 源码系列(一)解析 AOP 配置信息

發布時間:2024/9/30 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring AOP 源码系列(一)解析 AOP 配置信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在進行源碼閱讀之前建議先看一下這篇文章:Spring AOP 源碼分析系列文章導讀 by 田小波,寫的非常好,推薦閱讀。

關于 AOP 中常用的一些術語這里就不解釋了,如果不清楚的建議先看一遍上面推薦的文章。

一、AOP 配置入口

在分析源碼之前,我們先來看一下 XML 中關于 AOP 的配置:

<bean id="userServiceImpl" class="com.jas.mess.aop.UserServiceImpl"/><bean id="ownerAspect" class="com.jas.mess.aop.spring.OwnerAspect"/><aop:config><aop:aspect ref="ownerAspect"><aop:pointcut id="ownerPointcut" expression="execution(* com.jas.mess.aop.*.*(..))"/><aop:before method="recordLog" pointcut-ref="ownerPointcut"/></aop:aspect></aop:config>

在以前的文章里有總結過,XML 文件的配置信息會被轉化成 BeanDefinition,其中 AOP 相關的配置也不例外,從上面的例子中我們能看出一個明顯的區別:普通的 bean 標簽與 AOP 配置標簽不一樣,一個是 <bean /> 一個是 <aop />,除此之外你要想配置 AOP,還需要在 XMl 中引入 xmlns:aop="http://www.springframework.org/schema/aop" 命名空間。

普通的 bean 標簽與 AOP 標簽處理邏輯通過命名空間區分,下面我們來看源碼。

protected void parseBeanDefinitions(Element root, BeanDefinitionParserDelegate delegate) {// 命名空間檢查,默認的命名空間是 "http://www.springframework.org/schema/beans"if (delegate.isDefaultNamespace(root)) {NodeList nl = root.getChildNodes();for (int i = 0; i < nl.getLength(); i++) {Node node = nl.item(i);if (node instanceof Element) {Element ele = (Element) node;// <bean /> 標簽處理入口if (delegate.isDefaultNamespace(ele)) {parseDefaultElement(ele, delegate);}else {// <aop /> 標簽處理入口delegate.parseCustomElement(ele);}}}}else {delegate.parseCustomElement(root);}}

上面我們說過,AOP 的命名空間是 http://www.springframework.org/schema/aop,因此會執行到 delegate.parseCustomElement(ele)。

public BeanDefinition parseCustomElement(Element ele, @Nullable BeanDefinition containingBd) {String namespaceUri = getNamespaceURI(ele);if (namespaceUri == null) {return null;}// 根據命名空間獲取 handlerNamespaceHandler handler = this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri);if (handler == null) {error("Unable to locate Spring NamespaceHandler for XML schema namespace [" + namespaceUri + "]", ele);return null;}return handler.parse(ele, new ParserContext(this.readerContext, this, containingBd));}public BeanDefinition parse(Element element, ParserContext parserContext) {BeanDefinitionParser parser = findParserForElement(element, parserContext);return (parser != null ? parser.parse(element, parserContext) : null);}

上面的流程比較簡單,根據命名空間 URI 獲取命名空間 handler,這里對應的是 AopNamespaceHandler,通過 handler 去解析配置。handler 內部會根據標簽配置信息得到 ConfigBeanDefinitionParser,最終調用 parse 方法。

public BeanDefinition parse(Element element, ParserContext parserContext) {CompositeComponentDefinition compositeDef =new CompositeComponentDefinition(element.getTagName(), parserContext.extractSource(element));parserContext.pushContainingComponent(compositeDef);// 注冊 AspectJAwareAdvisorAutoProxyCreator 類型的beanDefinition,繼承自 BeanPostProcessorconfigureAutoProxyCreator(parserContext, element);// 獲取所有子標簽List<Element> childElts = DomUtils.getChildElements(element);for (Element elt: childElts) {String localName = parserContext.getDelegate().getLocalName(elt);// 解析 <aop:poincut />if (POINTCUT.equals(localName)) {parsePointcut(elt, parserContext);}// 解析 <aop:>advisor />else if (ADVISOR.equals(localName)) {parseAdvisor(elt, parserContext);}// 解析 <aop:aspect />else if (ASPECT.equals(localName)) {parseAspect(elt, parserContext);}}parserContext.popAndRegisterContainingComponent();return null;}

這里涉及到一個 <aop:advisor /> 標簽,大家可能不太清楚它的作用,advisor 與 advice(<aop:before />,<aop:after />…)功能類似,都可以用來增強目標方法,具體用法可以參考這篇文章:Spring Aop(八)——advisor標簽 by 234390216

parse 方法會處理 <aop:config /> 標簽下的子標簽,具體的處理邏輯后面會分析到。在解析標簽之前先調用了 configureAutoProxyCreator 方法,這個方法比較重要。

二、注冊 AspectJAwareAdvisorAutoProxyCreator beanDefinition

private void configureAutoProxyCreator(ParserContext parserContext, Element element) {AopNamespaceUtils.registerAspectJAutoProxyCreatorIfNecessary(parserContext, element);}public static void registerAspectJAutoProxyCreatorIfNecessary(ParserContext parserContext, Element sourceElement) {BeanDefinition beanDefinition = AopConfigUtils.registerAspectJAutoProxyCreatorIfNecessary(parserContext.getRegistry(), parserContext.extractSource(sourceElement));useClassProxyingIfNecessary(parserContext.getRegistry(), sourceElement);registerComponentIfNecessary(beanDefinition, parserContext);}

registerAspectJAutoProxyCreatorIfNecessary方法中有三個處理邏輯,下面一一來看下。

@Nullablepublic static BeanDefinition registerAspectJAutoProxyCreatorIfNecessary(BeanDefinitionRegistry registry, @Nullable Object source) {// 注意這里傳的是 AspectJAwareAdvisorAutoProxyCreator 類型return registerOrEscalateApcAsRequired(AspectJAwareAdvisorAutoProxyCreator.class, registry, source);}private static BeanDefinition registerOrEscalateApcAsRequired(Class<?> cls, BeanDefinitionRegistry registry, @Nullable Object source) {Assert.notNull(registry, "BeanDefinitionRegistry must not be null");// AUTO_PROXY_CREATOR_BEAN_NAME = "org.springframework.aop.config.internalAutoProxyCreator"if (registry.containsBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME)) {BeanDefinition apcDefinition = registry.getBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME);if (!cls.getName().equals(apcDefinition.getBeanClassName())) {int currentPriority = findPriorityForClass(apcDefinition.getBeanClassName());int requiredPriority = findPriorityForClass(cls);if (currentPriority < requiredPriority) {apcDefinition.setBeanClassName(cls.getName());}}return null;}RootBeanDefinition beanDefinition = new RootBeanDefinition(cls);beanDefinition.setSource(source);beanDefinition.getPropertyValues().add("order", Ordered.HIGHEST_PRECEDENCE);beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);// 注冊一個類型為 AspectJAwareAdvisorAutoProxyCreator 的 beanDefinitionregistry.registerBeanDefinition(AUTO_PROXY_CREATOR_BEAN_NAME, beanDefinition);return beanDefinition;}

注冊一個類型為 AspectJAwareAdvisorAutoProxyCreator 的 beanDefinition,注意此時還沒有創建 bean,AspectJAwareAdvisorAutoProxyCreator 其實是一個 BeanPostProcessor,后面在對方法增強的時候會用到,具體細節會在后面的文章里總結。

private static void useClassProxyingIfNecessary(BeanDefinitionRegistry registry, @Nullable Element sourceElement) {if (sourceElement != null) {boolean proxyTargetClass = Boolean.parseBoolean(sourceElement.getAttribute(PROXY_TARGET_CLASS_ATTRIBUTE));if (proxyTargetClass) {AopConfigUtils.forceAutoProxyCreatorToUseClassProxying(registry);}boolean exposeProxy = Boolean.parseBoolean(sourceElement.getAttribute(EXPOSE_PROXY_ATTRIBUTE));if (exposeProxy) {AopConfigUtils.forceAutoProxyCreatorToExposeProxy(registry);}}}

檢查 <aop:config />是否配置了 proxy-target-class 與 expose-proxy,如果有配置,則為 beanDefinition 添加 exposeProxy 與 proxyTargetClass 屬性,這兩個配置標簽后面還會遇到,這里先簡單介紹下作用。

proxy-target-class:默認為 false,如果設置為 true,會使用 CGLIB 創建代理對象
expose-proxy:默認為 false,作用:假設 A,B 方法都被增強,A 方法調用 B 方法,A 方法會被切面攔截,A 里的 B 方法是否會被切面攔截增強,默認不會

private static void registerComponentIfNecessary(@Nullable BeanDefinition beanDefinition, ParserContext parserContext) {if (beanDefinition != null) {parserContext.registerComponent(new BeanComponentDefinition(beanDefinition, AopConfigUtils.AUTO_PROXY_CREATOR_BEAN_NAME));}}

注冊組件。

三、解析 <aop:aspect ref="" id="" />

<aop:aspect /> 標簽下可以配置多種類型的子標簽,比如 <aop:before />、<aop:after />、<aop:pointcut />、<aop:declare-parents /> 等,不同類型的標簽處理邏輯也是不一樣的。

private void parseAspect(Element aspectElement, ParserContext parserContext) {String aspectId = aspectElement.getAttribute(ID);// 切面 beanNameString aspectName = aspectElement.getAttribute(REF);try {// 添加進 LinkedListthis.parseState.push(new AspectEntry(aspectId, aspectName));List<BeanDefinition> beanDefinitions = new ArrayList<>();List<BeanReference> beanReferences = new ArrayList<>();// 獲取 <aop:declare-parents /> 子標簽List<Element> declareParents = DomUtils.getChildElementsByTagName(aspectElement, DECLARE_PARENTS);for (Element declareParentsElement : declareParents) {beanDefinitions.add(parseDeclareParents(declareParentsElement, parserContext));}NodeList nodeList = aspectElement.getChildNodes();boolean adviceFoundAlready = false;for (int i = 0; i < nodeList.getLength(); i++) {Node node = nodeList.item(i);// 處理通知節點 <aop:before,after, around ... />if (isAdviceNode(node, parserContext)) {if (!adviceFoundAlready) {adviceFoundAlready = true;if (!StringUtils.hasText(aspectName)) {parserContext.getReaderContext().error("<aspect> tag needs aspect bean reference via 'ref' attribute when declaring advices.",aspectElement, this.parseState.snapshot());return;}beanReferences.add(new RuntimeBeanReference(aspectName));}// 處理通知AbstractBeanDefinition advisorDefinition = parseAdvice(aspectName, i, aspectElement, (Element) node, parserContext, beanDefinitions, beanReferences);beanDefinitions.add(advisorDefinition);}}// 創建 AspectComponentDefinitionAspectComponentDefinition aspectComponentDefinition = createAspectComponentDefinition(aspectElement, aspectId, beanDefinitions, beanReferences, parserContext);parserContext.pushContainingComponent(aspectComponentDefinition);// 獲取所有切點 elementList<Element> pointcuts = DomUtils.getChildElementsByTagName(aspectElement, POINTCUT);for (Element pointcutElement : pointcuts) {parsePointcut(pointcutElement, parserContext);}parserContext.popAndRegisterContainingComponent();}finally {this.parseState.pop();}}

主要流程如下:

  • 獲取 <aop:aspect > 的 id 與 ref 屬性,封裝成 AspectEntry 添加到 parseState 集合中,流程處理完后,出棧
  • 獲取 <aop:declare-parents /> 子標簽,如果有配置則封裝成 beanDefinition
  • 解析 <aop:aspect > 下所有子標簽,循環處理通知配置
  • 解析切點配置
  • private AbstractBeanDefinition parseAdvice(String aspectName, int order, Element aspectElement, Element adviceElement, ParserContext parserContext,List<BeanDefinition> beanDefinitions, List<BeanReference> beanReferences) {try {this.parseState.push(new AdviceEntry(parserContext.getDelegate().getLocalName(adviceElement)));RootBeanDefinition methodDefinition = new RootBeanDefinition(MethodLocatingFactoryBean.class);// 切面 bean(類)methodDefinition.getPropertyValues().add("targetBeanName", aspectName);// 設置切面方法methodDefinition.getPropertyValues().add("methodName", adviceElement.getAttribute("method"));methodDefinition.setSynthetic(true);// 創建切面 BeanDefinitionRootBeanDefinition aspectFactoryDef =new RootBeanDefinition(SimpleBeanFactoryAwareAspectInstanceFactory.class);aspectFactoryDef.getPropertyValues().add("aspectBeanName", aspectName);aspectFactoryDef.setSynthetic(true);// 創建通知 BeanDefinition,此時已明確通知類型AbstractBeanDefinition adviceDef = createAdviceDefinition(adviceElement, parserContext, aspectName, order, methodDefinition, aspectFactoryDef,beanDefinitions, beanReferences);RootBeanDefinition advisorDefinition = new RootBeanDefinition(AspectJPointcutAdvisor.class);advisorDefinition.setSource(parserContext.extractSource(adviceElement));// 將上面創建的 adviceDef 注入到 advisorDefinition 中advisorDefinition.getConstructorArgumentValues().addGenericArgumentValue(adviceDef);// <aop:aspect ref="" order="" />,控制切面方法優先級if (aspectElement.hasAttribute(ORDER_PROPERTY)) {advisorDefinition.getPropertyValues().add(ORDER_PROPERTY, aspectElement.getAttribute(ORDER_PROPERTY));}// 注冊通知 BeanDefinitionparserContext.getReaderContext().registerWithGeneratedName(advisorDefinition);return advisorDefinition;}finally {this.parseState.pop();}}

    上面邏輯主要是創建出 advisorDefinition,并注冊到 beanFactory 中,由此可見,我們配置的每一個通知,最終都會被轉化成 beanDefinition 并注冊到 IoC 容器中。

    上面這個方法深追下去知識點還挺多的,比如 createAdviceDefinition 方法,注冊 beanDefinition 時 beanName 的生成規則等,有興趣的自己可以研究下,這里就不介紹了,看不懂的地方可以通過 DEBUG 的方式幫助理解。

    private AbstractBeanDefinition parsePointcut(Element pointcutElement, ParserContext parserContext) {String id = pointcutElement.getAttribute(ID);// 獲取切點表達式String expression = pointcutElement.getAttribute(EXPRESSION);AbstractBeanDefinition pointcutDefinition = null;try {this.parseState.push(new PointcutEntry(id));// 創建切點 beanDefinition,類型為 ConfigurableBeanFactory.SCOPE_PROTOTYPEpointcutDefinition = createPointcutDefinition(expression);pointcutDefinition.setSource(parserContext.extractSource(pointcutElement));String pointcutBeanName = id;// 注冊切點 BeanDefinition 到 beanFactory 中if (StringUtils.hasText(pointcutBeanName)) {parserContext.getRegistry().registerBeanDefinition(pointcutBeanName, pointcutDefinition);}else {// <aop:pointcut id="" expression=""/> 沒有配置 id 先生成 beanName 在注冊到 beanFactory 中pointcutBeanName = parserContext.getReaderContext().registerWithGeneratedName(pointcutDefinition);}parserContext.registerComponent(new PointcutComponentDefinition(pointcutBeanName, pointcutDefinition, expression));}finally {this.parseState.pop();}return pointcutDefinition;}protected AbstractBeanDefinition createPointcutDefinition(String expression) {RootBeanDefinition beanDefinition = new RootBeanDefinition(AspectJExpressionPointcut.class);// 切點作用域原型beanDefinition.setScope(BeanDefinition.SCOPE_PROTOTYPE);beanDefinition.setSynthetic(true);beanDefinition.getPropertyValues().add(EXPRESSION, expression);return beanDefinition;}

    處理切點的邏輯與通知類似,注意切點 beanDefinition 的作用域并非單例而是原型,初始化 beanDefinition 后注冊到 IoC 容器中。

    參考

    【Spring源碼分析】AOP源碼解析(上篇) by 五月的倉頡

    總結

    以上是生活随笔為你收集整理的Spring AOP 源码系列(一)解析 AOP 配置信息的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    精品一区二区在线观看 | 国内外成人免费在线视频 | 日韩电影一区二区在线观看 | 成人av一级片 | 久久dvd| 国产一区二区久久精品 | 国产这里只有精品 | 中文字幕免费观看视频 | 免费观看成年人视频 | 婷婷视频导航 | 在线观看日韩av | 五月天精品视频 | 337p西西人体大胆瓣开下部 | 亚洲欧美怡红院 | 午夜免费在线观看 | 日韩特黄一级欧美毛片特黄 | 亚洲国产成人av网 | 99久久毛片 | 2024国产在线 | 天天干天天操人体 | 视频在线国产 | 国产精品美女免费 | 国产美女在线观看 | 国产精品嫩草影院99网站 | 久久av免费观看 | 欧美日韩免费视频 | 国产日韩精品一区二区 | 日韩免费在线观看视频 | av丝袜制服 | 成人国产精品一区二区 | 中文字幕精品三级久久久 | 久久激情片 | 久久久久久在线观看 | 97超碰人 | 91视频免费播放 | 波多野结衣在线播放一区 | 久日精品 | 婷婷丁香视频 | 国产免费成人av | 中文字幕在线看片 | 欧美成人亚洲 | 国产精品精品久久久久久 | 国产小视频在线观看免费 | 精品久久久久久久久久久院品网 | 毛片美女网站 | 免费观看91视频 | 久久免费的精品国产v∧ | 国产手机视频 | 久久免费电影网 | 国产精品综合久久久 | 91精品婷婷国产综合久久蝌蚪 | 99精品黄色片免费大全 | 最新极品jizzhd欧美 | 国产精品视频你懂的 | 五月丁香 | 中文字幕av全部资源www中文字幕在线观看 | 久久精品屋| 五月天国产精品 | 欧美精品在线一区二区 | 国产免费观看视频 | www.久热 | 久操久 | 国产.精品.日韩.另类.中文.在线.播放 | 黄网站免费久久 | 日韩二区在线观看 | 日韩r级电影在线观看 | 国产中文字幕在线观看 | 一二三区在线 | 日韩aⅴ视频 | 香蕉网在线播放 | 在线观看91视频 | 日本中文字幕一二区观 | 国产精品久久电影网 | 日韩精品一区二区三区水蜜桃 | 久久人人爽人人爽 | 亚洲国产精品久久久 | 欧美伦理一区二区三区 | 99中文字幕在线观看 | 欧洲一区二区三区精品 | 日韩欧美视频免费在线观看 | 91精品毛片| 亚洲伊人成综合网 | 国产精品18久久久久久久久久久久 | 人人爱爱人人 | 久久免费观看视频 | 欧美日韩国产一区二区三区在线观看 | 91网在线 | 日韩欧美成人网 | 美女在线免费视频 | 中文字幕一区二区三 | 免费色视频网站 | 国产成人一区二区三区久久精品 | 国产精品福利午夜在线观看 | www.xxxx欧美 | 日韩色一区二区三区 | 毛片美女网站 | 日本 在线 视频 中文 有码 | 91在线免费观看国产 | 亚洲综合欧美日韩狠狠色 | 国产伦精品一区二区三区高清 | 国产高清福利在线 | 久久精品中文字幕少妇 | 亚洲一区二区三区miaa149 | 日韩精品一区二区三区在线播放 | 97精品国产一二三产区 | 久久久久黄 | 国产毛片久久 | 日韩一二区在线 | 色婷婷狠狠五月综合天色拍 | 亚洲国产午夜精品 | 亚洲无人区小视频 | 99久久精品免费看国产麻豆 | 天海冀一区二区三区 | 亚洲国产精品一区二区久久,亚洲午夜 | 天天做天天爽 | 国产精品免费观看久久 | 国产精品黑丝在线观看 | 99久久99 | 精品国产_亚洲人成在线 | 欧美最猛性xxx | 91在线最新 | 久久大片 | 国产91精品久久久久久 | 人人干干人人 | 亚洲免费高清视频 | 色噜噜在线观看视频 | 国产黄色精品在线 | 久久国内精品视频 | 国产 日韩 欧美 自拍 | 中文字幕一二 | 国产精品大片 | 欧美久久电影 | 亚洲永久精品在线观看 | 最近日本字幕mv免费观看在线 | 久久艹国产 | 超碰在线97观看 | 久久久影视 | 成人动漫一区二区 | 国产精品永久在线观看 | 国产精品美女久久久久久免费 | av一区在线播放 | 在线精品一区二区 | 456免费视频 | 国产精品成人国产乱 | 国产丝袜美腿在线 | 欧美性生活一级片 | 日韩av专区 | 免费在线激情电影 | 四虎在线永久免费观看 | 免费视频一区二区 | 久久久久久久网 | 99在线热播精品免费 | 午夜美女视频 | 国产精品一区二区果冻传媒 | 久久黄色片 | a级国产乱理论片在线观看 特级毛片在线观看 | 日韩最新理论电影 | 天天干天天操天天做 | 亚州av免费 | 国产在线综合视频 | 婷婷激情久久 | 国产成人av电影 | 97视频人人澡人人爽 | 国产免费影院 | 欧美视频xxx | 蜜臀久久99精品久久久无需会员 | 操高跟美女| 人人爽人人爽 | 国产在线色 | 精品欧美一区二区三区久久久 | 81精品国产乱码久久久久久 | 亚洲国产人午在线一二区 | 丁香六月天婷婷 | 香蕉视频在线免费 | 欧美日韩中文在线视频 | av黄网站 | 久久久久免费精品国产小说色大师 | 久久成人国产精品一区二区 | 精品视频在线看 | 国内精品久久久久影院优 | 午夜精品久久久久久久99婷婷 | 亚洲一区黄色 | 五月婷婷狠狠 | 午夜av色| 丁香激情综合 | 午夜精品久久久久久久久久久久久久 | 久久国产精品一区二区三区四区 | 国产91丝袜在线播放动漫 | 丁香六月国产 | a级一a一级在线观看 | 国产手机视频在线 | 国产不卡av在线播放 | 精品999久久久 | 日韩视频免费在线 | 中文字幕中文字幕在线中文字幕三区 | www免费网站在线观看 | 日韩精品不卡在线观看 | 99热这里只有精品国产首页 | 亚洲精品在线播放视频 | 久久精品久久99 | 欧美精品一区二区免费 | 精品国产理论 | 欧美激情一区不卡 | 女人高潮一级片 | av黄色免费在线观看 | 国内精品二区 | 亚洲精品资源 | 99 色 | 国产精品成人自产拍在线观看 | 黄色亚洲精品 | ,午夜性刺激免费看视频 | 婷五月激情 | 一区二区激情视频 | 96精品在线 | 美女国产精品 | 97国产精品久久 | 欧美在线日韩在线 | 狠狠色丁香久久婷婷综合_中 | 九九热精 | 国产在线一卡 | 免费h视频| 国产在线视频导航 | 超级碰碰碰免费视频 | 超碰97人 | 911香蕉 | 日韩电影中文字幕 | 国产欧美综合在线观看 | 精品免费视频123区 午夜久久成人 | 人人插人人插 | 波多野结衣视频一区二区 | 天天曰视频| 国产中文在线播放 | 右手影院亚洲欧美 | 国内精品久久久久国产 | 色网站在线免费观看 | 久久久毛片 | 亚洲国产中文字幕在线 | 9草在线| 久久精品电影网 | 国产精品毛片一区二区在线 | 婷婷色在线观看 | 成人黄色电影视频 | 天天色天天射天天干 | 99热这里只有精品国产首页 | www.狠狠 | 99视屏 | 免费福利在线视频 | 99热这里只有精品1 av中文字幕日韩 | aaa毛片视频 | 69精品| av大全在线免费观看 | 一区二区三区免费 | 成人黄色电影在线播放 | 91手机电视 | 毛片网站免费在线观看 | 久久久久久看片 | 日韩电影中文字幕 | 午夜视频在线观看网站 | 日韩理论片中文字幕 | 欧美婷婷综合 | 亚洲免费成人av电影 | 久草新在线| 国产精品99久久99久久久二8 | 午夜色场 | 成人黄色大片在线观看 | 日韩一区正在播放 | 国产在线观看网站 | 亚洲免费av观看 | 色在线高清 | 激情小说网站亚洲综合网 | 午夜精品视频一区二区三区在线看 | 国产香蕉视频在线观看 | 天天射天天干天天爽 | 波多野结衣在线观看视频 | 国产女v资源在线观看 | 国产色女 | 午夜视频不卡 | 美女黄久久 | 99久久久国产精品免费观看 | 99精品观看 | 中文字幕综合在线 | 亚洲精品久久久久久久不卡四虎 | 欧美 日韩 国产 中文字幕 | 国产在线a不卡 | 五月天天色 | 在线观看视频黄色 | 97碰碰碰| 日韩二区三区在线 | 欧美一二三视频 | www.久热| 成年人免费看的视频 | 国产精品成人在线观看 | 天天操天天射天天 | 午夜精品久久久久久久99 | 欧美人牲 | 日韩网站在线 | 欧美精品久久久久久久亚洲调教 | 人人舔人人舔 | 99热这里有精品 | 91精品国自产拍天天拍 | 国产99久久精品 | 视频在线91 | 99热.com | 久久电影国产免费久久电影 | 国产一区二区在线免费播放 | 91高清免费看 | 成av在线| 超碰人人射 | 成人精品视频久久久久 | 91高清视频免费 | 一个色综合网站 | 最近日本中文字幕a | 日韩精品欧美一区 | 精品国产色 | 天天射天天干天天 | 99视频在线看 | 91九色免费视频 | 日韩在线视频在线观看 | 粉嫩高清一区二区三区 | 免费看一级黄色大全 | 国产爽妇网 | 国产不卡在线视频 | 狠狠色噜噜狠狠 | 天天操天天射天天添 | 亚洲激情六月 | 96av麻豆蜜桃一区二区 | 久久成人福利 | 精品99在线 | 久草视频免费在线观看 | a视频在线观看免费 | 综合激情网 | a级国产乱理论片在线观看 特级毛片在线观看 | 视频在线日韩 | 国产精品视频地址 | 免费h精品视频在线播放 | 亚洲天堂va| 国产日韩精品一区二区三区在线 | 国产vs久久 | 99久热在线精品视频观看 | 国产精品免费视频一区二区 | 色噜噜狠狠狠狠色综合久不 | 一级精品视频在线观看宜春院 | 日韩免费福利 | www.亚洲黄色 | 综合色综合| 狠狠干天天 | 91热在线| 国产香蕉97碰碰碰视频在线观看 | 麻豆影视在线免费观看 | 最新久久久 | 久久se视频 | 亚州视频在线 | 一区二区精品在线 | 毛片基地黄久久久久久天堂 | 精品国产一区二区三区久久影院 | 9色在线视频 | 69xx视频| 中文字幕一二 | 久免费| 操操碰 | 亚洲无吗av| 99视频导航 | 911亚洲精品第一 | www.久久久.com | 日日麻批40分钟视频免费观看 | 天海冀一区二区三区 | 午夜视频在线观看一区二区 | 国产成人精品亚洲日本在线观看 | 一本一本久久a久久 | 国产高清在线不卡 | 福利在线看片 | 色五月色开心色婷婷色丁香 | 久久久久久久久久伊人 | 日韩高清一 | 91精品欧美一区二区三区 | 综合五月婷婷 | 四虎欧美| 美女视频久久 | 97成人在线免费视频 | 中文字幕亚洲综合久久五月天色无吗'' | 7799av | 久久精品牌麻豆国产大山 | 亚洲自拍偷拍色图 | 欧美性大战 | 91精品视频免费 | 国产精品中文字幕在线观看 | 国产亚洲精品成人av久久影院 | 一级黄视频 | 91在线一区二区 | 中文不卡视频在线 | 国产精品观看在线亚洲人成网 | 色婷婷亚洲婷婷 | 欧美少妇xxxxxx| 天天干天天操 | 天天摸夜夜添 | 久久 地址 | 亚洲欧美日韩在线一区二区 | 99一级片 | 97天堂 | 在线免费观看黄 | 在线精品视频免费观看 | bbb搡bbb爽爽爽 | 日韩成人精品一区二区三区 | 综合网天天射 | 99九九热只有国产精品 | 91精品视频观看 | 五月综合网站 | 亚洲精品综合欧美二区变态 | 亚洲乱码精品久久久久 | 天天干天天想 | 夜夜躁日日躁 | 日韩精品一区二 | 久久久久久久久久久久久影院 | 日韩免费视频在线观看 | 日韩欧美精品在线观看 | 丁香高清视频在线看看 | 色噜噜狠狠狠狠色综合久不 | 亚洲成年人免费网站 | 毛片网在线观看 | 黄色免费视频在线观看 | 中文视频在线 | 日韩av免费一区 | 91在线免费视频 | 亚洲午夜久久久影院 | 精品一区二区三区久久 | 99久久综合国产精品二区 | 97精品一区| 午夜免费福利视频 | 99热官网 | 国产中文字幕一区二区 | 婷婷社区五月天 | 国产成人精品午夜在线播放 | 9在线观看免费高清完整 | 骄小bbw搡bbbb揉bbbb | 狠狠色伊人亚洲综合网站色 | 99精品视频在线观看免费 | 国产精品久久久久久久久久久免费看 | 欧美日韩免费一区二区三区 | 日日操天天操狠狠操 | 五月综合激情 | 欧美日本不卡高清 | 久草在线91 | 欧美一级视频免费 | 日本性xxx| 日韩国产欧美视频 | 天天天天综合 | 国产乱对白刺激视频不卡 | 久久福利| 国产精品久久久久久久久久直播 | 日韩三级视频在线看 | 中文字幕av专区 | 久久97精品 | 亚洲一区二区精品 | 国产视频一区二区三区在线 | 国产麻豆精品久久一二三 | 五月婷婷精品 | www.国产在线 | av高清不卡 | 成人av免费在线观看 | 97视频资源 | 亚洲人成精品久久久久 | 精品国产一二三 | 丁香av在线 | www.久久com| 欧洲精品码一区二区三区免费看 | 欧美一级电影免费观看 | 天天爱天天草 | 久久日韩精品 | 99一级片 | 91高清视频在线 | 久久 在线| 在线岛国av | 成年人黄色在线观看 | 国产黄色高清 | 狠狠久久综合 | 五月天亚洲精品 | 国产成人久久 | 91精品在线麻豆 | 久久国产精品久久国产精品 | 月丁香婷婷| 精品在线观看一区二区三区 | 欧美二区在线播放 | 免费在线观看黄色网 | 涩涩网站在线 | 亚洲成人黄色在线观看 | 国产成人av片 | 开心丁香婷婷深爱五月 | 婷婷五月色综合 | 色网站在线免费 | 久久精品亚洲 | 福利在线看片 | 美女免费视频观看网站 | 99国产精品 | 亚洲精品福利在线 | 一二三区高清 | 日本在线观看视频一区 | 婷婷综合亚洲 | 97伊人网| 视频在线99re | 999久久久欧美日韩黑人 | 香蕉视频久久久 | 免费久久视频 | 精品在线视频一区二区三区 | 久章草在线观看 | 91中文字幕 | 这里只有精品视频在线观看 | 97精品国产97久久久久久免费 | 国产精品久久久久久久久久久久久 | 亚洲一区精品人人爽人人躁 | av免费成人 | 日韩字幕在线 | 波多野结衣综合网 | 91精品国产99久久久久久红楼 | 高清视频一区二区三区 | 国产丝袜 | 91精品视频在线 | 精品久久中文 | 999成人 | wwwwww色 | 国产亚洲精品中文字幕 | 人人爽人人爽人人片 | av不卡中文字幕 | 91在线视频免费观看 | 在线免费观看黄色 | 毛片一级免费一级 | 激情大尺度视频 | 99免费看片 | 狠狠色噜噜狠狠 | 欧美日韩午夜爽爽 | 中文字幕精品一区久久久久 | 在线观看不卡的av | 日韩高清一区在线 | 中文字幕视频免费观看 | www.人人草 | 国产黄色片在线 | 在线综合 亚洲 欧美在线视频 | 日韩在线观看视频网站 | 国产精品在线看 | 有码视频在线观看 | 日批视频国产 | 国产九九热| 97电院网手机版 | 四虎在线免费观看 | 91综合色| 在线电影日韩 | 亚洲视频中文 | 久久久久草| 婷婷五月情 | 日本精品在线视频 | 日韩高清精品免费观看 | 日韩视频一区二区三区在线播放免费观看 | 国产无遮挡又黄又爽在线观看 | 91视频首页 | 日韩av在线小说 | av成人免费在线观看 | 国产精品一区二区久久精品爱涩 | 欧美成人精品欧美一级乱黄 | 久久综合九色欧美综合狠狠 | www色婷婷com | 婷婷黄色片 | 午夜三级福利 | 欧美日韩国产一区二区在线观看 | 免费v片| 在线视频成人 | 中文字幕av影院 | 韩国av免费看 | 亚洲欧洲视频 | 亚洲成人动漫在线观看 | 日韩理论片 | 国产精品成人一区二区三区吃奶 | 美女在线免费视频 | 亚洲无吗av| 久久人人爽人人爽人人片av软件 | 亚洲精品视频在线观看免费 | 国产精品免费麻豆入口 | av在线观| 不卡的av电影在线观看 | 国内精品久久久久久久久久清纯 | 亚洲久草在线视频 | 成人精品国产免费网站 | 在线日韩一区 | 在线之家官网 | 中文字幕一区av | 丰满少妇在线观看网站 | 美女网站视频久久 | 天天夜夜狠狠操 | 亚洲韩国一区二区三区 | 天堂激情网| 欧美在线视频精品 | 国产999精品久久久影片官网 | 五月天激情视频在线观看 | 国产亚州精品视频 | 亚洲第一成网站 | 日韩美女黄色片 | 国产精品永久免费在线 | 天天爽人人爽夜夜爽 | 日韩精品一区二区三区三炮视频 | 天天操导航 | 成人网444ppp | 精品国产伦一区二区三区免费 | 国内三级在线观看 | 日韩在线 | 午夜私人影院 | 99在线观看 | 亚洲精品国产精品久久99 | 成人永久在线 | 国产日产欧美在线观看 | 久久艹精品| 久久久久9999亚洲精品 | 久久久黄色av | 成人av资源网站 | 亚洲欧洲视频 | 丁香av在线 | 日韩中文字幕第一页 | 色欧美88888久久久久久影院 | 中文字幕影视 | 91在线91拍拍在线91 | 免费视频a | 手机在线视频福利 | 97精品超碰一区二区三区 | 黄色成年网站 | 久久久蜜桃 | 九九久久久久99精品 | 国产精品99久久久久久小说 | 精品亚洲视频在线观看 | 日本超碰在线 | 国产一线二线三线性视频 | 久热免费在线 | av大片网站 | 欧美天天综合网 | 国产精品久久久久三级 | 久久久国产精品视频 | 久久久午夜视频 | 高清国产午夜精品久久久久久 | 亚洲视频在线观看网站 | 欧美成人久久 | 一区二区不卡在线观看 | 国产亚洲精品久久久久久 | 日韩一二区在线观看 | 亚洲精品免费在线观看 | 成年人免费看片网站 | 久久国产成人午夜av影院宅 | 婷婷丁香六月 | av看片网址| 久草视频免费观 | 欧美精品国产综合久久 | 天天摸日日摸人人看 | av中文字幕第一页 | 久久草 | 国产91成人 | 久久成人久久 | 欧美一级片免费观看 | 国内精品视频免费 | 久久看视频 | 久久这里只有精品1 | 亚洲影视九九影院在线观看 | 四虎成人精品在永久免费 | 欧美一区二视频在线免费观看 | 欧美做受69 | 日韩中文在线字幕 | 激情欧美丁香 | 精品免费一区二区三区 | 69视频永久免费观看 | 欧美成年黄网站色视频 | 在线欧美中文字幕 | 日韩欧美电影网 | 日日婷婷夜日日天干 | av片在线看| 国产高清视频在线播放一区 | 中文字幕一区2区3区 | 久久精品99国产国产精 | 日韩在线资源 | 久久免费看 | 五月婷婷久 | 亚洲 中文字幕av | 色婷婷欧美 | 亚洲欧美综合 | 国内精品久久久久久中文字幕 | 91av欧美 | 国产丝袜一区二区三区 | 久草资源在线观看 | 91中文在线观看 | 欧美粗又大| 91夫妻自拍 | 亚洲 欧美 综合 在线 精品 | 二区视频在线 | 婷婷网址| 久久av电影 | 日本大尺码专区mv | 三级av网| 日韩中文在线视频 | 日韩成人精品一区二区三区 | 干 操 插| 国产一区二区三区午夜 | 激情综合站 | 伊人婷婷 | 国产不卡一 | 国产精品久久久久毛片大屁完整版 | 国产精品99爱 | 精品在线播放视频 | 欧美天堂视频在线 | 99精品视频播放 | 国产精品一区二区免费 | 亚洲高清视频一区二区三区 | 久久久久久久99 | 一区二区三区手机在线观看 | 五月天网站在线 | 国产做a爱一级久久 | 亚洲一区二区三区在线看 | 国产精品久久婷婷六月丁香 | 亚洲综合干 | 日本少妇高清做爰视频 | 99精品久久久久久久 | 国精产品一二三线999 | 91男人影院| 国产专区在线视频 | 国产高清精品在线观看 | 国产精品2019| 欧美日韩国产一二三区 | www操操操 | 国产日韩在线一区 | 久精品视频 | 欧美日韩不卡一区 | 国产精品日韩精品 | av片在线看 | 亚洲精品在线一区二区三区 | 亚洲成人网av | 狠狠色伊人亚洲综合网站色 | 日本深夜福利视频 | 丝袜护士aⅴ在线白丝护士 天天综合精品 | 欧美国产日韩激情 | 欧美精品久久久久久久免费 | 中文字幕黄色网 | 黄色片视频在线观看 | 天天天操天天天干 | 伊人狠狠色 | 午夜精品久久久久久久99热影院 | 超碰在线人人 | 日韩久久午夜一级啪啪 | 亚洲影视九九影院在线观看 | 亚洲国产精品久久久 | av一区二区三区在线观看 | www.激情五月.com | 亚洲人人av | 五月婷婷电影网 | 国产视频一区二区在线播放 | a天堂免费| 亚洲高清资源 | 日韩激情av在线 | 中文字幕成人一区 | 国内精品美女在线观看 | 色综久久| 欧美日韩高清一区 | 日韩 精品 一区 国产 麻豆 | 视频在线精品 | 国产精品夜夜夜一区二区三区尤 | 最新国产在线 | 中文字幕在线观看免费高清电影 | 91天天视频| 免费av大全 | 日韩免费播放 | 国产精品毛片一区视频播不卡 | 久久超级碰视频 | 日本天天色 | 久久国产精品免费一区二区三区 | 日韩视频区 | 精品999在线观看 | 一区二区三区在线影院 | 91成人区 | 久久香蕉国产精品麻豆粉嫩av | 黄色av网站在线免费观看 | 91精品啪在线观看国产 | 黄色a一级片 | 国产五月| 国产区精品 | 国产一级二级在线观看 | 九九热只有这里有精品 | 成人免费观看视频网站 | 亚洲日韩中文字幕在线播放 | 久久精品国产一区二区 | 天天射日 | 狠狠狠操| 国产激情小视频在线观看 | 国产精品麻豆视频 | 丁香婷婷综合激情 | 国产精品理论片在线播放 | 2023天天干 | 国产在线观看高清视频 | www.成人sex| 日日夜色 | 在线成人一区 | 国产91综合一区在线观看 | 在线成人高清电影 | 国产精品久久 | 91精品视频一区 | 久久成人精品 | 国产美女永久免费 | 欧美中文字幕久久 | www.夜夜操 | 色婷婷啪啪免费在线电影观看 | aaa毛片视频| 久久综合视频网 | 国产精品av久久久久久无 | 久久久免费精品 | 久久国产露脸精品国产 | av免费看av | 成片视频免费观看 | 一区二区男女 | 日韩三级一区 | 六月丁香色婷婷 | 国产黄色片免费观看 | 亚洲一区美女视频在线观看免费 | 久久爽久久爽久久av东京爽 | 欧美色综合久久 | 97超碰在线人人 | 久久激情综合网 | 免费国产ww| 狠狠干天天操 | 美女精品久久 | 狠狠狠狠狠狠狠干 | 4p变态网欧美系列 | 精品国产乱码久久久久久天美 | 人人爽人人澡 | 国产精品网红福利 | 久久综合九色综合久99 | 91麻豆精品久久久久久 | 色婷婷久久一区二区 | 久久久久久久久久久综合 | 久久狠狠一本精品综合网 | 国产在线播放不卡 | 91爱看片 | 日本精品xxxx| 国产麻豆精品一区 | www.天天色.com | 国产成人av一区二区三区在线观看 | 国内精品久久久久久中文字幕 | 欧美激精品 | 国产a网站 | 久久久久久看片 | 久久在线一区 | 久久久久国产免费免费 | 高清在线一区 | 正在播放五月婷婷狠狠干 | 免费久久精品视频 | 欧美夫妻生活视频 | 久久成人国产精品一区二区 | 成人久久精品 | 99草在线视频 | 99久久精品国产一区 | 久久久久久久久久久网站 | 日韩电影在线观看一区二区 | 一级黄色片毛片 | 欧美一级片免费在线观看 | 国产精品视频专区 | 日韩一三区| 欧美综合久久 | 欧美视频国产视频 | 激情五月色播五月 | 国产福利不卡视频 | 亚洲免费不卡 | 国产高清视频免费在线观看 | 一级α片 | 超碰人人超 | 91成人亚洲 | 在线观看亚洲国产 | 蜜臀91丨九色丨蝌蚪老版 | 狠狠色香婷婷久久亚洲精品 | 特黄免费av | 激情五月在线 | 亚洲成人精品 | 黄色在线成人 | 亚洲精品天天 | 深爱婷婷激情 | 在线免费高清一区二区三区 | 日本爱爱免费 | 欧美日韩另类在线 | 五月婷婷在线视频观看 | 欧美一区二区三区免费观看 | 99这里有精品 | 九九视频免费在线观看 | 久久一区二区三区日韩 | a视频在线观看免费 | 日韩一区二区三区在线看 | 欧美一区二区三区在线观看 | 91亚洲成人 | 久久99精品一区二区三区三区 | 欧美一级视频免费看 | 久久一区二区三区超碰国产精品 | 久草视频中文 | 狠狠色丁香婷婷综合久久片 | 九九热视频在线免费观看 | 亚洲视频456 | www.国产毛片 | 欧美午夜精品久久久久久浪潮 | 午夜av网站| 在线观看色网 | 久久精品视频网 | 亚洲精品免费在线观看视频 | 激情综合色播五月 | 天天摸天天干天天操天天射 | 久草观看视频 | 欧美日韩二区在线 | 国产欧美综合在线观看 | 在线视频日韩一区 | 国产一级片不卡 | 久久久久亚洲精品中文字幕 | 免费视频区 | 91精品网站 | 日韩国产在线观看 | 久久综合影视 | 久久久免费精品视频 | 精品一区二区三区久久久 | 深夜免费小视频 | 中文字幕国产视频 | 青草视频免费观看 | 成人va在线观看 | 91.精品高清在线观看 | 91av九色| 黄污在线看 | 久久99热精品 | 欧美激情精品久久久久久免费印度 | 波多野结衣电影久久 | 69国产精品视频 | 久久色亚洲 | 亚洲乱码精品久久久久 | 日韩手机视频 | 丰满少妇对白在线偷拍 | 中文字幕一区二区三区四区在线视频 | 日韩精品高清不卡 | 成年人毛片在线观看 | 在线观看视频中文字幕 | 91精品国产一区二区在线观看 | 午夜av免费看 | 黄色av一区二区 | 久久久精品国产免费观看同学 | av在线永久免费观看 | 国产精品九色 | 久久久2o19精品 | 久久久久久久久久久福利 | 探花视频免费观看高清视频 | 麻豆免费在线视频 | 91亚洲精品在线 | 欧美日韩中文国产一区发布 | 日本精品一区二区在线观看 | 99久久国产免费看 | 99久久久久久国产精品 | 三级av小说 | 亚洲精品视频久久 | 亚洲国产精品小视频 | 亚洲一级黄色av | 91精品一区二区三区久久久久久 | 日本性视频 | 婷婷九月激情 | 午夜精品在线看 | 成人永久在线 | 国产日韩在线一区 | 中文区中文字幕免费看 | 精品久久久久久久久久久院品网 | 国产在线不卡 | 国产精品av在线免费观看 | 久久九九影视 | 9999在线视频| 久久久www免费电影网 | 不卡av电影在线 | 日韩午夜视频在线观看 | av成年人电影 | 久久久久久久影视 | 人人看人人 | 精品一区二区免费 | 不卡视频在线看 | 精品一区二区视频 | 亚洲国产成人在线播放 | 亚洲欧美婷婷六月色综合 | 91福利免费 | 日韩在线小视频 | 国产成人一区二区三区在线观看 | av福利网址导航大全 | 亚洲91视频 | 亚洲伊人婷婷 | 国产中文字幕亚洲 | 91成人免费观看视频 | 欧美一级大片在线观看 | 91av99| 国产日产亚洲精华av | 久久九九视频 | 日韩视频在线播放 | 久久久久久久久毛片精品 | 久久午夜鲁丝片 | 一区二区三区精品久久久 | 日韩视频中文字幕 | 午夜国产成人 | 九九热精品在线 | 五月天婷婷丁香花 | 视频一区视频二区在线观看 | 激情丁香久久 | 国产精品日韩精品 | 久久久久久久久久久电影 | 国产精品免费人成网站 |