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

同事問我:為什么我的Service無法注入進來?

開發(fā) 前端
本文借助一個開發(fā)時常見的問題進行分析,介紹了Spring的配置類解析與掃描過程,同時,還借助了Mybatis中的現(xiàn)象。

前言

同事火急火燎的走了過來,說:敖丙快幫我看看這個錯誤,啥情況啊?

我一看報錯:

Field xxxService in com.xx.xx.service.impl.XxXServiceImpl required a bean of type 'com.xx.xx.service.XxxService' that could not be found.

我其實已經(jīng)知道是啥情況了,但是怕他不知道,所以還是耐心的跟她解釋了一下,她聽完后說:能不能寫下來啊,免得我下次還會忘。

我這么有骨氣的人,想都不用想,于是就有了下文:

這個錯誤其實就是這個Bean在Spring容器中找不到,發(fā)生這種錯誤時,常見的有兩種情況:

1、@ComponentScan注解里的掃描路徑?jīng)]包含這個類

2、這個類的頭上沒加@Component注解

那么問題就來了:為什么@ComponentScan沒掃描到或者沒加@Component注解就注入不到Spring容器中?這個問題有點無厘頭(沒加@Component注解你還想注入到Spring容器中?)

我換種問法:為什么@ComponentScan掃描到了并且加了@Component注解就能注入到Spring容器中?

當然你可以直接回答:因為Spring規(guī)定這樣做的

當然我也會接著反問你:Mybatis的Mapper就沒用@Component注解,憑啥它就能注入到Spring容器中?

傻瓜,回答不了了吧?回答不了就趕緊往下看吧~

問題分析

要回答:為什么@ComponentScan掃描到了并且加了@Component注解就能注入到Spring容器中?

我們首先需要對問題進行拆解:

1、@ComponentScan掃描是做了什么?

2、加了@Component注解又代表了什么?

回答了這兩個問題我們再進行猜想:以上過程是否可以進行自定義?如何自定義?否則就沒有辦法說明Mapper是如何注入到Spring容器中的。

@ComponentScan掃描是做了什么?

這個過程大概是這樣的:Spring通過掃描指定包下的類,解析這些類的信息,轉化成為BeanDefinition,注冊到beanDefinitionMap中。

那么這個過程的詳情情況又是如何呢?

我們先來了解一下這個過程中涉及到的角色:

1、BeanDefinition:Bean定義,內(nèi)含Class的相關信息

2、ConfigurationClassPostProcessor:配置類處理器,查找配置類,創(chuàng)建配置類解析器

3、ConfigurationClassParser:配置類解析器,解析配置類,創(chuàng)建@ComponentScan注解解析器

4、ComponentScanAnnotationParser:@ComponentScan注解解析器,解析@ComponentScan注解,創(chuàng)建Bean定義掃描器

5、ClassPathBeanDefinitionScanner:Bean定義掃描器,掃描指定包下的所有類,將符合的類轉化為BeanDefinition

6、BeanDefinitionRegistry:BeanDefinition注冊器,注冊BeanDefinition

從上往下看,我們可以輕易的發(fā)現(xiàn),這整個過程有一種層層遞進的關系:

下面我們再來看看這些角色的具體職責。

1.配置類處理器

配置類處理器主要做了3件事

1、查找配置類

2、創(chuàng)建配置類解析器并調(diào)用

3、加載配置類解析器所返回的@Import與@Bean注解的類

1.1查找配置類

你可能會有疑惑,配置類不是我們傳入的嗎?為什么還需要去查找配置類呢?

這是因為Spring整個調(diào)用鏈路十分復雜,不可能說把配置類往下層層傳遞,而是一開始時就將配置類注冊到BeanDefinitonMap中了。

查找配置類大致有兩個過程:

1、從BeanFactory中獲取到所有的BeanDefiniton信息

2、判斷BeanDefiniton是否為配置類

第一步很好解決,所有的BeanDefiniton是放在BeanFactory的BeanDefinitonMap中,直接從中獲取就可以了。

而對于第二點,首先我們要知道什么是配置類?

在Spring中,有兩種配置類:

1、full類型:標識了@Configuration注解的類

2、lite類型:標識了@Component @ComponentScan @Import @ImportResource @Bean 注解的類(其中之一就行)

他們唯一的區(qū)別就在于:full類型的類會在后置處理步驟中進行動態(tài)代理

還記得這個例子嘛?

問:Wheel對象在Spring啟動時,被new了幾次?

@Configuraiton
public class MyConfiguration{
@Bean
public Car car(){
return new Car(wheel());
}
@Bean
public Wheel wheel(){
return new Wheel();
}
}

答案是一次,因為MyConfiguration對象實際上會被進行cglib動態(tài)代理,所以就算被this.的方式調(diào)用依舊會觸發(fā)代理邏輯

只有在這個情況下是這樣,平常我們進行cglib代理時this調(diào)用依舊直接調(diào)用本類方法。

當查找出所有的配置類信息之后,緊接著就是創(chuàng)建配置類解析器,并將所有的配置類交由配置類解析器進行解析

1.2流程圖

2.配置類解析器

配置類解析器的職責如下

1、判斷該類是否應該跳過解析

2、解析內(nèi)部類信息

3、解析@PropertySources注解信息

4、解析@ComponentScan注解信息

5、解析@Import注解信息

6、解析@Bean注解信息

2.1判斷該類是否應該跳過解析

所謂判斷類是否應該跳過解析,其實就是判斷類是否標識了@Conditional注解并且是否滿足該條件。如果標識了該注解并且不滿足條件,那么則跳過解析步驟。

如我們常見的@Profile,@ConditionalOnMissBean等都是由此控制。

2.2解析內(nèi)部類信息

有時候我們的配置類里面有內(nèi)部類,并且內(nèi)部類也是個配置類,那么就需要用此方式進行解析。

2.3解析@ComponentScan注解信息

該步驟主要是利用**@ComponentScan注解解析器進行解析@ComponentScan注解,從而獲取到BeanDefinition列表,再判斷這些BeanDefinition是否是個配置類,是則再次調(diào)用配置類解析器**進行遞歸解析。

流程圖

3.@ComponentScan注解解析器

在該步驟中,Spring會將我們配置在@ComponentScan注解上的所有信息提取出來,存入到Bean定義掃描器中,再利用Bean定義掃描器得到符合條件的BeanDefiniton。

excludeFilter和includeFilter用于掃描時判斷class是否符合要求。

默認的excludeFilter:掃描時排除掉自己這個class

默認的includeFilter: 掃描時判斷該class是否標識@Component注解

4.Bean定義掃描器

BeanDefinitionScanner主要做了三件事:

1、掃描包路徑下的類

2、給BeanDefiniton設值

3、使用BeanDefinition注冊器將BeanDefiniton注冊到容器中

4.1掃描包路徑下的類

掃描包路徑的步驟可以簡單理解為遍歷class文件的過程,遍歷包下的每個class,判斷該class是否滿足條件——標識了@Component注解,將滿足條件的class轉化為BeanDefiniton,此時BeanDefiniton只有metedata信息,還沒有具體設值。

4.2給BeanDefiniton設值

如果我們在類上加了類似這些注解:@Lazy @Primary @DependsOn,那么就需要將這些注解轉化為實際的屬性設到BeanDefiniton中。

4.3流程圖

5.BeanDefinition注冊器

BeanDefinitionRegistry的作用就是將BeanDefiniton放到BeanDefinitonMap中

思考

現(xiàn)在我們已經(jīng)知道了掃描包的整體過程,再來回顧一下這個問題:Mybatis的Mapper是怎么注入到Spring容器中的?

像這種問題咋一看很難理解,常常在面試的情況發(fā)生,因為面試官是拿著答案問問題。

但是我們思考的話,就應該換個角度:怎么才能讓Mapper注冊到Spring中 -> 怎么才能讓自定義的注解標識的Class注冊到Spring中?

不知道這樣問是否簡單些呢?

方法

1.使用TypeFilter

我們知道@Component注解是和默認注冊的IncludeFilter配套使用的,那么同樣我們也可以使用一個自定義的IncludeFilter與我們的自定義注解配套使用

自定義Mapper注解

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Mapper {
}

使用Mapper

@Mapper
public class MyMapper {

public void hello(){
System.out.println("myMapper hello");
}
}

測試

添加一個自定義的IncludeFilter進行測試

**注意:**此方式只能支持自定義注解標識在實體類的情況,如果將Mapper注解加在接口上,則你會收獲一個異常:No bean named 'myMapper' available

答案很簡單,因為接口不能實例化,所以Spring默認判斷如果該類非實體類,則不注冊到容器中。

那么我們怎么才能讓加了Mapper注解的接口能注冊到Spring中呢?

2.自定義掃描器

既然Spring的掃描器無法支持接口,那么我們就重寫它——的判斷邏輯。

開源框架擴展心得:繼承整體邏輯,重寫一小塊邏輯。

所以我們方式很簡單:繼承ClassPathBeanDefinitionScanner,重寫判斷Class是否符合的邏輯

public class ClassPathMapperScanner extends ClassPathBeanDefinitionScanner {

@Override
protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
// 重寫判斷beanDefinition是否為接口邏輯,改為只有類為接口時才允許注冊
return beanDefinition.getMetadata().isInterface() && beanDefinition.getMetadata().isIndependent();
}
//省略構造方法
}

邏輯已經(jīng)改好了,現(xiàn)在迎來一個新問題:怎么讓Spring使用它?

通過整體流程我們知道,Bean定義掃描器是在**@ComponentScan注解解析器**的解析流程中創(chuàng)建(new)出來的,我們又不能更改這個流程,所以, Game Over?

但,為什么一定要在Spring的掃描流程中使用我們的掃描器呢?我們可以在Spring的掃描流程結束后,再掃描一遍不就好了嗎?

還記得有什么方式可以做到這件事嗎?后置處理器!

3.使用后置處理器

我們通過使用BeanDefinitionRegistryPostProcessor,讓Spring的掃描流程結束之后,進行一次后置處理。在后置處理中,創(chuàng)建出自定義的掃描器,進行第二次掃描。

@Component
public class MapperScannerProcessor implements BeanDefinitionRegistryPostProcessor {

@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
// 創(chuàng)建出自定義的掃描器
ClassPathMapperScanner classPathMapperScanner = new ClassPathMapperScanner(registry, false);
// 添加filter,class添加了Mapper注解才注冊到Spring中
classPathMapperScanner.addIncludeFilter(new AnnotationTypeFilter(Mapper.class));
// 這里可以改為從外部設值,不必寫死
classPathMapperScanner.scan("com.my.spring.test.custom");
}
}

使用這種方式,你會發(fā)現(xiàn),我們的接口確實注冊到BeanDefinitionMap中了。

但是,你仍然會收到一個錯誤:Failed to instantiate [com.my.spring.test.custom.InterfaceMapper]: Specified class is an interface

接口確實是無法實例化的,雖然我們把它注冊到了Spring中。但Mybatis又是怎么做的呢?

答案是替換,Mybatis將圖中的beanClass替換成了FactoryBean: MapperFactoryBean,然后將原有的beanClass放入了它的mapperInterface屬性中

它的getObject方法長這樣

public T getObject() throws Exception {
return getSqlSession().getMapper(this.mapperInterface);
}

如果你還記得Mybatis的原始使用方式,應該對這行代碼并不陌生。

好了,關于思考的內(nèi)容就到這里,我們只是借用Mybatis的現(xiàn)象進行思考,再深入就是Mybatis的內(nèi)容了。

小結

本文借助一個開發(fā)時常見的問題進行分析,介紹了Spring的配置類解析與掃描過程,同時,還借助了Mybatis中的現(xiàn)象,思考怎么才能讓自定義的注解標識Class注冊到Spring中這一問題,并使用案例給出了一份較好的答案,希望大家能夠通過案例更加深入的了解該流程。

同樣,通過本次學習,來回答一下以下問題吧

1、什么是配置類?Spring中有哪幾種配置類?有什么區(qū)別?

2、BeanDefinitionRegistryPostProcessor有什么用?你知道哪些案例嗎?

你是不是心里想,好家伙敖丙還學會留可課后作業(yè)了?

責任編輯:姜華 來源: 敖丙
相關推薦

2021-06-28 07:13:35

SQL語句索引

2020-07-31 08:06:39

MySQL遞歸查詢

2022-03-15 07:58:31

SQL風險字符串

2021-05-31 09:23:43

iCloudMac同步

2020-10-15 09:35:27

亂碼UTF-8GBK

2020-12-04 09:11:50

CTOAPI網(wǎng)關

2023-01-31 07:42:29

代碼JDKMaven

2021-12-17 17:52:02

MySQL B+面試

2018-06-24 08:07:29

數(shù)據(jù)科學商業(yè)化大數(shù)據(jù)

2012-04-04 22:07:12

Android

2012-02-28 09:11:51

語言Lua

2020-07-17 14:06:36

Scrum敏捷團隊

2020-08-14 09:11:29

RedisQPS數(shù)據(jù)庫

2016-06-14 09:48:19

框架

2018-12-27 09:10:45

2021-10-25 08:49:32

索引數(shù)據(jù)庫MySQL

2023-07-14 12:21:29

流程@Autowired方法

2022-03-23 08:01:04

Python語言代碼

2016-02-25 18:10:16

WiFi信號WiFi

2019-08-28 10:53:35

JavaScriptOptional Ch代碼
點贊
收藏

51CTO技術棧公眾號

黑人另类av| 国产午夜亚洲精品理论片色戒 | 日韩黄色一区二区| 亚洲性图自拍| 亚洲另类自拍| 日本高清免费不卡视频| 国产精品天天狠天天看| 折磨小男生性器羞耻的故事| 91精品国产黑色瑜伽裤| 蜜桃视频一区二区三区| 久久精品国产成人精品| 在线观看你懂的视频| 理论片午夜视频在线观看| 91蝌蚪porny| 国产在线精品播放| 美国一级片在线观看| 欧美激情三级| 久久久久久久精| 91精品久久久久久综合乱菊 | 亚洲精品写真福利| 国产一区二区三区四区hd| 337p粉嫩色噜噜噜大肥臀| 91成人免费| 亚洲久久久久久久久久久| 91社在线播放| 一区二区三区视频免费看| 永久免费毛片在线播放| 国产精品亚洲一区二区三区妖精| 亚洲精品日韩丝袜精品| 最新天堂中文在线| 丁香花电影在线观看完整版 | 国产三级短视频| 欧美日韩黄色| 91国偷自产一区二区使用方法| 异国色恋浪漫潭| 亚洲第一免费视频| 精品少妇av| 欧美刺激午夜性久久久久久久| 97超碰青青草| av电影免费在线观看| 久久综合狠狠综合久久综合88 | www.久久色.com| 欧美无人区码suv| 在线中文字幕-区二区三区四区| 91亚洲精品乱码久久久久久蜜桃| 欧美成人免费全部观看天天性色| 欧美丰满熟妇bbb久久久| 成人mm视频在线观看| 99免费精品在线观看| 久久999免费视频| 超碰中文字幕在线观看| 亚洲黄色免费av| 亚洲激情在线播放| 国产富婆一区二区三区| 免费一级片视频| 亚洲三区欧美一区国产二区| 色94色欧美sute亚洲线路二| 99久久国产综合精品五月天喷水| 国产夫绿帽单男3p精品视频| 久久超碰97人人做人人爱| 久久九九亚洲综合| 国产精久久一区二区三区| 成人亚洲免费| 夜夜精品浪潮av一区二区三区| 国产伦理一区二区三区| 中文字幕五月天| 成午夜精品一区二区三区软件| 欧美丰满少妇xxxxx高潮对白| www.xxx亚洲| 五月婷婷在线观看| 国产精品一区二区久久不卡 | 亚洲国产福利| 激情懂色av一区av二区av| 日本阿v视频在线观看| 深夜国产在线播放| 夜夜精品视频一区二区 | 一二三区精品| 亚洲精选一区二区| 欧洲熟妇的性久久久久久| 日韩在线网址| 欧美精品一区二区三区蜜桃视频| 奇米777在线| 久久99成人| 欧美xxxxxxxx| 好吊日免费视频| 精品美女视频| 亚洲片在线资源| 午夜剧场在线免费观看| 91九色美女在线视频| 亚洲福中文字幕伊人影院| 欧美成人精品免费| 亚洲91av| 一区二区三区四区在线播放| 成年人看的毛片| 亚洲最大成人| 欧美手机在线视频| 妞干网视频在线观看| 色网站在线免费观看| 国产精品99久久久久久有的能看 | 国产精品一区二区亚洲| 日韩精品2区| 一色桃子一区二区| 久久精品一区二区三区四区五区 | 国产成人高清在线| 26uuu国产精品视频| 日韩福利在线视频| 在线看片不卡| 国产亚洲精品久久久久动| 国产第一页精品| 欧美精品一级| 国产成人一区二区在线| 精品亚洲永久免费| 日韩欧美一区二区三区免费看| 中文国产成人精品| 免费看黄色aaaaaa 片| 欧美激情在线精品一区二区三区| 久久精品一本久久99精品| 日韩高清免费av| 麻豆精品一区二区av白丝在线| 动漫美女被爆操久久久| 激情小说 在线视频| 亚洲乱码精品一二三四区日韩在线| 97超碰在线人人| 日韩中文视频| 欧美精品一区二区三区蜜桃 | 久久久亚洲精品石原莉奈| 一区二区三区日韩视频| 天堂av中文在线观看| 3atv在线一区二区三区| 无码人妻精品一区二区三区温州| 欧美成熟视频| 国产精品美女999| 色欲久久久天天天综合网 | www.日本高清视频| 综合激情婷婷| 国产欧美日韩亚洲精品| 美国成人毛片| 精品欧美国产一区二区三区| 肉色超薄丝袜脚交| 福利一区二区免费视频| 91精品国产色综合久久不卡电影| 182午夜在线观看| 欧美调教网站| 午夜精品久久久久久久久久久久| 97国产精品久久久| 国产精品情趣视频| 欧洲av无码放荡人妇网站| 日韩不卡在线视频| 色偷偷偷综合中文字幕;dd| 在线免费看黄视频| 禁久久精品乱码| 51国偷自产一区二区三区 | 日韩影片在线观看| 久热在线中文字幕色999舞| 亚洲一区二区三区高清视频| 国产亚洲欧美色| 国产精品人人妻人人爽人人牛| 欧洲大片精品免费永久看nba| 日韩在线观看你懂的| 亚洲国产无线乱码在线观看| 久久久久久综合| 国产91xxx| 悠悠资源网亚洲青| 日韩精品在线观看视频| 91九色丨porny丨肉丝| av亚洲产国偷v产偷v自拍| 人人妻人人做人人爽| 91大神精品| 国内精品久久久久久久久| 亚洲精品国产av| 亚洲午夜精品久久久久久久久| 成人免费观看在线| 亚洲一区网址| 欧美激情三级免费| 人妻精品无码一区二区| 香蕉成人啪国产精品视频综合网| 亚洲中文字幕久久精品无码喷水 | 国产精品日本一区二区 | 午夜精品久久久99热福利| 超碰人人人人人人| 99re这里只有精品视频首页| 国产精品自拍片| 九九视频免费观看视频精品| 国产精品免费在线免费| 免费网站成人| 狠狠综合久久av一区二区小说| 污污内射在线观看一区二区少妇| 99综合精品| 韩日午夜在线资源一区二区 | 亚洲免费黄色网| 91精品91| 精品国产二区在线| 国产精品高潮久久| 日韩中文在线视频| 国产丝袜视频在线观看| 精品久久久国产| 一级二级黄色片| 国产高清无密码一区二区三区| www..com日韩| 欧美日韩久久精品| 国产精品二区在线观看| 欧美极品影院| 在线中文字幕日韩| www.av导航| 在线精品亚洲一区二区不卡| 极品久久久久久| 本田岬高潮一区二区三区| 能在线观看的av网站| 一区二区电影| 久久爱av电影| 国产精品99久久免费| 欧美与黑人午夜性猛交久久久| 91se在线| 亚洲福利视频在线| 手机在线免费看片| 成人高清免费观看| 中国黄色片一级| 国产尤物视频在线| 91福利区一区二区三区| 来吧亚洲综合网| 91欧美一区二区| 宇都宫紫苑在线播放| 美女国产精品| 国产主播欧美精品| missav|免费高清av在线看| 在线观看欧美日韩国产| 免费国产精品视频| 91麻豆精品国产91久久久久| 男人天堂2024| 成人91在线观看| 日韩在线一区视频| 老**午夜毛片一区二区三区 | 久久久资源网| 精品人伦一区二区色婷婷| 天天干天天干天天操| 亚洲欧美精品午睡沙发| 精品人妻一区二区三区蜜桃视频| 国产成人精品影视| 欧美一级小视频| 蜜桃av一区二区在线观看| 欧美 日本 亚洲| 亚洲欧美综合久久久| 日韩欧美第二区在线观看| 日韩三级毛片| 国产成人免费电影| 欧美日韩国产一区二区在线观看| 成人a在线观看| 精品自拍视频| 欧洲日韩成人av| 欧美gv在线| 97在线免费视频| 三级外国片在线观看视频| 亚洲日本成人女熟在线观看| 视频在线不卡| 福利一区福利二区微拍刺激| 婷婷色中文字幕| 亚洲色图欧洲色图| 欧美黄色一级生活片| 久久亚洲精品国产精品紫薇| 丝袜美腿中文字幕| 成人激情免费网站| bl动漫在线观看| 不卡av在线网| 少妇光屁股影院| aaaaa黄色片| 久久欧美肥婆一二区| 日韩av片在线看| 蜜臀国产一区二区三区在线播放| www.夜夜爽| 国产福利一区二区三区视频在线 | 真实新婚偷拍xxxxx| 欧美影院精品一区| 国产精品久久免费| 日韩精品一区国产麻豆| 亚洲aⅴ乱码精品成人区| 色狠狠色狠狠综合| 中国a一片一级一片| 337p亚洲精品色噜噜噜| 成人小说亚洲一区二区三区| 亚洲精品国偷自产在线99热| www.av在线播放| 另类少妇人与禽zozz0性伦| 蜜臀av国内免费精品久久久夜夜| 91高清视频免费观看| 51一区二区三区| av一区二区在线看| 免费久久精品| 青青草免费在线视频观看| 一区二区国产精品| 永久免费的av网站| www.亚洲人| 老司机精品免费视频| 亚洲一区欧美一区| 中文字幕永久在线| 精品国产一区久久| 香蕉视频网站在线观看| 国内精品久久久久伊人av| 国产精品久久久久久久久久齐齐 | 欧美日韩一区二区三区在线电影 | 国产精品v欧美精品v日韩| 精品国产乱码久久久| 成年人深夜视频| 日本不卡不码高清免费观看| 免费黄色在线播放| 国产精品丝袜在线| 日韩激情在线播放| 欧美一区2区视频在线观看| 免费人成在线观看网站| 欧美精品久久一区二区| 久久精品97| 免费一区二区三区| 韩国av一区| 久久精品国产99久久99久久久| 久久―日本道色综合久久| 久久亚洲国产成人精品性色| 欧美日韩成人综合在线一区二区| 天堂视频中文在线| 欧美激情视频在线免费观看 欧美视频免费一 | 超碰在线97免费| 日日夜夜免费精品视频| 国产精品无码一本二本三本色| 国产成人精品一区二区三区四区| 欧美激情视频二区| 色婷婷亚洲精品| 五月婷婷丁香六月| 久久综合久久美利坚合众国| 日本肉肉一区| 欧美一区二区三区在线免费观看| 国产精品嫩草影院在线看| 性一交一乱一伧国产女士spa| 韩国av一区二区三区四区| 中文字幕av一区二区三区人妻少妇| 亚洲国产精品成人综合 | 91精品国产自产| 亚洲国产另类精品专区| 亚洲乱码在线观看| 欧美猛交免费看| 国产免费区一区二区三视频免费 | 黄色片网站免费| 欧美日韩在线视频一区| 日本美女一级视频| 91精品国产九九九久久久亚洲| avtt综合网| 久久久久久www| 成人h动漫精品一区二| 日本三级理论片| 亚洲第一色在线| 蜜桃视频在线观看播放| 国产一区二区免费电影| 亚洲高清不卡| 亚洲狠狠婷婷综合久久久久图片| 精品久久久久久久久久久久久| 天天舔天天干天天操| 97在线视频免费观看| 日韩动漫一区| 成人在线观看a| 欧美国产一区视频在线观看| 中文亚洲av片在线观看| 久久精品亚洲热| 88久久精品| 国内自拍在线观看| 国产三级一区二区| 国产又大又长又粗| 欧美精品性视频| 秋霞影视一区二区三区| 日韩毛片在线免费看| 日本一区二区在线不卡| 亚洲性生活大片| 欧美成人精品三级在线观看| 成午夜精品一区二区三区软件| 无码aⅴ精品一区二区三区浪潮| 久久久久久9999| 一级片视频播放| 欧美高跟鞋交xxxxhd| 日韩理论电影中文字幕| 久久久精品麻豆| 亚洲精品欧美综合四区| 天天躁日日躁狠狠躁伊人| 日韩美女免费观看| 91综合在线| 欧美xxxxx精品| 在线观看国产精品网站| 国产成人无吗| 久久国产精品一区二区三区| 免费在线观看视频一区| 久久成人国产精品入口| 亚洲欧美综合另类中字| 国产午夜精品一区在线观看| 老太脱裤让老头玩ⅹxxxx| 国产女主播一区| 亚洲xxx在线| 国产精品入口日韩视频大尺度| 国内在线观看一区二区三区| 好吊视频在线观看| 日韩一区二区免费在线观看| 一区二区高清不卡| 国产精品免费视频一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久久久久久久久久久久久久久| 国产亚洲精品va在线观看|