国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Spring Boot 中 @EnableXXX 注解的驅(qū)動(dòng)邏輯

共 9264字,需瀏覽 19分鐘

 ·

2020-07-31 17:19


點(diǎn)擊上方藍(lán)色“程序猿DD”,選擇“設(shè)為星標(biāo)”

回復(fù)“資源”獲取獨(dú)家整理的學(xué)習(xí)資料!

作者 |?溫安適

來(lái)源 |?https://juejin.im/post/5efdd689e51d4534af686ca9
點(diǎn)擊贈(zèng)書(shū):聊聊「分布式架構(gòu)」那些事兒

工作中經(jīng)常用到,如下注解:

  • @EnableEurekaClient
  • @EnableFeignClients
  • @EnableCircuitBreaker
  • @EnableHystrix

他們都是@Enable開(kāi)頭,各自實(shí)現(xiàn)不同的功能,解析這種@Enable的邏輯是什么呢?

@Enable驅(qū)動(dòng)邏輯

找入口

@Enable的模塊驅(qū)動(dòng),依賴(lài)于@Import實(shí)現(xiàn)。

@Import作用是裝載導(dǎo)入類(lèi),主要包括@Configuration class,ImportSelector實(shí)現(xiàn)類(lèi),ImportBeanDefinitionRegistrar實(shí)現(xiàn)類(lèi)。

XML時(shí)代,經(jīng)常是@Import,,一起使用。

(注解配置)中大概率有我們需要找的邏輯。

根據(jù) Spring Framework 2.0引入的可擴(kuò)展的XML編程機(jī)制,XML Schema命名空間需要與Handler建立映射關(guān)系。

該關(guān)系配置在相對(duì)于classpath下的/META-INF/spring.handlers中。

查看ContextNamespaceHandler 源碼

public?class?ContextNamespaceHandler?extends?NamespaceHandlerSupport?{
???@Override
???public?void?init()?{
???????//省略其他代碼
????registerBeanDefinitionParser("annotation-config",?
????????????????????new?AnnotationConfigBeanDefinitionParser());
??}
}復(fù)制代碼


** 對(duì)應(yīng)AnnotationConfigBeanDefinitionParser這個(gè)就是要找的入口**

找核心類(lèi)

從AnnotationConfigBeanDefinitionParser的parse方法開(kāi)始一路向下,找到

AnnotationConfigUtils.registerAnnotationConfigProcessors中注冊(cè)了ConfigurationClassPostProcessor。

img

ConfigurationClassPostProcessor類(lèi)注釋說(shuō)明

\1. 用于的引導(dǎo)處理@Configuration類(lèi)

\2. context:annotation-config/或 context:component-scan/時(shí)會(huì)注冊(cè)

否則需要手工編程

\3. ConfigurationClassPostProcessor第一優(yōu)先級(jí),保證

@Configuration}類(lèi)中聲明@Bean,在其他 BeanFactoryPostProcessor執(zhí)行之前被注冊(cè)

擴(kuò)展

AnnotationConfigApplicationContext中new AnnotationBeanDefinitionReader也調(diào)用了 AnnotationConfigUtils .

registerAnnotationConfigProcessors

從類(lèi)注釋中,可以看出ConfigurationClassPostProcessor就是要找的核心類(lèi)

找核心方法

查看 ConfigurationClassPostProcessor 的層級(jí)關(guān)系為

img

Aware系列注入相應(yīng)資源,Ordered設(shè)置優(yōu)先級(jí),值得關(guān)注的就是

postProcessBeanDefinitionRegistry了。

postProcessBeanDefinitionRegistry其內(nèi)部有2個(gè)方法

  1. postProcessBeanDefinitionRegistry在BeanDefinition注冊(cè)之后,BeanFactoryPostProcessor執(zhí)行之前,修改或重寫(xiě)B(tài)eanDefinition
  2. 繼承自BeanFactoryPostProcessor的postProcessBeanFactory,BeanDefinition加載之后,Bean實(shí)例化之前,重寫(xiě)或添加BeanDefinition,修改BeanFactory

瀏覽2個(gè)方法,都有processConfigBeanDefinitions,從名稱(chēng)可以看出是處理配置類(lèi)Bean定義

img

ConfigurationClassPostProcessor#processConfigBeanDefinitions就是要找的核心方法

梳理流程

public?void?processConfigBeanDefinitions(BeanDefinitionRegistry?registry)?{
???List?configCandidates?=?new?ArrayList<>();
???String[]?candidateNames?=?registry.getBeanDefinitionNames();

???for?(String?beanName?:?candidateNames)?{
??????BeanDefinition?beanDef?=?registry.getBeanDefinition(beanName);
??????if?(ConfigurationClassUtils.isFullConfigurationClass(beanDef)?||
????????????ConfigurationClassUtils.isLiteConfigurationClass(beanDef))?{
?????????if?(logger.isDebugEnabled())?{
????????????logger.debug("Bean?definition?has?already?been?processed?as?a?configuration?class:?"?+?beanDef);
?????????}
??????}
??????else?if?(ConfigurationClassUtils.checkConfigurationClassCandidate(beanDef,?this.metadataReaderFactory))?{
?????????configCandidates.add(new?BeanDefinitionHolder(beanDef,?beanName));
??????}
???}

???//?沒(méi)有找到?@Configuration?classes?立即返回
???if?(configCandidates.isEmpty())?{
??????return;
???}
???//根據(jù)@Order?值進(jìn)行排序
???configCandidates.sort((bd1,?bd2)?->?{
??????int?i1?=?ConfigurationClassUtils.getOrder(bd1.getBeanDefinition());
??????int?i2?=?ConfigurationClassUtils.getOrder(bd2.getBeanDefinition());
??????return?Integer.compare(i1,?i2);
???});
???//通過(guò)封閉的應(yīng)用程序上下文,?檢測(cè)任何自定義bean名稱(chēng)生成策略
???supplied?through?the?enclosing?application?context
???SingletonBeanRegistry?sbr?=?null;
???if?(registry?instanceof?SingletonBeanRegistry)?{
??????sbr?=?(SingletonBeanRegistry)?registry;
??????if?(!this.localBeanNameGeneratorSet)?{
?????????BeanNameGenerator?generator?=?(BeanNameGenerator)?sbr.getSingleton(CONFIGURATION_BEAN_NAME_GENERATOR);
?????????if?(generator?!=?null)?{
????????????this.componentScanBeanNameGenerator?=?generator;
????????????this.importBeanNameGenerator?=?generator;
?????????}
??????}
???}
???if?(this.environment?==?null)?{
??????this.environment?=?new?StandardEnvironment();
???}
???//?解析@Configuration?class
???ConfigurationClassParser?parser?=?new?ConfigurationClassParser(
?????????this.metadataReaderFactory,?this.problemReporter,?this.environment,
?????????this.resourceLoader,?this.componentScanBeanNameGenerator,?registry);

???Set?candidates?=?new?LinkedHashSet<>(configCandidates);
???Set?alreadyParsed?=?new?HashSet<>(configCandidates.size());
???do?{
??????parser.parse(candidates);
??????parser.validate();

??????Set?configClasses?=?new?LinkedHashSet<>(parser.getConfigurationClasses());
??????configClasses.removeAll(alreadyParsed);
??????//?讀ConfigurationClass的信息,創(chuàng)建BeanDefinition
??????if?(this.reader?==?null)?{
?????????this.reader?=?new?ConfigurationClassBeanDefinitionReader(
???????????????registry,?this.sourceExtractor,?this.resourceLoader,?this.environment,
???????????????this.importBeanNameGenerator,?parser.getImportRegistry());
??????}
??????this.reader.loadBeanDefinitions(configClasses);
??????alreadyParsed.addAll(configClasses);

??????candidates.clear();
??????if?(registry.getBeanDefinitionCount()?>?candidateNames.length)?{
?????????String[]?newCandidateNames?=?registry.getBeanDefinitionNames();
?????????Set?oldCandidateNames?=?new?HashSet<>(Arrays.asList(candidateNames));
?????????Set?alreadyParsedClasses?=?new?HashSet<>();
?????????for?(ConfigurationClass?configurationClass?:?alreadyParsed)?{
????????????alreadyParsedClasses.add(configurationClass.getMetadata().getClassName());
?????????}
?????????for?(String?candidateName?:?newCandidateNames)?{
????????????if?(!oldCandidateNames.contains(candidateName))?{
???????????????BeanDefinition?bd?=?registry.getBeanDefinition(candidateName);
???????????????if?(ConfigurationClassUtils.checkConfigurationClassCandidate(bd,?this.metadataReaderFactory)?&&
?????????????????????!alreadyParsedClasses.contains(bd.getBeanClassName()))?{
??????????????????candidates.add(new?BeanDefinitionHolder(bd,?candidateName));
???????????????}
????????????}
?????????}
?????????candidateNames?=?newCandidateNames;
??????}
???}
???while?(!candidates.isEmpty());

???//?將ImportRegistry注冊(cè)為bean以支持importware@Configuration類(lèi)
???if?(sbr?!=?null?&&?!sbr.containsSingleton(IMPORT_REGISTRY_BEAN_NAME))?{
??????sbr.registerSingleton(IMPORT_REGISTRY_BEAN_NAME,?parser.getImportRegistry());
???}
???if?(this.metadataReaderFactory?instanceof?CachingMetadataReaderFactory)?{
??????//?Clear?cache?in?externally?provided?MetadataReaderFactory;?this?is?a?no-op
??????//?for?a?shared?cache?since?it'll?be?cleared?by?the?ApplicationContext.
??????((CachingMetadataReaderFactory)?this.metadataReaderFactory).clearCache();
???}
}復(fù)制代碼


ConfigurationClassPostProcessor#processConfigBeanDefinitions核心如下:

  1. 根據(jù)@Order 值進(jìn)行排序
  2. 解析@Configuration class 為ConfigurationClass對(duì)象
  3. 讀ConfigurationClass的信息,創(chuàng)建BeanDefinition
  4. 將ImportRegistry注冊(cè)為bean以支持importware@Configuration類(lèi)

重點(diǎn)關(guān)注解析方法

ConfigurationClassParser#parse方法負(fù)責(zé)解析@Configuration class 為ConfigurationClass對(duì)象

查閱其源碼如下:

ConfigurationClassParser#doProcessConfigurationClass代碼如下:

protected?final?SourceClass?doProcessConfigurationClass(ConfigurationClass?configClass,?SourceClass?sourceClass)
??????throws?IOException?
{

???if?(configClass.getMetadata().isAnnotated(Component.class.getName()))?{
??????//?Recursively?process?any?member?(nested)?classes?first
??????processMemberClasses(configClass,?sourceClass);
???}

???//?Process?any?@PropertySource?annotations
???for?(AnnotationAttributes?propertySource?:?AnnotationConfigUtils.attributesForRepeatable(
?????????sourceClass.getMetadata(),?PropertySources.class,
?????????org.springframework.context.annotation.PropertySource.class))?{
??????if?(this.environment?instanceof?ConfigurableEnvironment)?{
?????????processPropertySource(propertySource);
??????}
??????else?{
?????????logger.info("Ignoring?@PropertySource?annotation?on?["?+?sourceClass.getMetadata().getClassName()?+
???????????????"].?Reason:?Environment?must?implement?ConfigurableEnvironment");
??????}
???}

???//?Process?any?@ComponentScan?annotations
???Set?componentScans?=?AnnotationConfigUtils.attributesForRepeatable(
?????????sourceClass.getMetadata(),?ComponentScans.class,?ComponentScan.class);
???if?(!componentScans.isEmpty()?&&
?????????!this.conditionEvaluator.shouldSkip(sourceClass.getMetadata(),?ConfigurationPhase.REGISTER_BEAN))?{
??????for?(AnnotationAttributes?componentScan?:?componentScans)?{
?????????//?The?config?class?is?annotated?with?@ComponentScan?->?perform?the?scan?immediately
?????????Set?scannedBeanDefinitions?=
???????????????this.componentScanParser.parse(componentScan,?sourceClass.getMetadata().getClassName());
?????????//?Check?the?set?of?scanned?definitions?for?any?further?config?classes?and?parse?recursively?if?needed
?????????for?(BeanDefinitionHolder?holder?:?scannedBeanDefinitions)?{
????????????BeanDefinition?bdCand?=?holder.getBeanDefinition().getOriginatingBeanDefinition();
????????????if?(bdCand?==?null)?{
???????????????bdCand?=?holder.getBeanDefinition();
????????????}
????????????if?(ConfigurationClassUtils.checkConfigurationClassCandidate(bdCand,?this.metadataReaderFactory))?{
???????????????parse(bdCand.getBeanClassName(),?holder.getBeanName());
????????????}
?????????}
??????}
???}

???//?Process?any?@Import?annotations
???processImports(configClass,?sourceClass,?getImports(sourceClass),?true);

???//?Process?any?@ImportResource?annotations
???AnnotationAttributes?importResource?=
?????????AnnotationConfigUtils.attributesFor(sourceClass.getMetadata(),?ImportResource.class);
???if?(importResource?!=?null)?{
??????String[]?resources?=?importResource.getStringArray("locations");
??????Class?readerClass?=?importResource.getClass("reader");
??????for?(String?resource?:?resources)?{
?????????String?resolvedResource?=?this.environment.resolveRequiredPlaceholders(resource);
?????????configClass.addImportedResource(resolvedResource,?readerClass);
??????}
???}

???//?Process?individual?@Bean?methods
???Set?beanMethods?=?retrieveBeanMethodMetadata(sourceClass);
???for?(MethodMetadata?methodMetadata?:?beanMethods)?{
??????configClass.addBeanMethod(new?BeanMethod(methodMetadata,?configClass));
???}

???//?Process?default?methods?on?interfaces
???processInterfaces(configClass,?sourceClass);

???//?Process?superclass,?if?any
???if?(sourceClass.getMetadata().hasSuperClass())?{
??????String?superclass?=?sourceClass.getMetadata().getSuperClassName();
??????if?(superclass?!=?null?&&?!superclass.startsWith("java")?&&
????????????!this.knownSuperclasses.containsKey(superclass))?{
?????????this.knownSuperclasses.put(superclass,?configClass);
?????????//?Superclass?found,?return?its?annotation?metadata?and?recurse
?????????return?sourceClass.getSuperClass();
??????}
???}

???//?No?superclass?->?processing?is?complete
???return?null;
}復(fù)制代碼


ConfigurationClassParser#doProcessConfigurationClass(ConfigurationClass,AnnatationMetatdata)將@PropertySource, ? @ComponentScan, @Import,@ImportResource,@Bean等一起處理了。

看到這里基本邏輯已經(jīng)理清 了,但是有一個(gè)疑問(wèn)

@Configuration中的@Bean沒(méi)有其他特殊處理嗎?

瀏覽代碼解決疑問(wèn)

![img](data:image/svg+xml;utf8,)

從上邊瀏覽的代碼可以看到完全模式,會(huì)被AOP增強(qiáng)

那什么是完全模式呢?在ConfigurationClassUtils找到如下方法:

public?class?ConfigurationClassUtils{
//省略其他方法
public?static?boolean?isFullConfigurationCandidate(AnnotationMetadata?metadata)?{
???return?metadata.isAnnotated(Configuration.class.getName());
}
}復(fù)制代碼


@Configuration class是完全模式,@Component,@Bean是輕量級(jí)模式

那AOP增強(qiáng)了作用是什么呢?查看 ConfigurationClassEnhancer 的類(lèi)注釋如下:

/**

* Enhances {@link

Configuration

} classes by generating a CGLIB subclass which

* interacts with the Spring container to respect bean scoping semantics for

* {@code @Bean} methods. Each such {@code @Bean} method will be overridden in

* the generated subclass, only delegating to the actual {@code @Bean} method

* implementation if the container actually requests the construction of a new

* instance. Otherwise, a call to such an {@code @Bean} method serves as a

* reference back to the container, obtaining the corresponding bean by name.


* @author Chris Beams

* @author Juergen Hoeller

* @since 3.0

* @see #enhance

* @see

ConfigurationClassPostProcessor

*/

class ?ConfigurationClassEnhancer ?{

大概意思如下:

通過(guò)CGLIB增強(qiáng)@Configuration class。

每個(gè)@Bean方法會(huì)生成子類(lèi)。

首次被調(diào)用時(shí),@Bean方法會(huì)被執(zhí)行用于創(chuàng)建bean實(shí)例;

再次被調(diào)用時(shí),不會(huì)再執(zhí)行創(chuàng)建bean實(shí)例,而是根據(jù)bean名稱(chēng)返回首次該方法被執(zhí)行時(shí)創(chuàng)建的bean實(shí)例。

總結(jié)

1.ConfigurationClassPostProcessor負(fù)責(zé)篩選@Component Class、@Configuration Class以及@Bean定義的Bean,**

2.ConfigurationClassParser從候選的Bean定義中解析出ConfigurationClass集合,隨后被3.ConfigurationClassBeanDefinitionReader轉(zhuǎn)換為BeanDefinition

4.ConfigurationClassParser的解析順序,

@PropertySource->@ComponentScan->@Import->@ImportResource->@Bean->接口的默認(rèn)方法->處理父類(lèi)

5.@Configuration class是完全模式,@Component,@Bean是輕量級(jí)模式

6.CGLIB增強(qiáng)@Configuration class。每個(gè)@Bean方法會(huì)生成子類(lèi)。

首次被調(diào)用時(shí),@Bean方法會(huì)被執(zhí)行用于創(chuàng)建bean實(shí)例;

再次被調(diào)用時(shí),不會(huì)再執(zhí)行創(chuàng)建bean實(shí)例,而是根據(jù)bean名稱(chēng)返回首次該方法被執(zhí)行時(shí)創(chuàng)建的bean實(shí)例。


往期推薦

認(rèn)真看看, 以后寫(xiě) SQL 就爽多了:MyBatis 動(dòng)態(tài) SQL:

實(shí)戰(zhàn)篇:點(diǎn)贊功能,用 MySQL 還是 Redis 好 ?

為什么國(guó)內(nèi)流行的 MyBatis ,國(guó)外 Java 工程師卻不愿意使用?

盤(pán)點(diǎn)開(kāi)發(fā)中那些常用的MySQL優(yōu)化

Spring 中 @Component、@Service 等注解如何被解析?


掃一掃,關(guān)注我

一起學(xué)習(xí),一起進(jìn)步

瀏覽 45
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 欧美一卡二卡| 国产一在线| 成年免费视频| 黄片无码在线观看| 十八禁在线播放| 双飞人妻13p| 黄色成人在线观看| 国产日本在线视频| 蜜臀网在线观看| 草莓av| 亚洲精品国偷拍自产在线观看蜜桃| 黑人巨大翔田千里AⅤ| 国产人妻精品一二三区| 亚洲午夜在线观看| 臭小子啊轻点灬太粗太长了的视频 | 国产精品美女视频| 麻豆国产一区二区三区四区| 日韩成人视频在线观看| 色色色色色色色色欧美| 亚欧成人在线视频| 三级黄,色| 亚洲一区二区成人| 国产精品成人99一区无码| 国产av天堂| 淫荡少妇美红久久久久久久久久| 微拍福利一区二区| 四季AV之日韩人妻无码| 国产三级小视频| 伊人久久大香线蕉av一区| 无码视频免费| 岛国av片| 极品少妇久久久| 精品美女视频在线观看免费软件| 亚洲黄色免费网站| 成人做爰黄AAA片免费直播岛国| 2021无码| 国产在线秘麻豆精品观看| 99久久九九| 日韩无码专区| 亚洲视频1区| 996精品视频| 日韩区在线| 国产成人精品av| 午夜无码av| 足浴小少妇-88AX| 男人天堂99| 亚洲素人无码| 麻豆传媒免费观看| 亚洲AV无一区二区三区久久| 99视频精品在线| 免费A片视频| 黄色插逼视频| 亚洲综合人妻| 欧美嗯啊| 亚洲精品国产精品国自产在线| 91在线精品视频| 日本少妇bbw| P站免费版-永久免费的福利视频平台 | 午夜成人小视频| 国产一区二区三区四区五区六区七区 | 亚洲欧美成人网| 91视频在线看| 麻酥酥在线视频| 国产成人无码Av片在线公司| 国产欧美精品一区二区色综合| jizzjizz国产| 亚洲AV无码成人精品久久久| 色色激情网| 亚洲va中文字幕| 久久久久久av| 精品视频久久久久久| 97精品人妻一区二区三区香蕉| 欧美日韩中文| 影音先锋成人网| 天天色小说| 波多野结衣久久精品| 欧美一级性爱视频| 黄色网页在线观看| 超碰人人干人人操| 成人爽爽视频| 丰满欧美熟妇免费视频| 国产精品毛片一区视频播| ww亚洲ww| 狠狠草狠狠干| 高清无码视频在线观看| 福利视频在线| 特级毛片WWW| 国产精品无码一区二区三区免费 | 九色91视频| 无码电影视频| 特级西西444WWW高清| 九九成人视频| 亚洲天堂在线观看网站| 久久免费视频6| www.国产视频| 亚洲vs无码蜜桃少妇| 亚洲无码人妻视频| 丁香五月av| 男女做爱无码| 波多野结衣无码高清视频| 91热视频| 中文字幕一二三四| 成人看片黄a免费看视频| 99热| 欧美操逼电影| 日韩在线不卡视频| 亚洲少妇网| 日韩不卡一区| 夜夜骚精品人妻av一区| 日本一区二区在线视频| 欧美日韩日逼| 久久黄色A片| 人人做人人操| 黄色电影免费在线观看| 北岛玲丝袜办公室高跟| 狼友精品| 西西www444无码大胆| 国产69精品久久久久久| 激情婷婷 | 久久国产精品电影| 伊人久久电影| 2019中文字幕mv第三季歌词 | 九色PORN视频成人蝌蚪自拍| 中文无码在线观看| 夜夜嗨Av禁果Av粉嫩AV懂色Av| 日韩欧美成人在线| 伊人网在线免费视频| 欧美成人高清视频| 久久人搡人人玩人妻精AV香蕉| 欧美成人看片黄a免费看| 欧美三级网| 高清毛片AAAAAAAAA郊外| 黄片在线免费观看视频| 免费观看日韩无码视频| 99综合视频| 国产三级片网| 一本一道伊人99久久综| 国产性精品| 无码人妻精品一区二区三区蜜桃91 | 欧美色色色网| 91丨牛牛丨国产| 美女大吊,网站视频| 成人AV中文字幕| 猫咪视频大全视频| 无码人妻一区二区三区免水牛视频 | 亚洲黄片在线| 三级精品| 成人国产无码| 一级女婬片A片AAAA片| 亚洲区一区二| 久久五月天婷婷| 操逼网123首页| 五月天福利视频| 亚洲高清视频在线播放| 欧美性爱一区二区| a片视频免费| 操东北老女人| 熟妇一区二区| 欧美日韩国产不卡视频| 大香蕉欧美视频| 久久婷婷久久| 人妻碰碰| av青草| 无码人妻一区二区三区| 久久精品观看| 91国产做爱| 欧洲亚洲免费视频| 亚洲护士无码| 婷婷在线观看视频| 中文字幕免费无码| 欧美操B电影| 久久五月丁香| 人人妻人人澡人人DⅤD| 免费a在线观看| 99久久伊人| 黄网国产手机在线观看| 美女黄色免费网站| 亚洲AV无码成人精品区h麻豆| 国产亲子乱XXXXinin| 尤物看片| 加勒比无码在线| 成人性爱在线视频| 91麻豆国产福利精品| 人人澡人人添人人爽人人| 国内自拍欧美| 日韩中文视频| 午夜AAA| 尹人大香蕉网| 亚洲不卡视频| 亚洲欧洲成人| 高潮无码在线观看| 操碰在线视频| 国产一卡二卡在线| 91色色色色| 亚洲黄色av| 看a网站| 91国产精品在线| 一级黄色蜜芽视频| 91人妻无码精品一区二区| 大香蕉伊人综合在线| 乳揉みま痴汉电车羽月希免费观看 | 日韩美女免费性爱视频| 97在线观看免费| 99精品视频国产| 欧美肏屄网| 五月天丁香社区| 成人AV中文字幕| 青青国产在线观看| 一区二区三区四区视频| 久久久久婷婷| 草逼毛片| 91大神在线资源观看无广告| 欧美久久久久| 欧美第五页| 天天操超碰| 国产中文字幕片| 午夜无码熟妇丰满人妻| 成年人在线播放| 欧美日韩中文在线观看| 亚洲高清在线| 一区二区三区四区免费| 噜噜噜色| 狼色视频| 亚洲精品一区二区三区四区高清| 欧美在线天堂| 色婷婷Av| 成人在线毛片| 久久久高清无码视频| 日韩中文毛片| 狼友视频在线| 图片区小说区区亚洲五月| HEYZO少婦AV無碼精品| 日韩黄色激情| 日本在线一级片| 国产av影视| 国产三级在线观看视频| 在线三级片视频| 久久精品性爱| 永久免费看A人片无码精| 精品小视频| 一本高清无码| 99久久婷婷国产综合精品hsex | 五月天婷婷网址| 西西444WWW无码视频软件| 国产久久久久| 91中文在线| 久久丝袜视频| 免费二区| 91综合视频在线播放| 天天拍夜夜爽| 亚洲中文字幕播放| 最新版本日本亚洲色| 熟妇一区| 亚洲va国产天堂va久久en| AV无码在线免费观看| 日韩一区二区三区精品| 亚洲成免费| 亚洲色婷婷五月| 国产18欠欠欠一区二区| 国产日韩欧美在线观看| 在线一区二区三区四区| 亚洲天堂一区二区| 久99视频| 久操不卡| 日韩电影| 五月天久久精品| 尤物网站在线观看| 国产精品7777| 亚洲网站免费在线观看| 成人免看一级a一片| 欧美亚洲综合手机在线| 无码人妻一区二区三区免费九色| 无码av在线观看| 99er视频| 婷婷五月天在线播放| 一区二区视频在线| 色婷婷AV一区二区三区之e本道| 久久另类TS人妖一区二区| 五月婷婷激情五月| 97精品一区二区三区A片| 99精品视频免费在线观看| 一级A毛片| 日本色中文字幕| 老鸭窝久久久| 黄色A片网址| 狠狠躁夜夜躁人人爽视频| 欧美一道本在线| 天天色图片| 91精品国产人妻| 69视频在线免费观看| 热无码av| 久久久9999| 丁香五月激情视频| 日韩成人中文字幕| 91搞搞| 中文无码av| 中文字幕在线观看一区| 8050午夜| 欧美国产日韩综合在线观看170| 丁香婷婷男人天堂| 亚洲高清国产欧美综合s8| 中文字幕观看av| 久久久久亚洲AV成人片| 午夜美女视频| 亚洲欧洲视频在线观看| 亚洲AV永久无码精品国产精| 亚洲字幕AV| 婷婷网五月天| 91无码人妻精品1国产四虎| 亚洲欧美另类色图| 无码免费高清视频| 国产黄色视频在线看| 亚洲另类天堂| 亚欧洲精品在线视频免费观看| 欧美成人午夜视频| 果冻传媒一区二区三区| 日韩一区二区无码| 91在线精品秘一区二区黄瓜| 欧美成人视频| 亚洲中文字幕在线观看免费| 精品成人Av一区二区三区| 婷婷五月伊人| 一本色道综合久久欧美日韩精品| 天天视频国产| 日逼精品| 免费AV大全| 麻豆操逼| 青娱乐黄片| 婷婷丁香五月花| 激情小说在线视频| 久99久视频| 欧美黄色网址| 性爱视频免费网站| 人人妻人人爱| 日韩无码精品AV| www.av在线播放| 国产视频成人| 韩国三级HD久久精品| 手机看片1024旧版| 日本大香蕉视频| 无码国产精品一区二区三| 亚洲成人中文字幕在线| 免费观看黄片网站| 欧美久久大香蕉| 日本久久综合| 先锋成人资源| 亚洲欧美日韩黑料吃瓜在线观看| 亚洲无码高清电影| 欧美一级成人| 伊人大香蕉电影| 欧美日韩免费在线观看| 人人摸人人干| 日韩一区二区三区在线视频| 国内自拍视频网站| 色婷婷一区二区三区久久午夜| 久久精品三级| 久久亚洲福利视频| 天天夜夜久久| 日韩一级片在线播放| 97人人爱| 曰本中文字幕在线视频| 国产夫妻自拍av| 一本到免费视频| 亚洲AV免费看| 大香蕉AV在线| 无码人妻丰满熟妇区17水蜜桃| 亚洲无码性爱视频| 成人午夜无码视频| 日本高清色清di免费观看| 91视频电影| 在线观看黄A片免费网站| 亚洲AV激情无码专区在线播放| 三级黄视频| 亚洲综合免费观看高清完整版在线| 超碰在线观看免费版| 91福利视频在线观看| 人人操人人撸| 性99网站| 自拍三级| 色欲无码| 国外成人视频| 婷婷中文字幕亚洲| 久久婷婷亚洲| 国产AV资源| 玖玖色资源| 99九九精品| 大香蕉一区二区三区| 亚洲成人情趣大香蕉| 成人黄色小电影| 久久精品三级| 思思热99热| 北条麻妃波多波多野结衣| 成人内射视频| 国产精品一级无码免费播放| BBB搡BBB搡BBB搡BBB | 亚洲国产精品18久久久久久| 18禁无码永久免费网站大全| 熟女人妻人蜜桃视频| 亚洲中文字幕日本| 久久国产精品一区二区三区| 日韩人妻精品中文字幕| 成人网站一区二区| 午夜蜜桃人妻一区二区| av一区二区三区| 欧美AA级毛片| 天天操一操| 久久久亚洲AV| 国产高清免费无码| 成人久久电影| 日本亚洲精品秘入口A片| 四虎永久在线精品| www伦理片-韩国三级三级三级a三级-成人AV| 欧美一级免费A片| 天天操b| 美女中文字幕| 无码人妻精品一区二区三区蜜臀百度| 超级碰碰碰碰碰碰碰碰碰| 99免费热视频在线| 99人妻人人爽人人添人人精品 | 在线黄网| 国产精品成人在线视频| 亚洲艹逼| 五月丁香中文| 伊人88| 尤物综合网| 国产精品VA| 日韩成人无码| 免费无码国产在线55| 嫩BBB槡BBBB槡BBB3i| 在线高清无码视频| 猫咪AV成人永久网站| 夜夜撸天天日| 亚洲无码AV一区二区三区| 精品国产一二三| 黑人狂躁女人高潮视频| 人人操人人爽人人爱| 香蕉AV777XXX色综合一区| 成人影视亚洲| 亚洲欧美成人网站| 懂色午夜福利一区二区三区| 91AV免费在线观看| 尻屄视频| 青青草原黄色视频| 日韩视频播放在线综合| 日韩无码影视| 2025最新偷拍| 超碰人人在线观看| 日韩精品一区二区三区四区| 先锋资源av在线| 日韩欧美视频一区国产欧美在线| 闺蜜av| 大地8免费高清视频观看大全 | 丝瓜视频| 日B免费视频| 蜜臀久久99精品久久久晴天影视 | 久热国产在线| 91久久精品无码一区二区三区| 一区二区三区无码区| 91性爱| 美日韩视频欧美一区二区视频| 青青草黄色视频| 黄片视频在线观看| 狠狠干伊人| 久久久久久国产免费A片| 激情丁香六月| 欧美一级日韩三级| 猫咪AV成人永久网站| 日韩1区2区| 国产综合久久| 亚洲精品成人无码AV在线| 在线中文字幕777| 亚洲欧洲免费| 偷拍内射| 国产精品一区二区视频| 亚洲精品久久久久毛片A级绿茶| 白虎高清无码大尺度免费在线观看 | 丁香久久| 精品超碰| 中国熟女视频| 无码黄色片| 五月天丁香花| 精品国产va久久久久久| 在线观看成年人视频| 日韩熟妇人妻中文字幕| 免费亚洲婷婷| 不卡不在线中文| 免费aaa| 亚洲国产91| 四川少妇bbbbbbbbb| 永久免费不卡在线观看黄网站| 草久在线视频| 日韩理论在线| 444444免费高清在线观看电视剧的注意| 国产精品成人无码| av在线天堂网| 骚妇一区| 手机看片日韩| 玖玖激情| 午夜亚洲AV永久无码精品麻豆| 日韩无码小电影| 露脸老熟女91集合| 鲁鲁鲁鲁鲁鲁鲁777777| 一区二区三区视频免费| 亚洲日韩欧美一区二区天天天| 高潮91PORN蝌蚪九色| 日韩在线视频观看| 北条麻妃无码精品| 日韩四区| 一级成人片在线观看| 亚洲欧美人妻| 这里只有精品在线观看| 国产精品久久一区二区三区影音先锋| 国产黄色一级片| 99热在线免费| 开心五月激情网| 久爱视频| 人人摸人人搞| AV免费播放| 怡春院欧美| 色婷婷中文在线| 91国黄色毛片在线观看| 黄色av免费在线观看| 影音先锋麻豆| 日韩AⅤ无码一区二区三区| www.91av| 蜜桃91视频| 国产在线观看免费| 天天干天天操天天爽| 影音先锋AV资源网站| 国产精品视频免费| 色老板亚洲| 日韩日韩日韩日韩| 精品无人区无码乱码毛片国产| 久久68| 一级女婬片A片AAAA片| 无码国产一区二区三区四区五区| 北条麻妃99精品青青久久| 人妻无码精品久久人妻成人| 午夜黄色视频| 日韩免费视频一区二区| 九九热re99re6在线精品| 亚洲成人一二三区| 日韩欧美国产黄色电影| 国产无码内射| 淫揉BBB揉揉揉BBBBB| 一区二区三区四区视频在线| 草逼视频免费看| 成人黄网站在线观看| 88AV视频| 伊人大香蕉综合| 中文无码在线视频| 日韩成人三级| 热久久伊人| 久草com| 超碰观看| 性爱视频91| 色九九| 中文字幕第五页| 丁香婷婷一区二区三区| 国产无套免费网站69| 91综合久久| av网站免费在线观看| 色播网址| 欧美日韩一区二区三区视频| 日本三级AAA三级AAAA97| 婷婷久久综合| 日本色综合| 国产成人免费在线观看| 北条麻妃高清无码| 男人的天堂视频网站| 日韩人妻AV| 91视频在| 一区二区三区四区五区| 中文资源在线观看| 久久久久亚洲AV无码成人片| 亚洲日韩网站在线观看| 内射学生妹视频| 亚洲午夜久久久之蝌蚪窝| 91视频在线看| 日韩中文字幕熟妇人妻| 中日韩欧美一级A片免费| 日韩视频无码| 亚洲五月婷| 一级黄色片视频| 五月婷久久| 国产啊啊啊啊| 日韩A片免费看| 在线观看的av网站| 欧美A片在线| 俺去俺来WWW色官方| 久久理论| 午夜福利小视频| 久久大奶| 黄色电影一区二区| 人人免费操| 97无码精品人妻一区二区三区| 俄罗斯白嫩BBwBBwBBw91| 五月天三级片| 欧美日韩中文字幕在线视频| 亚洲一区二区在线播放| 午夜神马影院| 日韩AV无码专区亚洲AV| www.日本黄色视频| 99久久精品国产一区二区成人| 青青操久久| 三个黑人猛躁我一晚上| 国产AV| AV在线一区二区| 中文字幕一区二区三区免费2023| 北条麻妃日B视频| 国产香蕉网| 成人免费网站| 18XXX亚洲HD护士JD| 操东北老女人| 亚洲一级片| 国产一级a毛一级a毛片视频黑人 | 久热这里只有| 成年人黄色视频| 手机看片亚洲| 69人妻人人澡人人爽久久| 日本一区二区三区在线观看网站| 操一区| 青青草亚洲| 免费三级网址| 黄色国产| 日韩三级AV在线观看| 九九九九九九国产| 夜夜无码| 影音先锋AV资源在线| 亚洲天堂在线看| 国产经典午夜福利视频合集| 午夜高清视频| 婷婷综合色| 大香蕉国产视频| 亚洲欧洲无码在线| 自拍一区在线观看| 成年视频在线观看| 欧美激情四射| 99久久婷婷国产综合精品漫| 亚洲第1页| 2025中文字幕| 成人激情视频| 99在线视频播放| 国产成人自拍网| 国产亚洲色婷婷久久99精品| 天堂а√在线中文在线新版| 色噜噜在线| 亚洲AV影院| 豆花网无码视频观看| 好好的日视频| 国产老骚逼| 99久久99久久| 久草这里只有精品| 日本天堂Tv视频在线观看| 国产精品视频久久久久| 69国产成人综合久久精品欧美 | 天天干天天舔| 亚洲热在线| 丰满人妻一区二区三区视频在线不卡 | 激情中文网| 日本一级片免费看| 自拍偷拍影音先锋| 欧美熟妇精品黑人巨大一二三区| 国产免费A片| 成人免费福利| 国产三级一区二区| 国产在线精品观看| 国产成人AⅤ| 97人妻碰碰中文无码久热丝袜| 免费福利视频网站| 高清无码专区| 另类日韩| 欧美一在线一综合| 青娱乐亚洲视频在线| 91丨九色丨蝌蚪丨丝袜| 不卡AV在线| 亚洲无码视频在线观看高清| 免费高清无码视频在线观看| 精品99999| 91在线播放视频| 国产黄色AV片| 婷婷无码成人精品俺来俺去| 五月天婷婷激情网| 欧洲激情网| 亚州精品成人片| 久久无码一区二区| 国产婷婷久久| 久久亚洲中文| 2025中文字幕在线| 小视频+福利| 天天操免费| 中文字幕成人影片| 内射在线| 黄片视频免费| 午夜激情毛片| 无码人妻精品一区二区三区99仓| 亚洲综合伊人| www.豆花社区成人| 天天插天天狠天天透| 日韩人妻丰满无码区A片| 无码人妻一区二区三区三| 无码AV免费观看| 91av电影| 97精品人妻一区二区三区香蕉农| 国产成人无码AⅤ片免费播放 | 欧美国产性爱| 亚洲小视频在线观看| 白丝久久| 四川少妇bbbbbbbbb| 无码国产精品一区二区免费96| 亚洲无码高清电影| 蜜臀久久99精品久久久兰草影视 | 国产高清无码一区二区| 中文视频免费播放| 国产精品久久久久久无人区| 大香蕉官网| 成人伊人AV| 人人干人人干人人干| 91精品无码| 91精品人妻一区二区三区四区| 日韩午夜成人电影| 影音先锋人妻资源| 北京熟妇搡BBBB搡BBBB| 日日撸夜夜撸| 国产乱子伦真实精品!| 亚洲精品无码久久久| 一级性生活视频| 91色秘乱码一区二区| 波多野结衣av在线| 粉嫩av一区二区白浆| 在线一区二区三区四区| 久久视频这里有精品| 激情久久婷婷| 天天干天天日蜜臀色欲av| 午夜褔利| 日韩无码人妻一区二区三区| 婷婷国产视频| 天天色图| 成人毛片AV无码| 日本黄色免费视频| 亚洲成人网站免费观看| 小h片在线观看| 亚洲精品白浆高清久久久久久| 人妻字幕| www.黄色av| 青青久操| 18禁无码网站| 激情五月丁香婷婷| 岛国无码AV在线观看| 亚洲人妻无码在线| 友田真希一级婬片A片| 欧美日韩综合| 欧美a∨| 精品91海角乱| 国产对白视频| 亚洲成人网站在线| 高清日韩欧美| 免费无码高清视频| 2024国产精品| 四虎在线观看| 亚洲肏屄网| 韩国精精品视频| 囯产精品99久久久久久WWW| 国产精品乱码毛片在线人与| 在线黄色AV| 人妻少妇中文字幕久久牛牛| 中文字幕人成人乱码亚洲电影| 日韩乱码| 成人91看片| 国产中文字幕第一页| 毛片网页| 蜜臀AV在线播放| 大地8免费高清视频观看大全 | 91视频网站在线观看| 色噜| 国产欧美日韩综合| 北条麻妃无码精品| 亚洲国产精品成人综合色在线婷婷| 东京热视频网| 国产嘿嘿| 91视频在线观看网| 美女黄色免费网站| 亚洲人人爱| 亚洲乱淫| 粉嫩99精品99久久久久| 久久久久久无码日韩欧美电影| 巜痴漢電車~凌脔版2| 亚洲黑人av| 亚洲操| 国产99久久九九精品无码免费| 看欧美黄片| 青娱乐亚洲自拍| 亚洲天堂在线视频播放| 99热在线观看| 日韩AV中文字幕在线| 午夜性爱网址| 中文字幕亚洲在线| 天天艹| 午夜激情操一操| v天堂在线| 激情五月天导航| 无码中文综合成熟精品AV电影| 亚洲日韩中文字幕在线观看| 玖玖资源网站| 三级影片在线观看性| 91水蜜桃| 69成人无码| 操操操综合| 中文字幕免费久久| 色婷婷影院| 乱伦视频91| 久色入口| 日本欧美国产| 亚洲欧洲免费| 日韩在线女优天天干| 加勒比日韩在线| 白浆在线| 成人在线免费电影| 亚洲天堂在线免费观看视频| 在线你懂的| 欧美日韩性爱| 国产在线观看91| 日韩无码一卡二卡| 中文字幕亚洲视频| 亚洲黄色小视频| 欧美高潮| 亚洲色婷婷久久精品AV蜜桃| 91女人18毛片水多国产| 在线播放一区| 97干视频| 国产91小视频| 内射网站| 日韩成人在线免费观看| 少妇厨房愉情理伦BD在线观看| 亚洲日本中文字幕在线| 蕉久中文字慕| 日韩免费高清无码| 波多野结衣无码高清视频| 国产免费性爱| 一道本视频在线免费观看| 少妇一级片| 一区日韩| 久操网址| 国产av播放| 日韩三级片网址| 欧美日韩狠狠操在线观看视频| 亚洲精品免费观看| 欧美精品一级片| 成人AV在线资源| 簧片网站免费| 亚洲乱码国产乱码精品天美传媒| 免费在线观看黄色视频网站| 香蕉三级片| 自拍偷拍精品视频| 91视频高清无码| 亚洲日韩国产中文字幕| 四虎影院人妻| 天天操夜夜爽| 操逼视频免费在线观看| 2018人人操| 成人aV无码精品国产一区二区| 少妇搡BBBB搡BBB搡小说| 亚洲女人天堂AV| 男人天堂中文字幕| 日本Sm/调教/捆绑/紧缚| 91探花视频精选在线播放| 精品人妻午夜一区二区三区四区| 91丨九色丨蝌蚪丨丝袜| 乱轮视频| 国产91在线拍揄自揄拍无码九色| 日韩一及| 成人做爱免费网站| 亚洲视屏| 欧美精品久久久久久| 欧美日韩一级视频| 无码成人A片在线观看| 国产成人三级| 黄片视频大全| 无码超碰| www.偷拍| 俄女兵一级婬片A片| 中国老女人操逼视频| 美女大香蕉| 狠狠干网站| 在线婷婷| 亚洲中文无码电影| 色香蕉网| 老妇槡BBBB| 国产一级片免费视频| 99在线精品视频在线观看| 欧美精品无码久久久精品酒店| 开心色色五月天| 99精品在线| 久操网站| 男女日逼| 18禁黄网站| 天天日天天干天天射| 日本A视频| 无码三级视频| 91内射|