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

@Autowired的這些騷操作,你都知道嗎?

開發 前端
最近review別人代碼的時候,看到了一些@Autowired不一樣的用法,覺得有些意思,特定花時間研究了一下,收獲了不少東西,現在分享給大家。

[[415678]]

本文轉載自微信公眾號「蘇三說技術」,作者蘇三說技術。轉載本文請聯系蘇三說技術公眾號。

前言

最近review別人代碼的時候,看到了一些@Autowired不一樣的用法,覺得有些意思,特定花時間研究了一下,收獲了不少東西,現在分享給大家。

也許@Autowired比你想象中更強大。

1. @Autowired的默認裝配

我們都知道在spring中@Autowired注解,是用來自動裝配對象的。通常,我們在項目中是這樣用的:

  1. package com.sue.cache.service; 
  2.  
  3. import org.springframework.stereotype.Service; 
  4.  
  5. @Service 
  6. public class TestService1 { 
  7.     public void test1() { 
  8.     } 
  1. package com.sue.cache.service; 
  2.  
  3. import org.springframework.stereotype.Service; 
  4.  
  5. @Service 
  6. public class TestService2 { 
  7.  
  8.     @Autowired 
  9.     private TestService1 testService1; 
  10.  
  11.     public void test2() { 
  12.     } 

沒錯,這樣是能夠裝配成功的,因為默認情況下spring是按照類型裝配的,也就是我們所說的byType方式。

此外,@Autowired注解的required參數默認是true,表示開啟自動裝配,有些時候我們不想使用自動裝配功能,可以將該參數設置成false。

2. 相同類型的對象不只一個時

上面byType方式主要針對相同類型的對象只有一個的情況,此時對象類型是唯一的,可以找到正確的對象。

但如果相同類型的對象不只一個時,會發生什么?

在項目的test目錄下,建了一個同名的類TestService1:

  1. package com.sue.cache.service.test; 
  2.  
  3. import org.springframework.stereotype.Service; 
  4.  
  5. @Service 
  6. public class TestService1 { 
  7.  
  8.     public void test1() { 
  9.     } 

重新啟動項目時:

  1. Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name 'testService1' for bean class [com.sue.cache.service.test.TestService1] conflicts with existing, non-compatible bean definition of same name and class [com.sue.cache.service.TestService1] 

結果報錯了,報類類名稱有沖突,直接導致項目啟動不來。

注意,這種情況不是相同類型的對象在Autowired時有兩個導致的,非常容易產生混淆。這種情況是因為spring的@Service方法不允許出現相同的類名,因為spring會將類名的第一個字母轉換成小寫,作為bean的名稱,比如:testService1,而默認情況下bean名稱必須是唯一的。

下面看看如何產生兩個相同的類型bean:

  1. public class TestService1 { 
  2.  
  3.     public void test1() { 
  4.     } 
  1. @Service 
  2. public class TestService2 { 
  3.  
  4.     @Autowired 
  5.     private TestService1 testService1; 
  6.  
  7.     public void test2() { 
  8.     } 
  1. @Configuration 
  2. public class TestConfig { 
  3.  
  4.     @Bean("test1"
  5.     public TestService1 test1() { 
  6.         return new TestService1(); 
  7.     } 
  8.  
  9.     @Bean("test2"
  10.     public TestService1 test2() { 
  11.         return new TestService1(); 
  12.     } 

在TestConfig類中手動創建TestService1實例,并且去掉TestService1類上原有的@Service注解。

重新啟動項目:

果然報錯了,提示testService1是單例的,卻找到兩個對象。

其實還有一個情況會產生兩個相同的類型bean:

  1. public interface IUser { 
  2.     void say(); 
  1. @Service 
  2. public class User1 implements IUser{ 
  3.     @Override 
  4.     public void say() { 
  5.     } 
  1. @Service 
  2. public class User2 implements IUser{ 
  3.     @Override 
  4.     public void say() { 
  5.     } 
  1. @Service 
  2. public class UserService { 
  3.  
  4.     @Autowired 
  5.     private IUser user

項目重新啟動時:

圖片報錯了,提示跟上面一樣,testService1是單例的,卻找到兩個對象。

第二種情況在實際的項目中出現得更多一些,后面的例子,我們主要針對第二種情況。

3. @Qualifier和@Primary

顯然在spring中,按照Autowired默認的裝配方式:byType,是無法解決上面的問題的,這時可以改用按名稱裝配:byName。

只需在代碼上加上@Qualifier注解即可:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     @Autowired 
  5.     @Qualifier("user1"
  6.     private IUser user

只需這樣調整之后,項目就能正常啟動了。

Qualifier意思是合格者,一般跟Autowired配合使用,需要指定一個bean的名稱,通過bean名稱就能找到需要裝配的bean。

除了上面的@Qualifier注解之外,還能使用@Primary注解解決上面的問題。在User1上面加上@Primary注解:

  1. @Primary 
  2. @Service 
  3. public class User1 implements IUser{ 
  4.     @Override 
  5.     public void say() { 
  6.     } 

去掉UserService上的@Qualifier注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     @Autowired 
  5.     private IUser user

重新啟動項目,一樣能正常運行。

當我們使用自動配置的方式裝配Bean時,如果這個Bean有多個候選者,假如其中一個候選者具有@Primary注解修飾,該候選者會被選中,作為自動配置的值。

4. @Autowired的使用范圍

上面的實例中@Autowired注解,都是使用在成員變量上,但@Autowired的強大之處,遠非如此。

先看看@Autowired注解的定義:

從圖中可以看出該注解能夠使用在5種目標類型上,下面用一張圖總結一下:

該注解我們平常使用最多的地方可能是在成員變量上。

接下來,我們重點看看在其他地方該怎么用?

4.1 成員變量

在成員變量上使用Autowired注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     @Autowired 
  5.     private IUser user

這種方式可能是平時用得最多的。

4.2 構造器

在構造器上使用Autowired注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     private IUser user
  5.  
  6.     @Autowired 
  7.     public UserService(IUser user) { 
  8.         this.user = user
  9.         System.out.println("user:" + user); 
  10.     } 

注意,在構造器上加Autowired注解,實際上還是使用了Autowired裝配方式,并非構造器裝配。

4.3 方法

在普通方法上加Autowired注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     @Autowired 
  5.     public void test(IUser user) { 
  6.        user.say(); 
  7.     } 

spring會在項目啟動的過程中,自動調用一次加了@Autowired注解的方法,我們可以在該方法做一些初始化的工作。

也可以在setter方法上Autowired注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     private IUser user
  5.  
  6.     @Autowired 
  7.     public void setUser(IUser user) { 
  8.         this.user = user
  9.     } 

4.4 參數

可以在構造器的入參上加Autowired注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     private IUser user
  5.  
  6.     public UserService(@Autowired IUser user) { 
  7.         this.user = user
  8.         System.out.println("user:" + user); 
  9.     } 

也可以在非靜態方法的入參上加Autowired注解:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     public void test(@Autowired IUser user) { 
  5.        user.say(); 
  6.     } 

4.5 注解

這種方式其實用得不多,我就不過多介紹了。

5. @Autowired的高端玩法

其實上面舉的例子都是通過@Autowired自動裝配單個實例,但這里我會告訴你,它也能自動裝配多個實例,怎么回事呢?

將UserService方法調整一下,用一個List集合接收IUser類型的參數:

  1. @Service 
  2. public class UserService { 
  3.  
  4.     @Autowired 
  5.     private List<IUser> userList; 
  6.  
  7.     @Autowired 
  8.     private Set<IUser> userSet; 
  9.  
  10.     @Autowired 
  11.     private Map<String, IUser> userMap; 
  12.  
  13.     public void test() { 
  14.         System.out.println("userList:" + userList); 
  15.         System.out.println("userSet:" + userSet); 
  16.         System.out.println("userMap:" + userMap); 
  17.     } 

增加一個controller:

  1. @RequestMapping("/u"
  2. @RestController 
  3. public class UController { 
  4.  
  5.     @Autowired 
  6.     private UserService userService; 
  7.  
  8.     @RequestMapping("/test"
  9.     public String test() { 
  10.         userService.test(); 
  11.         return "success"
  12.     } 

調用該接口后:

從上圖中看出:userList、userSet和userMap都打印出了兩個元素,說明@Autowired會自動把相同類型的IUser對象收集到集合中。

意不意外,驚不驚喜?

6. @Autowired一定能裝配成功?

前面介紹了@Autowired注解這么多牛逼之處,其實有些情況下,即使使用了@Autowired裝配的對象還是null,到底是什么原因呢?

6.1 沒有加@Service注解

在類上面忘了加@Controller、@Service、@Component、@Repository等注解,spring就無法完成自動裝配的功能,例如:

  1. public class UserService { 
  2.  
  3.     @Autowired 
  4.     private IUser user
  5.  
  6.     public void test() { 
  7.         user.say(); 
  8.     } 

這種情況應該是最常見的錯誤了,不會因為你長得帥,就不會犯這種低級的錯誤。

6.2 注入Filter或Listener

web應用啟動的順序是:listener->filter->servlet。

接下來看看這個案例:

  1. public class UserFilter implements Filter { 
  2.  
  3.     @Autowired 
  4.     private IUser user
  5.  
  6.     @Override 
  7.     public void init(FilterConfig filterConfig) throws ServletException { 
  8.         user.say(); 
  9.     } 
  10.  
  11.     @Override 
  12.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
  13.  
  14.     } 
  15.  
  16.     @Override 
  17.     public void destroy() { 
  18.     } 
  1. @Configuration 
  2. public class FilterConfig { 
  3.  
  4.     @Bean 
  5.     public FilterRegistrationBean filterRegistrationBean() { 
  6.         FilterRegistrationBean bean = new FilterRegistrationBean(); 
  7.         bean.setFilter(new UserFilter()); 
  8.         bean.addUrlPatterns("/*"); 
  9.         return bean; 
  10.     } 

程序啟動會報錯:

tomcat無法正常啟動。

什么原因呢?

眾所周知,springmvc的啟動是在DisptachServlet里面做的,而它是在listener和filter之后執行。如果我們想在listener和filter里面@Autowired某個bean,肯定是不行的,因為filter初始化的時候,此時bean還沒有初始化,無法自動裝配。

如果工作當中真的需要這樣做,我們該如何解決這個問題呢?

  1. public class UserFilter  implements Filter { 
  2.  
  3.     private IUser user
  4.  
  5.     @Override 
  6.     public void init(FilterConfig filterConfig) throws ServletException { 
  7.         ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext()); 
  8.         this.user = ((IUser)(applicationContext.getBean("user1"))); 
  9.         user.say(); 
  10.     } 
  11.  
  12.     @Override 
  13.     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
  14.  
  15.     } 
  16.  
  17.     @Override 
  18.     public void destroy() { 
  19.  
  20.     } 

答案是使用WebApplicationContextUtils.getWebApplicationContext獲取當前的ApplicationContext,再通過它獲取到bean實例。

6.3 注解未被@ComponentScan掃描

通常情況下,@Controller、@Service、@Component、@Repository、@Configuration等注解,是需要通過@ComponentScan注解掃描,收集元數據的。

但是,如果沒有加@ComponentScan注解,或者@ComponentScan注解掃描的路徑不對,或者路徑范圍太小,會導致有些注解無法收集,到后面無法使用@Autowired完成自動裝配的功能。

有個好消息是,在springboot項目中,如果使用了@SpringBootApplication注解,它里面內置了@ComponentScan注解的功能。

6.4 循環依賴問題

如果A依賴于B,B依賴于C,C又依賴于A,這樣就形成了一個死循環。

spring的bean默認是單例的,如果單例bean使用@Autowired自動裝配,大多數情況,能解決循環依賴問題。

但是如果bean是多例的,會出現循環依賴問題,導致bean自動裝配不了。

還有有些情況下,如果創建了代理對象,即使bean是單例的,依然會出現循環依賴問題。

如果你對循環依賴問題比較感興趣,也可以看一下我的另一篇專題《》,里面介紹的非常詳細。

7. @Autowired和@Resouce的區別

@Autowired功能雖說非常強大,但是也有些不足之處。比如:比如它跟spring強耦合了,如果換成了JFinal等其他框架,功能就會失效。而@Resource是JSR-250提供的,它是Java標準,絕大部分框架都支持。

除此之外,有些場景使用@Autowired無法滿足的要求,改成@Resource卻能解決問題。接下來,我們重點看看@Autowired和@Resource的區別。

  • @Autowired默認按byType自動裝配,而@Resource默認byName自動裝配。
  • @Autowired只包含一個參數:required,表示是否開啟自動準入,默認是true。而@Resource包含七個參數,其中最重要的兩個參數是:name 和 type。
  • @Autowired如果要使用byName,需要使用@Qualifier一起配合。而@Resource如果指定了name,則用byName自動裝配,如果指定了type,則用byType自動裝配。
  • @Autowired能夠用在:構造器、方法、參數、成員變量和注解上,而@Resource能用在:類、成員變量和方法上。
  • @Autowired是spring定義的注解,而@Resource是JSR-250定義的注解。

此外,它們的裝配順序不同。

@Autowired的裝配順序如下:

@Resource的裝配順序如下:

如果同時指定了name和type:

如果指定了name:

如果指定了type:

如果既沒有指定name,也沒有指定type:

后記

我原本打算接下來寫@Autowired原理分析和源碼解讀的,但是由于篇幅太長了,不適合放在一起,后面打算開個專題。如果有興趣的朋友,可以持續關注我后續的文章,相信你讀完必定會有些收獲。

 

責任編輯:武曉燕 來源: 蘇三說技術
相關推薦

2020-05-27 11:30:54

Chrome DevT前端命令

2022-11-10 09:00:41

2024-03-26 10:10:45

JavaScript操作符操作表達式

2022-09-07 09:01:14

JS操作符運算符

2016-01-11 09:48:07

2016-03-18 19:03:35

認知計算IBM

2019-07-08 10:18:38

MPLSIP數據

2019-02-12 11:15:15

Spring設計模式Java

2021-07-29 06:55:03

Spring@AutowriedbyType注入

2024-04-28 08:20:52

Controller接口URL

2023-02-15 08:12:19

http超時過濾器

2020-10-28 11:20:55

vue項目技

2021-04-10 07:04:00

WPS技巧辦公軟件

2023-08-29 09:31:01

Scrapy網頁爬蟲

2020-02-20 08:30:49

OSPF網絡協議路由協議

2018-02-06 09:06:03

主流分布式存儲系統

2015-06-29 09:06:51

2020-12-24 15:26:07

Redis數據庫

2020-11-18 07:52:08

2018-05-15 08:27:20

Scikit-lear機器學習Python
點贊
收藏

51CTO技術棧公眾號

国产成人综合网站| 欧美色就是色| 午夜精品久久久久影视| 久久久婷婷一区二区三区不卡| 日韩精品手机在线| 日本黄色精品| 亚洲二区在线播放视频| 少妇高清精品毛片在线视频| 国产传媒在线播放| 97久久精品人人做人人爽| 国产精品久久久久久影视| 美女的奶胸大爽爽大片| 亚洲第一论坛sis| 337p亚洲精品色噜噜噜| 久久久久久久久久久视频| 91欧美在线视频| 不卡一区中文字幕| 91九色在线视频| 亚洲 欧美 日韩 综合| 日韩欧美1区| 日韩国产中文字幕| 婷婷激情综合五月天| 亚洲国产成人二区| 一区二区三区精品视频在线| 色就是色欧美| 亚洲日本香蕉视频| 国产98色在线|日韩| 国产精品久久久av久久久| 国产精品suv一区二区| 日韩中文首页| 亚洲美女黄色片| 亚洲av无码专区在线播放中文| 色综合天天色| 欧美性色视频在线| 2018中文字幕第一页| 欧美jizz18hd性欧美| 国产清纯白嫩初高生在线观看91| 官网99热精品| 国产黄色片免费| 久久国产精品99久久久久久老狼| 欧美在线免费观看| 午夜成人亚洲理伦片在线观看| 99re8这里有精品热视频免费 | 国产丝袜高跟一区| 国产精品19p| 99tv成人影院| 7777精品伊人久久久大香线蕉超级流畅 | 欧美性爽视频| 亚洲欧美另类小说视频| 亚洲人一区二区| av男人的天堂在线| 国产欧美日韩不卡| 亚洲成人一区二区三区| 黄色片免费在线| 久久久久久久久久久久久夜| 久久精品日产第一区二区三区精品版 | 亚洲男女自偷自拍图片另类| 中国xxxx性xxxx产国| 日本久久伊人| 精品国产123| 亚洲精品乱码久久久久久蜜桃欧美| 国产精品日本一区二区不卡视频 | 亚洲第一偷拍| 久久综合伊人77777蜜臀| 精品国产大片大片大片| 久久亚洲国产| 日韩视频在线一区| 国产成人免费在线观看视频| 国产高清欧美| 久久电影一区二区| 精品肉丝脚一区二区三区| 国内精品久久久久久久97牛牛| 欧美大片第1页| 日韩免费不卡视频| 免费在线亚洲欧美| 国产成人在线播放| 国产又黄又粗又长| 风间由美性色一区二区三区| 国产精品一 二 三| 性xxxxbbbb| 国产欧美一二三区| 日韩免费电影一区二区三区| 欧美一区二区三区在线观看免费| 亚洲欧美电影一区二区| 欧洲精品在线播放| 天天免费亚洲黑人免费| 9191久久久久久久久久久| xxx中文字幕| 久久中文字幕导航| 在线播放国产一区二区三区| www欧美com| 一二三区精品| 国产日韩中文字幕| 蜜臀av午夜精品| 久久精品日产第一区二区三区高清版| 日韩一二三区不卡在线视频| av在线看片| 色综合久久六月婷婷中文字幕| 亚洲精品手机在线观看| 欧美三级午夜理伦三级小说| 一区二区三区视频免费| 欧美片一区二区| 男人的天堂久久精品| 国产91精品入口17c| 国产视频二区在线观看| 一区二区三区久久| www.欧美日本| 136福利精品导航| 一区二区三区日韩在线| 久久久久无码精品国产| 奇米精品一区二区三区在线观看一| 亚洲一区二区三区香蕉| 暖暖视频在线免费观看| 亚洲主播在线播放| 一区二区xxx| 欧美黑白配在线| 久久亚洲国产成人| 老熟妇仑乱一区二区av| 高清日韩电视剧大全免费| 日本在线观看一区二区| 肉体视频在线| 欧美人牲a欧美精品| 久久久精品人妻无码专区| 欧美日韩亚洲一区| 国产欧美日韩免费| 国产在线色视频| 亚洲免费观看视频| 一本色道久久亚洲综合精品蜜桃 | 亚洲精品福利资源站| 永久免费看mv网站入口| 天堂蜜桃91精品| 成人欧美一区二区三区在线观看| 你懂的视频在线播放| 亚洲一区二区三区视频在线播放 | 日韩三级小视频| 国产乱码精品一品二品| 亚洲精品乱码视频| 欧美日韩精品免费观看视欧美高清免费大片 | 欧美激情中文字幕在线| 国产又粗又猛又爽又黄视频| 国产亚洲欧美日韩日本| 日韩av黄色网址| 久久午夜影院| 97免费中文视频在线观看| 精品久久久久久亚洲综合网站| 国产精品白丝在线| 亚洲国产日韩欧美在线观看| 欧美日韩伦理| 国产精品视频网址| av在线电影免费观看| 91久久精品日日躁夜夜躁欧美| 欧美精品黑人猛交高潮| 亚洲人成久久| 久久久久久国产精品一区| 超碰在线最新网址| 亚洲国产毛片完整版| 国产成人啪精品午夜在线观看| 国产剧情一区二区三区| 日韩成人午夜影院| a看欧美黄色女同性恋| 久久久中文字幕| 深夜福利视频网站| 欧美日韩一区二区精品| 国产真实乱人偷精品人妻| 水野朝阳av一区二区三区| 色播亚洲婷婷| 国产精品日本一区二区三区在线 | 成人国产在线看| 亚洲乱码一区| 97香蕉久久超级碰碰高清版| 日本亚洲一区| 欧美午夜精品一区二区蜜桃| 麻豆精品国产免费| 成人午夜在线播放| 亚洲熟妇国产熟妇肥婆| 欧美日韩国产高清电影| 91精品视频专区| 2020av在线| 亚洲新声在线观看| 一级做a爰片久久毛片16| 一区二区在线电影| 日本免费福利视频| 人人狠狠综合久久亚洲| 激情图片qvod| 亚洲人成亚洲精品| 国产一区二区在线播放| 久久久高清一区二区三区| 日韩精品小视频| 国产日韩久久久| 18成人在线观看| 一区二区免费在线观看视频| 亚洲欧美激情诱惑| 超碰97免费观看| 久久国产精品色av免费看| 国产精品入口夜色视频大尺度| 大片免费在线观看| 亚洲另类图片色| 精品人妻少妇AV无码专区| 欧美午夜无遮挡| 亚洲av无码一区二区三区在线| 99精品久久久久久| 污污的视频免费观看| 99国产精品久久久久久久| 亚洲精品日韩在线观看| 久久男人av| 91在线国产电影| 日韩不卡免费高清视频| 欧美国产激情18| 日本在线免费看| 亚洲精品中文字幕有码专区| 国产黄色av片| 欧美日本一区二区三区| 国产精品21p| 亚洲精品国产视频| 国产馆在线观看| 91首页免费视频| 精品人妻二区中文字幕| 麻豆91精品视频| 黄色a级片免费| 精品1区2区3区4区| 欧洲xxxxx| 欧美日韩精品一区二区视频| 精品一区二区久久久久久久网站| 三大队在线观看| 精品国产一区二区三区性色av| 欧洲亚洲女同hd| 欧美xxxx性xxxxx高清| 正在播放欧美视频| 国产一二在线观看| 日韩电影在线观看中文字幕| 丰满人妻熟女aⅴ一区| 在线电影院国产精品| 在线观看国产区| 色狠狠桃花综合| av网站中文字幕| 疯狂欧美牲乱大交777| 豆国产97在线 | 亚洲| 亚洲猫色日本管| 国产调教在线观看| 国产日韩一级二级三级| 波多野结衣片子| 久久综合色婷婷| 中国黄色a级片| 91美女视频网站| 漂亮人妻被黑人久久精品| 成人午夜视频网站| 中文字幕18页| 成人h精品动漫一区二区三区| 中文字幕永久免费| 国产成人一区在线| 亚洲精品久久一区二区三区777 | 亚洲成人自拍偷拍| 动漫精品一区一码二码三码四码| 亚洲国产精品久久人人爱| 久草中文在线视频| 亚洲国产精品人人做人人爽| 国产一级在线观看视频| 亚洲国产精品自拍| 精品美女久久久久| 色综合久久综合网| 中文字幕一区二区人妻| 7777精品伊人久久久大香线蕉完整版| 国产又粗又猛又爽| 精品国产一区二区三区不卡| 国产成人无码www免费视频播放| 欧美精品一区二区三区视频| 先锋av资源站| 正在播放亚洲1区| caoporm免费视频在线| 色综合久综合久久综合久鬼88| 成人影音在线| 日本欧美爱爱爱| 亚洲精品一区二区在线播放∴| 亚洲已满18点击进入在线看片| 91麻豆精品激情在线观看最新 | 大桥未久恸哭の女教师| 香蕉久久一区二区三区| 欧美精品一区二区三区高清aⅴ| 污污网站免费在线观看| 永久免费精品影视网站| 国产精品va在线观看视色| 久久久久久国产精品| 成人香蕉视频| 成人黄色激情网| 欧美日韩大片免费观看| 亚洲国产高清国产精品| 最新精品国产| av无码精品一区二区三区| 韩国av一区二区三区在线观看| 69亚洲乱人伦| 欧美国产精品中文字幕| 久久久精品国产sm调教网站| 色婷婷av久久久久久久| www.黄色一片| 亚洲天堂免费观看| 色黄网站在线观看| 国产精品国产三级国产专播精品人| 欧洲精品99毛片免费高清观看| 麻豆成人小视频| 欧美日本国产| 高清一区在线观看| 不卡av免费在线观看| 在线观看亚洲网站| 一本大道久久a久久精品综合| 国产孕妇孕交大片孕| 亚洲另类图片色| 五月天激情在线| 国产精品视频区| 自拍自偷一区二区三区| 99er在线视频| 久久99精品国产.久久久久久| 少妇户外露出[11p]| 亚洲视频每日更新| 国产精品无码一区| 日韩不卡中文字幕| 黄网在线免费看| 成人综合网网址| japanese国产精品| wwwxxx黄色片| 99久久99久久精品免费观看| 日韩在线观看视频一区二区| 91黄色免费看| 四虎在线免费看| 久久久亚洲精选| 亚洲一二av| 在线观看18视频网站| 久久电影网站中文字幕| 色欲AV无码精品一区二区久久 | 久久精品视频播放| 国产国产一区| 四虎影视永久免费在线观看一区二区三区 | 91精品国产自产观看在线 | 在线观看h片| 国产成人涩涩涩视频在线观看| 欧美尿孔扩张虐视频| 亚洲精品久久久久久久蜜桃臀| 激情都市一区二区| 99热这里只有精品4| 欧美日韩精品综合在线| 国产一区二区无遮挡| 欧美一区二区三区久久精品茉莉花| jizz大全欧美jizzcom| 中文字幕不卡在线播放| 日本妇乱大交xxxxx| 国产一区二区三区视频在线观看| 韩国美女久久| 欧美性bbwbbwbbwhd| 老司机午夜精品视频在线观看| 黄色网址在线视频| 欧美性猛交xxx| 国产乱理伦片a级在线观看| 国产成人激情视频| 成人中文视频| 伊人网在线综合| 中文字幕在线不卡| 国产黄色一级大片| 欧美黄色三级网站| 欧美xxxx在线| 国产精品亚洲a| 中文字幕日韩av资源站| 国产熟女一区二区丰满| 欧美巨猛xxxx猛交黑人97人| 一区二区精彩视频| av7777777| 国产精品污污网站在线观看| 91国内精品视频| 欧美黑人xxx| 蜜桃精品wwwmitaows| 亚洲欧美视频二区| 亚洲精品水蜜桃| 天堂av在线播放| 国产日韩在线视频| 亚洲私人影院| 日韩女同一区二区三区 | 亚洲欧美电影一区二区| 成人免费公开视频| 欧美孕妇性xx| 999国产精品视频| 国产性生活毛片| 91国产丝袜在线播放| 成人免费高清| 韩国成人一区| 久久er99热精品一区二区| 久久久久97国产| 亚洲天堂男人的天堂| 亚洲高清在线一区| 欧美视频免费播放| 亚洲欧美乱综合| 蜜桃视频在线播放| 91成人免费看| 日韩成人av影视| 国产极品在线播放| 自拍偷拍亚洲在线| 成人av综合网| 91 在线视频观看| 五月综合激情网| 免费在线看a| 欧美日韩久久久| 无码国产色欲xxxx视频| 国产视频观看一区|