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

去字節面試,直接讓人出門左拐:Bean 生命周期都不知道!

開發 架構
IoC 很好地體現了面向對象設計法則之一 —— 好萊塢法則:“別找我們,我們找你”,即由 IoC 容器幫對象找相應的依賴對象并注入,而不是由對象主動去找。

大家好,我是樓仔!

Spring Bean 的生命周期,面試時非常容易問,這不,前段時間就有個粉絲去字節面試,因為不會回答這個問題,一面都沒有過。

如果只講基礎知識,感覺和網上大多數文章沒有區別,但是我又想寫得稍微深入一點。

考慮很多同學不喜歡看源碼,我就把文章分為 2 大部分,前面是基礎知識,主要方便大家面試和學習,后面是源碼部分,對源碼感興趣的同學可以繼續往后面看。

圖片

1. 基礎知識

1.1 什么是 IoC ?

IoC,控制反轉,想必大家都知道,所謂的控制反轉,就是把 new 對象的權利交給容器,所有的對象都被容器控制,這就叫所謂的控制反轉。

IoC 很好地體現了面向對象設計法則之一 —— 好萊塢法則:“別找我們,我們找你”,即由 IoC 容器幫對象找相應的依賴對象并注入,而不是由對象主動去找。

理解好 IoC 的關鍵是要明確 “誰控制誰,控制什么,為何是反轉(有反轉就應該有正轉了),哪些方面反轉了”。

圖片

誰控制誰,控制什么?

傳統 Java SE 程序設計,我們直接在對象內部通過 new 進行創建對象,是程序主動去創建依賴對象。而 IoC 是由專門一個容器來創建這些對象,即由 IoC 容器來控制對象的創建。

  • 誰控制誰?當然是 IoC 容器控制了對象;
  • 控制什么?主要控制了外部資源獲取(不只是對象,比如包括文件等)。

為何是反轉,哪些方面反轉了?

有反轉就有正轉,傳統應用程序是由我們自己在對象中主動控制去直接獲取依賴對象,也就是正轉,而反轉則是由容器來幫忙創建及注入依賴對象。

  • 為何是反轉?因為由容器幫我們查找及注入依賴對象,對象只是被動的接受依賴對象,所以是反轉;
  • 哪些方面反轉了?依賴對象的獲取被反轉了。

1.2 Bean 生命周期

對 Prototype Bean 來說,當用戶 getBean 獲得 Prototype Bean 的實例后,IOC 容器就不再對當前實例進行管理,而是把管理權交由用戶,此后再 getBean 生成的是新的實例。

所以我們描述 Bean 的生命周期,都是指的 Singleton Bean。

圖片

Bean 生命周期過程:

  • 實例化:第 1 步,實例化一個 Bean 對象;
  • 屬性賦值:第 2 步,為 Bean 設置相關屬性和依賴;
  • 初始化:初始化的階段的步驟比較多,5、6 步是真正的初始化,第 3、4 步為在初始化前執行,第 7 步在初始化后執行,初始化完成之后,Bean 就可以被使用了;
  • 銷毀:第 8~10 步,第 8 步其實也可以算到銷毀階段,但不是真正意義上的銷毀,而是先在使用前注冊了銷毀的相關調用接口,為了后面第 9、10 步真正銷毀 Bean 時再執行相應的方法。

整個執行流程稍微有些抽象,下面我們通過代碼,來演示執行流程。

1.3 執行流程

創建一個 LouzaiBean。

public class LouzaiBean implements InitializingBean, BeanFactoryAware, BeanNameAware, DisposableBean {

/**
* 姓名
*/
private String name;

public LouzaiBean() {
System.out.println("1.調用構造方法:我出生了!");
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
System.out.println("2.設置屬性:我的名字叫"+name);
}

@Override
public void setBeanName(String s) {
System.out.println("3.調用BeanNameAware#setBeanName方法:我要上學了,起了個學名");
}

@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
System.out.println("4.調用BeanFactoryAware#setBeanFactory方法:選好學校了");
}

@Override
public void afterPropertiesSet() throws Exception {
System.out.println("6.InitializingBean#afterPropertiesSet方法:入學登記");
}

public void init() {
System.out.println("7.自定義init方法:努力上學ing");
}

@Override
public void destroy() throws Exception {
System.out.println("9.DisposableBean#destroy方法:平淡的一生落幕了");
}

public void destroyMethod() {
System.out.println("10.自定義destroy方法:睡了,別想叫醒我");
}

public void work(){
System.out.println("Bean使用中:工作,只有對社會沒有用的人才放假。。");
}
}

自定義一個后處理器 MyBeanPostProcessor。

public class MyBeanPostProcessor implements BeanPostProcessor {

@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("5.BeanPostProcessor.postProcessBeforeInitialization方法:到學校報名啦");
return bean;
}

@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("8.BeanPostProcessor#postProcessAfterInitialization方法:終于畢業,拿到畢業證啦!");
return bean;
}
}

applicationContext.xml 配置文件(部分)。

<bean name="myBeanPostProcessor" class="demo.MyBeanPostProcessor" />
<bean name="louzaiBean" class="demo.LouzaiBean"
init-method="init" destroy-method="destroyMethod">
<property name="name" value="樓仔" />
</bean>

測試入口:

public class MyTest {
public static void main(String[] args) {
ApplicationContext context =new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
LouzaiBean louzaiBean = (LouzaiBean) context.getBean("louzaiBean");
louzaiBean.work();
((ClassPathXmlApplicationContext) context).destroy();
}
}

執行結果:

1.調用構造方法:我出生了!
2.設置屬性:我的名字叫樓仔
3.調用BeanNameAware#setBeanName方法:我要上學了,起了個學名
4.調用BeanFactoryAware#setBeanFactory方法:選好學校了
5.BeanPostProcessor.postProcessBeforeInitialization方法:到學校報名啦
6.InitializingBean#afterPropertiesSet方法:入學登記
7.自定義init方法:努力上學ing
8.BeanPostProcessor#postProcessAfterInitialization方法:終于畢業,拿到畢業證啦!
Bean使用中:工作,只有對社會沒有用的人才放假。。
9.DisposableBean#destroy方法:平淡的一生落幕了
10.自定義destroy方法:睡了,別想叫醒我

這個流程非常清晰,Bean 生命周期流程圖能完全對應起來。

1.4 擴展方法

我們發現,整個生命周期有很多擴展過程,大致可以分為 4 類:

  • Aware 接口:讓 Bean 能拿到容器的一些資源,例如 BeanNameAware 的setBeanName(),BeanFactoryAware 的setBeanFactory();
  • 后處理器:進行一些前置和后置的處理,例如 BeanPostProcessor 的postProcessBeforeInitialization()和postProcessAfterInitialization();
  • 生命周期接口:定義初始化方法和銷毀方法的,例如 InitializingBean 的afterPropertiesSet(),以及 DisposableBean 的destroy();
  • 配置生命周期方法:可以通過配置文件,自定義初始化和銷毀方法,例如配置文件配置的init()和destroyMethod()。

2. 源碼解讀

注意:Spring 的版本是 5.2.15.RELEASE,否則和我的代碼不一樣!!!

上面的知識,網上其實都有,下面才是我們的重頭戲,讓你跟著我走一遍代碼流程。

2.1 代碼入口

圖片

圖片

這里需要多跑幾次,把前面的 beanName 跳過去,只看 louzaiBean。

圖片

圖片

進入 doGetBean(),從 getSingleton() 沒有找到對象,進入創建 Bean 的邏輯。

圖片

圖片

2.2 實例化

進入 doCreateBean() 后,調用 createBeanInstance()。

圖片

進入 createBeanInstance() 后,調用 instantiateBean()。

圖片

圖片

圖片

圖片

圖片

走進示例 LouzaiBean 的方法,實例化 LouzaiBean。

圖片

2.3 屬性賦值

再回到 doCreateBean(),繼續往后走,進入 populateBean()。

這個方法非常重要,里面其實就是依賴注入的邏輯,不過這個不是我們今天的重點,大家如果對依賴注入和循環依賴感興趣,可以翻閱我之前的文章。

圖片

進入 populateBean() 后,執行 applyPropertyValues()

圖片

進入 applyPropertyValues(),執行 bw.setPropertyValues()

圖片

圖片

圖片

圖片

進入 processLocalProperty(),執行 ph.setValue()。

圖片

圖片

圖片

走進示例 LouzaiBean 的方法,給 LouzaiBean 賦值 name。

圖片

到這里,populateBean() 就執行完畢,下面開始初始化 Bean。

2.4 初始化

我們繼續回到 doCreateBean(),往后執行 initializeBean()。

圖片

圖片

圖片

走進示例 LouzaiBean 的方法,給 LouzaiBean 設置 BeanName。

圖片

回到 invokeAwareMethods()。

圖片

走進示例 LouzaiBean 的方法,給 LouzaiBean 設置 BeanFactory。

圖片

第一次回到 initializeBean(),執行下面邏輯。

圖片

這里需要多循環幾次,找到 MyBeanPostProcessor 的策略方法。

圖片

我們自己定義的后置處理方法。

圖片

第二次回到 initializeBean(),執行下面邏輯。

圖片

圖片

走進示例 LouzaiBean 的方法,執行 afterPropertiesSet()。

圖片

返回 invokeInitMethods(),執行下面邏輯。

圖片

進入 invokeCustomInitMethod(),執行下面邏輯。

圖片

走進示例 LouzaiBean 的方法,執行 init()。

圖片

第三次回到 initializeBean(),執行下面邏輯。

圖片

圖片

我們自己定義的后置處理方法。

圖片

到這里,初始化的流程全部結束,都是圍繞 initializeBean() 展開。

2.4 銷毀

當 louzaiBean 生成后,后面開始執行銷毀操作,整個流程就比較簡單。

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

圖片

走進示例 LouzaiBean 的方法,執行 destroy()。

圖片

回到 destroy(),執行下面邏輯。

圖片

圖片

圖片

走進示例 LouzaiBean 的方法,執行 destroyMethod()。

圖片

到這里,所有的流程全部結束,文章詳細描述所有的代碼邏輯流轉,你可以完全根據上面的邏輯,自己 debug 一遍。

3. 寫在最后

我們再回顧一下幾個重要的方法:

  • doCreateBean():這個是入口;
  • createBeanInstance():用來初始化 Bean,里面會調用對象的構造方法;
  • populateBean():屬性對象的依賴注入,以及成員變量初始化;
  • initializeBean():里面有 4 個方法,

先執行 aware 的 BeanNameAware、BeanFactoryAware 接口;

再執行 BeanPostProcessor 前置接口;

然后執行 InitializingBean 接口,以及配置的 init();

最后執行 BeanPostProcessor 的后置接口。

destory():先執行 DisposableBean 接口,再執行配置的 destroyMethod()。

對于 populateBean(),里面的核心其實是對象的依賴注入,這里也是常考的知識點,比如循環依賴,大家如果對這塊也感興趣,可以私下和我交流。

今天的源碼解析就到這,Spring 相關的源碼,還有哪些是大家想學習的呢,可以給樓仔留言。

這篇文章肝了我一個星期,原創不易,大家的點贊和分享,是我繼續創作的最大動力!

參考文章

三分惡的《Spring Bean生命周期,好像人的一生。。》:https://juejin.cn/post/7075168883744718856

責任編輯:武曉燕 來源: 樓仔
相關推薦

2020-05-22 08:11:48

線程池JVM面試

2023-03-30 07:34:10

Linux性能數據結構

2020-12-21 09:00:04

MySQL緩存SQL

2020-12-21 09:44:53

MySQL查詢緩存數據庫

2021-12-08 11:18:21

Spring Bean面試題生命周期

2018-10-17 14:50:08

2022-10-19 23:28:55

Spring生命周期Bean

2022-09-05 07:06:59

BeanSpring

2024-05-28 07:55:31

SpringBean用域

2023-12-28 09:59:37

Spring容器XML

2025-02-18 00:05:00

2020-07-29 09:53:09

VSCode編碼工具插件

2023-01-13 16:48:48

前端開發JavaScript

2021-11-12 10:05:19

跳表BAT面試

2021-07-22 09:28:35

DockerLinux命令

2024-10-22 09:03:35

前端signalAPI

2015-07-08 16:28:23

weak生命周期

2020-02-10 19:34:12

生命周期流程流程圖

2025-02-04 17:33:00

2022-06-19 14:38:55

Python
點贊
收藏

51CTO技術棧公眾號

国产精品天美传媒| 日韩黄色免费电影| 亚洲精美色品网站| 97视频在线免费播放| 成人免费在线电影| 国产真实乱子伦精品视频| 久久免费视频在线观看| 人人人妻人人澡人人爽欧美一区| 亚洲网站免费| 偷拍日韩校园综合在线| 亚洲国产精品www| 韩国av免费在线| 久久一二三区| 欧美黑人xxx| 五月婷婷欧美激情| 美国成人xxx| 欧美久久久一区| 欧美二区在线视频| 2024最新电影免费在线观看| 91女神在线视频| 91黄在线观看| www.久久网| 亚洲激情不卡| 欧美超级免费视 在线| 亚洲人成人无码网www国产| 136福利精品导航| 欧美三级韩国三级日本三斤 | 午夜精彩国产免费不卡不顿大片| 亚洲精品视频网上网址在线观看| 国产精品二区视频| 日本午夜精品久久久久| 日本韩国欧美在线| 青青草精品视频在线| h片在线免费| 国产精品久久久久一区二区三区 | 6080yy精品一区二区三区| 潘金莲一级黄色片| 中文有码一区| 亚洲黄页网在线观看| 男生和女生一起差差差视频| 久久精品xxxxx| 日韩欧美在线视频观看| 国产欧美日韩网站| 成人在线高清免费| 一区二区三区在线观看国产 | 日韩毛片久久久| 国产日韩欧美精品一区| 久热这里只精品99re8久 | 欧美一级高潮片| 欧美日韩国产探花| 欧美成人午夜视频| 欧美日韩成人免费观看| 女人色偷偷aa久久天堂| 久久久精品亚洲| 免费成人深夜夜行网站| 91久久国产| 色哟哟亚洲精品一区二区| 亚洲精品色午夜无码专区日韩| 韩国精品福利一区二区三区| 精品精品欲导航| 午夜不卡久久精品无码免费| 97se亚洲| 亚洲精品97久久| 超碰97在线资源站| 色天下一区二区三区| 亚洲女人天堂成人av在线| 精品夜夜澡人妻无码av| 蜜桃视频欧美| 国产性猛交xxxx免费看久久| 手机看片国产日韩| 久久久久亚洲| 欧美另类交人妖| 99免费在线观看| 一区二区三区四区五区精品视频| 欧美在线观看日本一区| 亚洲色成人www永久网站| 日韩精品电影一区亚洲| 国产在线观看91精品一区| 999久久久久久| 国产不卡一区视频| 欧美动漫一区二区| 番号集在线观看| 有码一区二区三区| 男人和女人啪啪网站| 欧美xxxx做受欧美护士| 91精品国产91久久综合桃花| 久久久久亚洲AV成人网人人小说| 色婷婷av一区二区三区丝袜美腿| 中文字幕精品网| 国产精品九九九九九九| 国产深夜精品| 国产自摸综合网| 色欲av伊人久久大香线蕉影院| 2020国产成人综合网| 亚洲午夜精品一区二区| 国产极品人妖在线观看| 色成人在线视频| 国产毛片久久久久久| 日韩福利视频一区| 不卡av电影在线观看| 国内精品福利视频| 国产一区二区不卡在线 | 第一社区sis001原创亚洲| 欧美理论电影在线播放| 神马久久久久久久| 国产东北露脸精品视频| 日韩免费三级| 成人福利影视| 欧美日韩和欧美的一区二区| 久草视频福利在线| 久久日文中文字幕乱码| 91极品女神在线| 国产喷水福利在线视频| 久久精品无码一区二区三区| 日韩免费在线观看av| 欧美另类激情| 亚洲女人天堂视频| 久久视频免费看| 久久69国产一区二区蜜臀| 久久九九视频| 97蜜桃久久| 91精品国产一区二区三区| 88久久精品无码一区二区毛片| 欧美精品一级| 91香蕉嫩草影院入口| av在线电影网| 欧美午夜激情视频| 黄色性视频网站| 中文在线日韩| 成人淫片在线看| 国产大片在线免费观看| 天天综合天天做天天综合| 国产亚洲色婷婷久久| 日韩在线精品| 国产精品久久久久久久久久ktv | 91porny九色| 99国产精品视频免费观看| 五月天激情图片| 国产精品va视频| 久久久精品一区二区| 一区二区小视频| 国产欧美一区二区精品婷婷| 人妻精品无码一区二区三区 | 精品日韩在线观看| 四虎精品免费视频| 韩国精品一区二区| 中文字幕精品—区二区日日骚| 国产极品一区| 日韩在线视频免费观看| 一级黄色大毛片| 国产精品久久久久久久久动漫 | 国产不卡视频在线播放| 免费cad大片在线观看| 秋霞一区二区三区| 九九综合九九综合| 亚洲爱情岛论坛永久| 亚洲综合激情网| 中文字幕精品视频在线| 一本综合久久| 另类视频在线观看+1080p| 在线观看特色大片免费视频| 亚洲男人天堂视频| 国产精品无码粉嫩小泬| 国产精品久久久久久久蜜臀 | 国产白丝精品91爽爽久久| 狠狠噜天天噜日日噜| 99国产精品久久一区二区三区| 久久久久久久久久久亚洲| 日本人妻熟妇久久久久久| 精品动漫一区二区| 中文字幕免费视频| 久久精品国产一区二区三| 偷拍盗摄高潮叫床对白清晰| 涩爱av色老久久精品偷偷鲁| 午夜免费在线观看精品视频| 午夜影院免费体验区| 欧美最猛黑人xxxxx猛交| 国产美女网站视频| 懂色av一区二区三区免费观看| 奇米精品一区二区三区| 欧美日韩一二三四| 91天堂在线观看| 爱啪视频在线观看视频免费| 亚洲人成绝费网站色www| 国产又大又长又粗| 红桃av永久久久| 精品日韩在线视频| 国产不卡在线播放| 国产福利影院在线观看| 重囗味另类老妇506070| 你懂的网址一区二区三区| 亚洲福利影视| 91精品国产高清久久久久久91| 九色在线播放| 精品欧美乱码久久久久久1区2区| 少妇太紧太爽又黄又硬又爽| 一区二区中文视频| 私密视频在线观看| 久久99精品国产麻豆婷婷| 无码 制服 丝袜 国产 另类| 欧美另类69xxxxx| 国产91社区| 九九热这里有精品| 69av视频在线播放| av色综合久久天堂av色综合在| 日韩成人久久久| 99在线无码精品入口| 色婷婷综合在线| 久久精品国产亚洲av高清色欲| 中文字幕久久午夜不卡| 真人bbbbbbbbb毛片| 国产老妇另类xxxxx| 亚洲视频在线观看一区二区三区| 激情欧美日韩一区| 一区二区三区四区在线视频| 亚洲品质自拍| 俄罗斯精品一区二区三区| 亚洲狼人综合| 国产精品pans私拍| 美女在线视频免费| 欧美丰满老妇厨房牲生活| 丝袜美腿美女被狂躁在线观看| 国产婷婷成人久久av免费高清| 亚洲AV无码乱码国产精品牛牛| 欧美吞精做爰啪啪高潮| 久久久午夜影院| 亚洲国产精品一区二区www| 婷婷激情四射网| 国产精品欧美一区喷水| 国产精品无码久久久久一区二区| 不卡的av在线播放| 制服下的诱惑暮生| 国产呦精品一区二区三区网站| www.色偷偷.com| 亚洲欧美日韩国产| 久色视频在线播放| 亚洲激情一区| 免费看毛片的网址| 欧美日本久久| 欧美一级特黄aaaaaa在线看片| 青青一区二区三区| 日韩欧美国产二区| 欧美综合在线视频观看| 日韩免费三级| 日本电影一区二区| 亚洲国产欧美日韩| 色偷偷综合网| 一区二区精品在线观看| 999国产精品视频| 中国成人亚色综合网站| 羞羞答答成人影院www| 久久久国产精华液999999| 久久香蕉国产| 欧美h视频在线观看| 亚洲91视频| xxxxxx在线观看| 激情欧美一区二区三区| 国产主播自拍av| 国产精品丝袜xxxxxxx| 国产主播在线看| 日韩vs国产vs欧美| 天天爱天天操天天干| 久久国产精品色| 国产精品探花在线播放| 国产成人8x视频一区二区| 无码任你躁久久久久久老妇| 99久久精品免费看国产| 亚洲av综合一区二区| 国产精品久久久久久久裸模| 午夜国产福利一区二区| 亚洲一区av在线| 久久国产黄色片| 在线观看免费成人| 99re只有精品| 国产网站欧美日韩免费精品在线观看 | 日本暖暖在线视频| 欧美老肥婆性猛交视频| 98色花堂精品视频在线观看| 国产精品9999| 国产精品美女久久久久| 极品日韩久久| 欧美色女视频| 男人c女人视频| 国产日韩欧美高清免费| 小泽玛利亚视频在线观看| 国产不卡高清在线观看视频| 亚洲最大成人网站| 亚洲视频图片小说| 日本韩国欧美中文字幕| 欧美日韩不卡在线| 日韩一区二区三区不卡| 中文字幕精品一区二区精品| 成人女同在线观看| 国产精品免费久久久久影院| 中文字幕视频精品一区二区三区| 久久天天狠狠| 亚洲欧美偷拍自拍| 黄色片视频在线免费观看| 国产一区二区在线影院| 97人妻天天摸天天爽天天| 亚洲欧美中日韩| 久久久久久久久影院| 884aa四虎影成人精品一区| 亚洲av成人无码久久精品老人 | 久久久一本精品99久久精品66| 欧美日中文字幕| a级黄色小视频| 久久91精品国产91久久小草| 成人精品在线观看视频| 亚洲激情综合网| 亚洲 国产 日韩 欧美| 亚洲国产精品人久久电影| 日本www在线观看视频| 欧美在线视频免费播放| 亚洲免费一区三区| 亚洲一二区在线| 日韩精品一二三区| 欧美无人区码suv| 一级精品视频在线观看宜春院| 正在播放木下凛凛xv99| 日韩国产高清视频在线| 国产99re66在线视频| 91久久久在线| 日韩精品一区二区三区免费观看| 免费欧美一级视频| 成人午夜av电影| 国产a免费视频| 91精品国产综合久久香蕉的特点| 国产色a在线| 欧美亚洲另类制服自拍| 精品成人自拍视频| 免费看黄在线看| 不卡一区二区三区四区| 久久亚洲AV无码| 91精品国产福利| a级网站在线播放| 91久久国产精品| 婷婷综合伊人| 91看片破解版| 综合网在线视频| 国产精品乱码久久久| 久久精品美女视频网站| 亚洲欧美久久精品| 综合操久久久| 韩国av一区二区| 国产中文av在线| 欧美一区三区四区| 中国av在线播放| 99免费在线视频观看| 欧美视频在线观看| 免费啪视频在线观看| 亚洲一二三四区| 四虎在线视频免费观看| 97精品在线观看| 亚洲8888| 啊啊啊国产视频| 国产精品久久久久9999吃药| 国产精品探花视频| 久久99国产精品久久久久久久久| 我要色综合中文字幕| 国产精品久久久久9999爆乳| 9l国产精品久久久久麻豆| 你懂的国产在线| 在线视频免费一区二区| 成人精品视频在线观看| 国产精品免费看久久久无码| 成人h精品动漫一区二区三区| 中文在线观看免费网站| 亚洲男人天堂2023| 精品福利在线| 日韩欧美猛交xxxxx无码| a亚洲天堂av| 国产午夜麻豆影院在线观看| 日韩中文字幕免费| 一区二区在线免费播放| 奇米精品一区二区三区| 欧美国产日韩精品免费观看| 亚洲天堂网视频| 欧美精品18videos性欧| 国产一卡不卡| 被黑人猛躁10次高潮视频| 天天色天天操综合| 免费在线看a| 国产伦精品一区二区三区在线 | 亚洲一二三四区不卡| 韩国三级av在线免费观看| 91青草视频久久| 99热在线精品观看| 狂野欧美性猛交| 精品久久久久久综合日本欧美| 国产精品av一区二区三区| 亚洲最新在线| 不卡一区二区在线| 91九色蝌蚪91por成人| 久久久综合免费视频| 日韩国产一区| 黄色网址在线视频| 欧美裸体一区二区三区| 国产激情视频在线看| 一区二区三区国|