精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲波多野结衣| 老熟妇仑乱视频一区二区| 不卡视频免费在线观看| 亚洲激情不卡| 亚洲欧美色图片| 91香蕉视频导航| 在线观看操人| 99re6这里只有精品视频在线观看| 国产91在线视频| 国产高潮流白浆| 亚洲+变态+欧美+另类+精品| 欧美日韩情趣电影| 免费毛片网站在线观看| 高清av在线| 国产成人福利片| 国产精品福利片| 青娱乐在线视频免费观看| 亚洲精品aaaaa| 欧美一卡二卡三卡| 国产天堂在线播放| tube8在线hd| 国产精品久久久久久妇女6080 | 久久婷婷五月综合色丁香| 一区二区三区在线观看视频 | 中文字幕丰满乱码| 欧亚av在线| 一区二区三区四区精品在线视频 | 天天免费综合色| 在线免费一区| 六十路在线观看| 成人手机在线视频| 成人性生交xxxxx网站| 欧美日韩综合在线观看| 亚洲成人最新网站| 中文字幕亚洲综合久久筱田步美 | 超碰成人福利| 欧美欧美欧美欧美| 无码日韩人妻精品久久蜜桃| а√在线中文在线新版| 亚洲视频在线一区| 视频在线99re| 日韩porn| 久久夜色精品一区| 精品在线不卡| 囯产精品久久久久久| 国产盗摄精品一区二区三区在线| 国产精品久久久久久一区二区| 久久视频免费在线观看| 亚洲国产一区二区在线观看| 自拍偷拍亚洲欧美| 人人妻人人澡人人爽| 在线日本制服中文欧美| 日韩高清人体午夜| 三级视频网站在线观看| 国产91精品入| 亚洲第一av网站| 午夜性福利视频| 6080成人| 亚洲国产日韩精品在线| 中国xxxx性xxxx产国| 91综合久久爱com| 精品88久久久久88久久久| 秘密基地免费观看完整版中文 | 久久伦理网站| 日韩一区av| 26uuu成人网一区二区三区| 国产欧美韩日| 午夜福利理论片在线观看| 99久久精品国产毛片| 久久99精品久久久久子伦 | 外国成人毛片| 911国产精品| 国产黄色一区二区三区| 成人精品动漫一区二区三区| 亚洲国产成人精品一区二区 | 欧美床上激情在线观看| 青青草偷拍视频| 亚洲大胆在线| 国产91久久婷婷一区二区| 国产亚洲欧美日韩高清| 美国毛片一区二区三区| 2019国产精品视频| 日韩一级片免费看| 国产亚洲精品aa午夜观看| 亚洲成人在线视频网站| 成人在线网址| 亚洲成人动漫在线观看| 成年人视频在线免费| 欧美少妇激情| 欧美精品一区二区三区很污很色的 | 大香伊人中文字幕精品| 色婷婷av一区二区| 午夜视频在线网站| 极品束缚调教一区二区网站| 国产一区二区三区高清在线观看| 玖玖爱这里只有精品| 国产一区二区三区久久| 成人免费在线视频网站| 日本精品一二区| 欧美国产乱子伦| 久久99久久久久久| 日韩精品第一| 亚洲成人激情在线| 1024手机在线观看你懂的| 欧美三级特黄| 国产精品扒开腿爽爽爽视频| aa视频在线免费观看| 久久久国产精品午夜一区ai换脸| 中文字幕免费高| 吞精囗交69激情欧美| 日韩一区二区免费在线观看| 亚洲最大的黄色网| 亚洲综合自拍| 国产激情999| 国产91免费看| 综合中文字幕亚洲| 国产精品涩涩涩视频网站| 欧美影院视频| 最近2019中文字幕大全第二页| 国产一级特黄毛片| 狠狠色综合日日| 欧美国产综合视频| 国产白丝在线观看| 91精品国产品国语在线不卡| 无码h肉动漫在线观看| 激情五月***国产精品| 91精品视频在线播放| 国产女主播在线写真| 亚洲v日本v欧美v久久精品| 日本在线播放一区二区| 精品视频亚洲| 韩国精品美女www爽爽爽视频| 91女人18毛片水多国产| 日本一区二区三区四区| 成人午夜视频免费在线观看| 加勒比色综合久久久久久久久| 美日韩丰满少妇在线观看| 伊人久久中文字幕| 久久一区二区视频| 337p粉嫩大胆噜噜噜鲁| 都市激情亚洲欧美| 欧美国产日韩视频| 国产乱淫av片免费| 17c精品麻豆一区二区免费| 超碰在线人人爱| 美女网站一区| 日本亚洲欧美三级| 飘雪影视在线观看免费观看| 五月天欧美精品| 污污内射在线观看一区二区少妇 | 久久久无码精品亚洲日韩按摩| bt天堂新版中文在线地址| 亚洲高清在线一区| 欧美精品免费看| 国产aⅴ爽av久久久久成人| 成人欧美一区二区三区视频网页| 亚洲欧美国产中文| 欧美国产小视频| 国产这里只有精品| 麻豆传媒视频在线| 欧美一级淫片007| 九九视频免费看| 国产成人无遮挡在线视频| 亚洲天堂第一区| 亚洲精品在线播放| 午夜精品99久久免费| 性感美女一级片| 91黄色在线观看| 国产一二三av| 韩国精品一区二区| 黄色网在线视频| 欧美日韩一区二区三区四区不卡| 91国产精品电影| 国产大片在线免费观看| 欧美日韩dvd在线观看| 日韩av手机在线免费观看| 国产91对白在线观看九色| 九一国产精品视频| 国产在线观看91一区二区三区| 国产精品欧美激情| 草莓福利社区在线| 日韩精品高清视频| 亚洲手机在线观看| 一区二区三区高清在线| 懂色av粉嫩av蜜乳av| 水野朝阳av一区二区三区| 亚洲精品久久区二区三区蜜桃臀 | 新67194成人永久网站| 水蜜桃亚洲一二三四在线| 国产一区二区三区精品在线观看| 久久久久久亚洲精品| 成年人视频网站在线| 日韩一级精品视频在线观看| www.日本精品| 自拍偷拍国产精品| 一级欧美一级日韩片| 久久激情五月婷婷| 美脚丝袜脚交一区二区| 成人a'v在线播放| av资源站久久亚洲| 欧美黄色三级| 久久久久久久电影一区| 国产精品毛片一区二区三区四区| 91精品国模一区二区三区| 国产尤物在线视频| 亚洲黄色尤物视频| 黄色三级生活片| 成人福利在线看| 欧美在线aaa| 亚洲一区区二区| 青青草综合在线| 日韩精品中文字幕第1页| 国产精品一区免费观看| 欧美亚洲人成在线| 欧美最猛性xxxxx(亚洲精品)| 国产原厂视频在线观看| 亚洲欧美综合精品久久成人| 亚洲免费黄色片| 欧美人狂配大交3d怪物一区| 99热在线观看免费精品| 亚洲色图视频网站| 日本人亚洲人jjzzjjz| 不卡的看片网站| 亚洲精品无码久久久久久久| 男女av一区三区二区色多| h无码动漫在线观看| 91视频精品| 三区精品视频| 尤物tv在线精品| 精品国产福利| 黑色丝袜福利片av久久| 亚洲影影院av| 成人在线精品| 国产欧美va欧美va香蕉在| 韩国精品主播一区二区在线观看| 91av视频在线| 九色porny自拍视频在线观看| 欧美福利视频在线观看| а√天堂在线官网| 久久精品国产一区二区电影| porn亚洲| 色噜噜狠狠狠综合曰曰曰88av| 黄色软件在线| 在线播放国产一区二区三区| 欧美一区二区三区少妇| 精品亚洲夜色av98在线观看| 午夜福利视频一区二区| 精品无人国产偷自产在线| 欧美一区二区三区激情| 亚洲的天堂在线中文字幕| 色噜噜在线播放| 日韩激情视频在线播放| 欧美成人免费| 在线国产精品视频| 永久免费在线观看视频| 日韩在线视频网站| 黄色在线免费看| 久久国产精品偷| 日本动漫理论片在线观看网站| 欧美精品生活片| 青春草在线视频| 欧美激情精品在线| 91九色国产在线播放| 97在线免费观看| 成人小电影网站| 国产精品久久久久7777婷婷| 国产成人a视频高清在线观看| 国产日韩在线看| 美女日韩一区| 久久久久一区二区| 国产一区二区欧美| 一区二区欧美日韩| 欧美黄在线观看| 3d动漫一区二区三区| 日本亚洲最大的色成网站www| 999在线观看| 成人免费av资源| 88久久精品无码一区二区毛片| 国产区在线观看成人精品| 久久99久久99精品免费看小说| 亚洲精品久久7777| 国产成人在线播放视频| 在线观看国产日韩| 国产黄a三级三级看三级| 亚洲成人黄色在线| aaa在线观看| 欧美精品videosex极品1| 新片速递亚洲合集欧美合集| 成人啪啪免费看| 日韩精品导航| 日本特级黄色大片| 一道本一区二区| 五月激情五月婷婷| 99精品在线免费| 国产91在线播放九色| 亚洲第一成年网| 在线观看国产黄| 亚洲精品一区二区三区香蕉| 懂色av中文在线| 欧美激情视频一区| 日本.亚洲电影| 国产一区二区三区黄| 日韩中文在线电影| 国产成人黄色片| 国产麻豆精品视频| 国产美女永久免费无遮挡| 一区二区三区四区不卡视频| 成人黄色三级视频| 亚洲国产97在线精品一区| 日本视频在线免费观看| 欧美一二三视频| 日韩成人18| 亚洲第一导航| 性欧美videos另类喷潮| 性xxxxxxxxx| 国产精品婷婷午夜在线观看| 日韩欧美a级片| 欧美一区二区三区人| 国产区高清在线| 啪一啪鲁一鲁2019在线视频| 一区二区中文字幕在线观看| 亚洲欧美一区二区原创| 久久精品三级| 国产呦小j女精品视频| 亚洲国产中文字幕| 国产成人免费看一级大黄| 色av中文字幕一区| 国模一区二区| 欧美日韩在线高清| 亚洲一区二区三区高清| youjizz.com日本| 夜夜嗨av一区二区三区四季av| 在线观看亚洲国产| 在线成人中文字幕| 欧美日韩国产网站| 日韩精品不卡| 久热精品在线| 国产草草浮力影院| 亚洲高清免费一级二级三级| 性生交大片免费看女人按摩| 久久久精品中文字幕| 国产成人精品一区二区三区视频 | 日韩精品欧美激情一区二区| 99色精品视频| www久久久久| 国产免费av一区| 亚洲免费av网址| 2022成人影院| 日本不卡一区| 秋霞影院一区二区| 九九九视频在线观看| 欧美系列在线观看| 三级外国片在线观看视频| 国产精品爽黄69| 亚洲欧美色图| 一卡二卡三卡四卡五卡| 亚洲猫色日本管| www久久久com| 2019中文字幕在线免费观看| 亚洲图片久久| 男人的天堂日韩| |精品福利一区二区三区| 国产三级午夜理伦三级| 欧美国产亚洲视频| 欧美美女在线直播| 日韩在线第三页| 国产精品久99| 国产农村妇女毛片精品| 久久久久久久久久久免费精品 | 奇米在线7777在线精品| 成年人免费视频播放| 日韩欧美一二三四区| 欧美裸体视频| 亚洲福利av在线| 国产精品亚洲视频| 尤物视频在线观看国产| 亚洲欧洲中文天堂| 亚洲黑人在线| 国产日本在线播放| 久久精品一区四区| 国产免费的av| 97超级碰在线看视频免费在线看 | 日韩一区二区三区免费视频| 在线视频不卡一区二区| 东方aⅴ免费观看久久av| www亚洲视频| 久久天天躁狠狠躁夜夜av| 中文字幕亚洲在线观看| 免费在线观看的毛片| 亚洲精品视频在线看| 日韩精品视频无播放器在线看 | 亚洲午夜精品久久久| 欧美日本高清视频| 亚洲福利天堂| 在线成人免费av| 色综合天天综合色综合av| 国产黄a三级三级三级av在线看| 国产尤物99| 久草这里只有精品视频| 日韩乱码人妻无码中文字幕|