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

都用過@Autowired,但你知道它是怎么實(shí)現(xiàn)的嗎?

開發(fā)
本文講解了Spring中最常用的注解之一@Autowired, 平時(shí)我們可能都是使用屬性注入的,但是后續(xù)建議大家慢慢改變習(xí)慣,使用構(gòu)造器注入。同時(shí)也講解了這個(gè)注解背后的實(shí)現(xiàn)原理,希望對大家有幫助。

?前言

在使用Spring?開發(fā)的時(shí)候,配置的方式主要有兩種,一種是xml?的方式,另外一種是 java config?的方式。在使用的過程中java config?,我們難免會與注解進(jìn)行各種打交道,其中,我們使用最多的注解應(yīng)該就是@Autowired?注解了。這個(gè)注解的作用就是注入一個(gè)定義好的bean。

那么,除了我們常用的屬性注入方式之外,還有哪些方式可以使用這個(gè)注解呢?在代碼層面是如何實(shí)現(xiàn)的?

如何使用@Autowired注解?

將@Autowired注解應(yīng)用于構(gòu)造函數(shù),如以下示例所示:

@Component
public class BeanConfig{
@Autowired
private BeanConfig beanConfig;

@Autowired
public BeanConfig(BeanConfig beanConfig){
this.beanConfig = beanConfig;
}
}

直接應(yīng)用于字段是我們使用最多的方式,但是從代碼層面使用構(gòu)造函數(shù)注入會更好。因?yàn)闃?gòu)造器注入的方式,能夠保證注入的依賴不可變,并確保需要的依賴不為空。此外,構(gòu)造器注入的依賴總是能夠在返回客戶端(組件)代碼的時(shí)候保證完全初始化的狀態(tài)。

此外,還有以下幾種不太常用的方法,見下面的代碼:

 @Autowired
private List<BeanConfig> beanConfigList;

@Autowired
private Set<BeanConfig> beanConfigSet;

@Autowired
private Map<String, BeanConfig> beanConfigMap;

雖然我們經(jīng)常使用這個(gè)注解,但是我們真的了解它的作用嗎?

首先從它的作用域來看,其實(shí)這個(gè)注解是屬于容器配置的Spring?注解,其他屬于容器配置注解:@Required?, @Primary?, @Qualifier等。

其次,我們可以直接看字面意思,autowire,這個(gè)詞的意思就是自動裝配的意思。

自動裝配是什么意思?這個(gè)詞的本意是指在一些行業(yè)中用機(jī)器代替人自動完成一些需要裝配的任務(wù)。在Spring?的世界里,自動組裝是指使用我們需要這個(gè)bean的class?自動組裝Spring?容器中的bean。

所以這個(gè)注解作用的就是自動將Spring?容器中的bean?和我們需要這個(gè)bean一起使用的類組裝起來。

接下來,讓我們看看這個(gè)注解背后工作的原理。

如何實(shí)現(xiàn)@Autowired 注解?

Java注解實(shí)現(xiàn)的核心技術(shù)是反射。讓我們通過一些例子和自己實(shí)現(xiàn)一個(gè)注解來了解它的工作原理。

我們拿到target之后就可以用反射給他實(shí)現(xiàn)一個(gè)邏輯,這種邏輯在這些方法本身的邏輯之外,這讓我們想起proxy、aop等知識,我們相當(dāng)于為這些方法做了一個(gè)邏輯增強(qiáng)。

其實(shí)注解的實(shí)現(xiàn)主要邏輯大概就是這個(gè)思路。總結(jié)一下一般步驟如下:

  1. 使用反射機(jī)制獲取類的Class對象。
  2. 通過這個(gè)類對象,可以得到它的每一個(gè)方法方法,或者字段等。
  3. Method、Field等類提供了類似getAnnotation的方法來獲取某個(gè)字段的所有注解。
  4. 拿到注解后,我們可以判斷該注解是否是我們要實(shí)現(xiàn)的注解,如果是,則實(shí)現(xiàn)注解邏輯。

下面我們來實(shí)現(xiàn)這個(gè)邏輯,代碼如下:

public void postProcessProperties() throws Exception {
Class<BeanConfig> beanConfigClass = BeanConfig.class;
BeanConfig instance = beanConfigClass.newInstance();
Field[] fields = beanConfigClass.getDeclaredFields();
for (Field field : fields) {
// getAnnotation,判斷是否有Autowired
Autowired autowired = field.getDeclaredAnnotation(Autowired.class);
if (autowired != null) {
String fileName = field.getName();
Class<?> declaringClass = field.getDeclaringClass();
Object bean = new Object();
field.setAccessible(true);
field.set(bean, instance);
}
}
}

從上面的實(shí)現(xiàn)邏輯不難發(fā)現(xiàn),借助Java反射,我們可以直接獲取一個(gè)類中的所有方法,然后獲取方法上的注解。當(dāng)然,我們也可以獲取字段上的注解。在反射的幫助下,我們幾乎可以得到屬于一個(gè)類的任何東西。這樣,我們自己簡單做了一個(gè)實(shí)現(xiàn)。

知道了上面的知識,我們就不難想到,上面的注解雖然簡單,但是@Autowired和他最大的區(qū)別應(yīng)該只是注解的實(shí)現(xiàn)邏輯,其他的如使用反射獲取注解等步驟應(yīng)該是相同的。

接下來我們看在Spring中,@Autowired是如何實(shí)現(xiàn)的呢?

Spring中源碼解析

我們來看@Autowired在Spring源碼中是如何定義注解的,如下:

package org.springframework.beans.factory.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Autowired {
boolean required() default true;
}

閱讀代碼可以看出,@Autowired注解可以應(yīng)用于五類構(gòu)造方法,普通方法、參數(shù)、字段、注解,其保留策略是在運(yùn)行時(shí)。

接下來我們看一Spring對這個(gè)注解的邏輯實(shí)現(xiàn)。

在Spring?源碼中,@Autowired?注解位于包中org.springframework.beans.factory.annotation?。經(jīng)過分析不難發(fā)現(xiàn),Spring對自動裝配注解的實(shí)現(xiàn)邏輯位于類:AutowiredAnnotationBeanPostProcessor。

核心處理代碼如下:

private InjectionMetadata buildAutowiringMetadata(final Class<?> clazz){
LinkedList<InjectionMetadata.InjectedElement> elements = new LinkedList<>();
// 需要處理的目標(biāo)類
Class<?> targetClass = clazz;

do {
final LinkedList<InjectionMetadata.InjectedElement> currElements = new LinkedList<>();

// 通過反射獲取本類的所有字段,并遍歷每個(gè)字段
// 通過方法findAutowiredAnnotation遍歷每個(gè)字段使用的注解
// 如果用autowired修飾,返回autowired相關(guān)屬性
ReflectionUtils.doWithLocalFields(targetClass, field -> {
AnnotationAttributes ann = findAutowiredAnnotation(field);
// 檢查靜態(tài)方法上是否使用了自動裝配注解
if (ann != null) {
if (Modifier.isStatic(field.getModifiers())) {
if (logger.isWarnEnabled()) {
logger.warn("Autowired annotation is not supported on static fields: " + field);
}
return;
}
// 判斷是否指定了required
boolean required = determineRequiredStatus(ann);
currElements.add(new AutowiredFieldElement(field, required));
}
});
//和上面的邏輯一樣,但是方法是通過反射來處理
ReflectionUtils.doWithLocalMethods(targetClass, method -> {
Method bridgedMethod = BridgeMethodResolver.findBridgedMethod(method);
if (!BridgeMethodResolver.isVisibilityBridgeMethodPair(method, bridgedMethod)) {
return;
}
AnnotationAttributes ann = findAutowiredAnnotation(bridgedMethod);
if (ann != null && method.equals(ClassUtils.getMostSpecificMethod(method, clazz))) {
if (Modifier.isStatic(method.getModifiers())) {
if (logger.isWarnEnabled()) {
logger.warn("Autowired annotation is not supported on static methods: " + method);
}
return;
}
if (method.getParameterCount() == 0) {
if (logger.isWarnEnabled()) {
logger.warn("Autowired annotation should only be used on methods with parameters: " +
method);
}
}
boolean required = determineRequiredStatus(ann);
PropertyDescriptor pd = BeanUtils.findPropertyForMethod(bridgedMethod, clazz);
currElements.add(new AutowiredMethodElement(method, required, pd));
}
});
// @Autowired 修飾的注解可能不止一個(gè)
// 所以都加入到currElements容器中一起處理
elements.addAll(0, currElements);
targetClass = targetClass.getSuperclass();
}
while (targetClass != null && targetClass != Object.class);

return new InjectionMetadata(clazz, elements);
}

最后,此方法返回一個(gè)InjectionMetadata?包含所有autowire注解的集合。

這個(gè)類由兩部分組成:

public InjectionMetadata(Class<?> targetClass, Collection<InjectedElement> elements){
this.targetClass = targetClass;
this.injectedElements = elements;
}

一個(gè)是我們要處理的目標(biāo)類,一個(gè)是elements上面方法得到的集合。

有了目標(biāo)類和所有需要注入的元素,我們就可以實(shí)現(xiàn)自動裝配的依賴注入邏輯。實(shí)現(xiàn)方法如下。

@Override
public PropertyValues postProcessPropertyValues(
PropertyValues pvs, PropertyDescriptor[] pds, Object bean, String beanName) throws BeanCreationException {

InjectionMetadata metadata = findAutowiringMetadata(beanName, bean.getClass(), pvs);
try {
metadata.inject(bean, beanName, pvs);
}
catch (BeanCreationException ex) {
throw ex;
}
catch (Throwable ex) {
throw new BeanCreationException(beanName, "Injection of autowired dependencies failed", ex);
}
return pvs;
}

它調(diào)用的inject?方法就是定義在InjectionMetadata。

public void inject(Object target, @Nullable String beanName, @Nullable PropertyValues pvs) throws Throwable {
Collection<InjectedElement> checkedElements = this.checkedElements;
Collection<InjectedElement> elementsToIterate =
(checkedElements != null ? checkedElements : this.injectedElements);
if (!elementsToIterate.isEmpty()) {
for (InjectedElement element : elementsToIterate) {
if (logger.isTraceEnabled()) {
logger.trace("Processing injected element of bean '" + beanName + "': " + element);
}
element.inject(target, beanName, pvs);
}
}
}

/**
* Either this or {@link #getResourceToInject} needs to be overridden.
*/
protected void inject(Object target, @Nullable String requestingBeanName, @Nullable PropertyValues pvs)
throws Throwable {

if (this.isField) {
Field field = (Field) this.member;
ReflectionUtils.makeAccessible(field);
field.set(target, getResourceToInject(target, requestingBeanName));
}
else {
if (checkPropertySkipping(pvs)) {
return;
}
try {
Method method = (Method) this.member;
ReflectionUtils.makeAccessible(method);
method.invoke(target, getResourceToInject(target, requestingBeanName));
}
catch (InvocationTargetException ex) {
throw ex.getTargetException();
}
}
}

上面代碼中,方法的參數(shù)getResourceToInject?是要注入的名稱,bean這個(gè)方法的作用是根據(jù)名稱獲取bean。

以上就是@Autowire注解實(shí)現(xiàn)邏輯的完整解析。

下面是spring容器實(shí)現(xiàn)@Autowired自動注入的時(shí)序圖。

圖片

總結(jié)

本文講解了Spring中最常用的注解之一@Autowired, 平時(shí)我們可能都是使用屬性注入的,但是后續(xù)建議大家慢慢改變習(xí)慣,使用構(gòu)造器注入。同時(shí)也講解了這個(gè)注解背后的實(shí)現(xiàn)原理,希望對大家有幫助。

責(zé)任編輯:武曉燕 來源: JAVA旭陽
相關(guān)推薦

2023-01-13 16:53:17

Annotation底層元注解

2020-08-16 10:58:20

Pandaspython開發(fā)

2023-11-22 07:42:01

2022-10-14 18:19:41

YouTube

2021-08-05 18:21:29

Autowired代碼spring

2012-05-08 08:55:56

2024-11-08 09:37:10

C#組件

2018-01-25 21:32:24

Emoji表情iPhone

2020-06-03 16:50:09

Node.js框架開發(fā)

2024-11-07 12:33:47

2020-07-06 12:09:24

DNS域名系統(tǒng)IP地址

2020-01-07 10:55:37

并發(fā)Nginx運(yùn)維

2023-12-22 16:39:47

Java函數(shù)式接口開發(fā)

2022-08-02 10:01:34

Import語句ES模塊

2020-06-05 08:37:08

Object.entr開發(fā)Object.from

2010-11-23 10:21:53

跳槽

2019-07-03 14:34:39

Docker云計(jì)算技術(shù)

2024-11-26 00:45:29

free區(qū)域字段

2020-08-23 09:18:30

Pandas函數(shù)數(shù)據(jù)分析

2018-07-09 15:32:57

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产91精品对白在线播放| 亚洲色图 校园春色| 亚洲免费二区| 日韩精品在线电影| 国产精品一区二区小说| 1234区中文字幕在线观看| 国产日韩亚洲欧美综合| 亚洲综合社区网| 日本天堂网在线| 中文字幕日韩欧美精品高清在线| 亚洲黄页视频免费观看| 五月激情婷婷在线| 中文字幕成在线观看| 综合在线观看色| 欧美激情导航| 亚洲国产成人一区二区| 日本不卡中文字幕| 91精品国产高清自在线看超| 久久国产高清视频| 精品视频免费在线观看| 精品福利在线导航| 久久6免费视频| 日韩性xxx| 夜夜嗨av一区二区三区四季av| 无码免费一区二区三区免费播放 | 色天使综合视频| 亚洲国产精品一区二区www在线| 性欧美videosex高清少妇| 五月婷婷久久久| 懂色av一区二区夜夜嗨| 国产欧美日韩中文字幕| 乱子伦一区二区三区| 亚洲一区二区伦理| 午夜精品蜜臀一区二区三区免费 | 在线亚洲一区| 欧美激情2020午夜免费观看| 亚洲欧美成人网| wwwwww.色| 天堂在线中文网官网| 亚洲国产精品久久久男人的天堂| 9999在线观看| 蜜桃视频在线观看www社区| 久久婷婷综合激情| 九九九九精品九九九九| 亚洲av无码乱码国产精品| 激情深爱一区二区| 国产区精品在线观看| 中文亚洲av片在线观看| 日本怡春院一区二区| 日韩免费在线播放| 国产又粗又猛又黄视频| 久久不射2019中文字幕| 日韩免费精品视频| 伊人精品一区二区三区| 久久国产麻豆精品| 成人免费淫片视频软件| 国产情侣一区二区| 国产精品一区二区三区99| 亚洲自拍在线观看| 亚洲伦理在线观看| 99久久伊人精品| 精品一区久久久久久| 日本一区高清| 亚洲国产精品成人久久综合一区| 婷婷久久五月天| 麻豆视频在线| 一区二区三区欧美激情| 高清无码视频直接看| free性m.freesex欧美| 欧美日韩国产色视频| 日本www高清视频| 国产成人免费精品| 欧美一个色资源| 污污免费在线观看| 你懂的一区二区三区| 日韩在线视频国产| 男女免费视频网站| 免费在线成人| 成人福利视频网| 免费的黄色av| 国产日韩欧美高清| 国产欧美自拍视频| 蜜桃视频在线网站| 欧美日韩精品电影| 日本人妻一区二区三区| 啄木系列成人av电影| 久久亚洲电影天堂| www.av麻豆| 久久精品国内一区二区三区| 国产传媒一区二区| 天堂网在线中文| 国产精品天美传媒沈樵| 屁屁影院ccyy国产第一页| 欧美黑人粗大| 日韩一区二区三区视频| 男人天堂av电影| 欧美精品二区| 国产精品扒开腿做爽爽爽的视频| 国产成人精品毛片| 久久久久久久久蜜桃| 中文字幕精品在线播放| 国产综合色区在线观看| 欧美成人a在线| 国产三级在线观看完整版| 精品动漫3d一区二区三区免费| 国产精品久久久久久久久久小说 | 日韩成人亚洲| 精品少妇一区二区三区在线播放 | 欧美性猛交xxxx免费看久久久| 日本中文字幕影院| 国产91精品对白在线播放| 欧美国产高跟鞋裸体秀xxxhd| 一区二区三区精| 久久这里都是精品| 日本一本中文字幕| 麻豆精品在线| 色老头一区二区三区在线观看| 欧美黑人一区二区| 成人一区二区在线观看| 大地资源第二页在线观看高清版| 成人片免费看| 国产日韩在线精品av| 久久出品必属精品| 九九热精品视频在线观看| 欧美丰满少妇xxxxx| 一区二区视频免费| 欧美激情一区二区三区在线| 99精品人妻少妇一区二区| 超碰在线亚洲| 欧美日韩高清在线观看| 国产色综合视频| 中文字幕亚洲不卡| 日本高清久久久| 日韩中文在线视频| 亚洲精品成人av久久| 国产精品久久777777毛茸茸| 5566中文字幕一区二区| 免费在线观看av| 欧美日韩久久一区二区| 五月婷六月丁香| 日本在线不卡视频一二三区| 奇米影视首页 狠狠色丁香婷婷久久综合 | 午夜在线视频免费观看| 成人免费视频观看| 在线日韩日本国产亚洲| 伊人久久一区二区| 中文字幕佐山爱一区二区免费| 91日韩精品视频| 91久久国产| 亚洲最大的网站| 日本资源在线| 日韩av在线最新| 久草手机在线视频| 国产三区在线成人av| 欧美电影免费提供在线观看| 亚洲色偷偷综合亚洲av伊人| 韩国成人精品a∨在线观看| 超碰在线免费观看97| 精品国产一区二区三区2021| 欧美福利视频在线观看| 欧美 中文字幕| 欧美视频在线观看 亚洲欧| a级大片在线观看| 毛片av一区二区| 黄黄视频在线观看| 欧美电影免费网站| 国产精品999| 免费av在线| 亚洲精品在线网站| 手机在线看片1024| 亚洲欧洲精品一区二区三区| 黄色三级视频在线播放| 亚洲一级特黄| 日本成人黄色免费看| 日韩成人一区| 欧美激情亚洲视频| 国产在线中文字幕| 51精品国自产在线| 成人午夜视频精品一区| 日本一区二区三区国色天香| 日本黄色三级网站| 免费亚洲网站| 少妇高潮流白浆| 秋霞影视一区二区三区| 国产精品一区二区三区久久| 黄色小说在线播放| 一个色综合导航| 精品区在线观看| 色婷婷精品大视频在线蜜桃视频| 国产精品精品软件男同| 99精品黄色片免费大全| 久久久久久蜜桃一区二区| 在线精品一区二区| 亚洲午夜精品一区二区| 欧美精品中文| 91在线精品视频| 综合在线影院| 久久久久久亚洲精品| 在线看免费av| 日韩精品极品在线观看| 国产成人三级一区二区在线观看一| 色欧美片视频在线观看在线视频| 免费三片在线播放| 国产精品成人网| 中文字幕一区二区人妻在线不卡| 国产在线播放一区二区三区| 亚洲乱码国产一区三区| 亚洲精品九九| 熟女视频一区二区三区| 精品国产中文字幕第一页 | 亚洲人成网亚洲欧洲无码| 成人伊人精品色xxxx视频| 写真福利精品福利在线观看| 国色天香2019中文字幕在线观看| 国产黄大片在线观看画质优化| 亚洲视频axxx| 日本v片在线免费观看| 欧美tk—视频vk| 国产又粗又猛又黄| 91成人免费网站| 欧美一区二区激情视频| 亚洲国产欧美另类丝袜| 国产高潮流白浆| 国产精品久久久99| 国产精品偷伦视频免费观看了| 大地资源二中文在线影视观看 | 欧美高清视频一区二区| 92国产在线视频| 欧美调教网站| 3d动漫啪啪精品一区二区免费| 国产精品视频久久久久久| 色综合天天天天做夜夜夜夜做| 免费毛片在线播放免费| 亚洲欧美日韩在线| 999精品视频在线观看播放| 成人福利一区| 国产中文字幕日韩| 国产三级一区| 国产精品视频999| 超碰这里只有精品| 国产精品高潮视频| 日韩精品一区二区三区av| 国产精品r级在线| 日本黄色一区| 国产精品视频白浆免费视频| xxxxx.日韩| 国产视频福利一区| 亚洲精品成a人ⅴ香蕉片| 成人黄色网免费| 精品中文字幕一区二区三区四区| 91美女片黄在线观| 欧美大片91| 国产一区二区三区黄| 四虎5151久久欧美毛片| 欧美一区2区三区4区公司二百| 国产一区二区三区网| 亚洲ai欧洲av| 亚洲成人国产| 日本黄大片在线观看| 亚洲日本国产| 欧美视频免费播放| 美洲天堂一区二卡三卡四卡视频| www.99r| 国产高清不卡二三区| 91丝袜在线观看| 国产日韩精品一区二区浪潮av| 中国美女黄色一级片| 亚洲精品美腿丝袜| 日韩欧美大片在线观看| 色综合咪咪久久| 一级久久久久久久| 亚洲国产精品成人一区二区| 男人的天堂av高清在线| 日韩三级影视基地| 黄色污网站在线观看| 国产成人av网址| 国产日韩欧美中文在线| 国产日韩三区| 日韩激情一区| 日本手机在线视频| 热久久免费视频| 欧美图片自拍偷拍| 国产亚洲欧洲一区高清在线观看| 日本免费网站视频| 婷婷六月综合亚洲| 亚洲中文字幕一区二区| 亚洲国产精品久久久| 91在线视频免费看| 性色av一区二区三区免费| 欧美日韩国产网站| 国产精品夜夜夜一区二区三区尤| 精品国内自产拍在线观看视频| 国产精品igao激情视频| 日本不卡视频一二三区| 性猛交╳xxx乱大交| 中文字幕精品—区二区四季| 亚洲国产精品午夜在线观看| 欧美日韩国产综合久久| 午夜影院免费视频| 免费91麻豆精品国产自产在线观看| 亚洲精品88| 国产三区精品| 91成人精品| 中文字幕视频在线免费观看| aaa欧美色吧激情视频| 紧身裙女教师波多野结衣| 在线一区二区三区| 天天干视频在线| 丁香在线视频| 精品一区二区三区欧美| 韩国三级在线看| 中文字幕 久热精品 视频在线| 中文字幕一区二区三区手机版 | 久久精品无码av| 日韩欧美久久一区| 91精品国产91久久久久游泳池| 91精品国产99| 国产成人福利av| 在线观看污视频| 久久99国产精品麻豆| 88久久精品无码一区二区毛片| 无吗不卡中文字幕| 亚洲国产精品国自产拍久久| 久久精品在线播放| 欧美日韩视频免费看| 日韩中文不卡| 午夜综合激情| 在线免费观看成年人视频| 五月天中文字幕一区二区| 丰满肉肉bbwwbbww| 久久久久女教师免费一区| 美国十次综合久久| 视色,视色影院,视色影库,视色网| 老司机免费视频一区二区三区| 中文字幕第24页| 欧美性猛交xxxx黑人交| 成人在线免费公开观看视频| 日本一区二区不卡| 免费看成人哺乳视频网站| 国产性xxxx18免费观看视频| 久久综合久久久久88| 亚洲不卡视频在线观看| 亚洲少妇中文在线| 免费污视频在线一区| 色乱码一区二区三在线看| 三级视频在线看| 韩国精品久久久999| 国内视频在线精品| 日本www在线播放| 91视频免费观看| 欧美成人一区二区三区四区| 一区二区三区久久精品| 黑人一区二区三区| 女同性恋一区二区| 成人激情免费电影网址| 国产精品视频久久久久久久| 日韩福利视频在线观看| 成人自拍av| 在线观看免费91| 国产成人免费xxxxxxxx| 午夜偷拍福利视频| 亚洲精品丝袜日韩| 成人免费在线观看视频| 青青视频免费在线观看| av在线这里只有精品| 欧美精品一二三四区| 久久精品国产亚洲精品2020| 亚洲日本视频在线| 99精品在线免费视频| 中文字幕久久午夜不卡| 国产高中女学生第一次| 性视频1819p久久| 国产一区日韩| 欧美xxxxxbbbbb| 亚瑟在线精品视频| 国产精品免费观看| 99在线热播| 日韩黄色免费电影| 亚洲色婷婷一区二区三区| 日韩电影视频免费| 北岛玲精品视频在线观看| xxxx18hd亚洲hd捆绑| 国产视频一区在线播放| 精品二区在线观看| 国产成人精品一区| 女主播福利一区| 最近中文字幕免费| 欧美电影精品一区二区| 亚洲天堂资源| 欧美少妇一区二区三区| 久久网这里都是精品| 精品人妻无码一区二区三区蜜桃一| 欧洲永久精品大片ww免费漫画| 久久久久久久久丰满| 麻豆精品免费视频| 日韩欧美不卡在线观看视频| 日韩欧美精品电影| 欧洲精品一区二区三区久久| 国产精品的网站| 欧美色18zzzzxxxxx|