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

為什么要避免用Apache Beanutils進行屬性的copy

開發 前端
在實際的項目開發中,對象間賦值普遍存在,隨著雙十一、秒殺等電商過程愈加復雜,數據量也在不斷攀升,效率問題,浮出水面。

大家好,我是哪吒。

今天,通過代碼實例、源碼解讀、四大工具類橫向對比的方式,和大家一起聊一聊對象賦值的問題。

在實際的項目開發中,對象間賦值普遍存在,隨著雙十一、秒殺等電商過程愈加復雜,數據量也在不斷攀升,效率問題,浮出水面。

問:如果是你來寫對象間賦值的代碼,你會怎么做?

答:想都不用想,直接代碼走起來,get、set即可。

問:下圖這樣?

圖片

答:對啊,你怎么能把我的代碼放到網上?

問:沒,我只是舉個例子

答:這涉及到商業機密,是很嚴重的問題

問:我發現你挺能扯皮啊,直接回答問題行嗎?

答:OK,OK,我也覺得這樣寫很low,上次這么寫之后,差點挨打

  1. 對象太多,ctrl c + strl v,鍵盤差點沒敲壞;
  2. 而且很容易出錯,一不留神,屬性沒對應上,賦錯值了;
  3. 代碼看起來很傻缺,一個類好幾千行,全是get、set復制,還起個了自以為很優雅的名字transfer;
  4. 如果屬性名不能見名知意,還得加上每個屬性的含義注釋(基本這種賦值操作,都是要加的,注釋很重要,注釋很重要,注釋很重要);
  5. 代碼維護起來很麻煩;
  6. 如果對象過多,會產生類爆炸問題,如果屬性過多,會嚴重違背阿里巴巴代碼規約(一個方法的實際代碼最多20行);

問:行了,行了,說說,怎么解決吧。

答:很簡單啊,可以通過工具類Beanutils直接賦值啊

問:我聽說工具類最近很卷,你用的哪個啊?

答:就Apache自帶的那個啊,賊簡單。我手寫一個,給你欣賞一下。

圖片

問:你這代碼報錯啊,避免用Apache Beanutils進行屬性的copy。

答:沒報錯,只是嚴重警告而已,代碼能跑就行,有問題再優化唄

問:你這什么態度?人事在哪劃拉的人,為啥會出現嚴重警告?

答:拿多少錢,干多少活,我又不是XXX,應該是性能問題吧

問:具體什么原因導致的呢?

答:3000塊錢還得手撕一下 apache copyProperties 的源代碼唄?

通過單例模式調用copyProperties,但是,每一個方法對應一個BeanUtilsBean.getInstance()實例,每一個類實例對應一個實例,這不算一個真正的單例模式。

public static void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException {
BeanUtilsBean.getInstance().copyProperties(dest, orig);
}

性能瓶頸 --> 日志太多也是病

通過源碼可以看到,每一個copyProperties都要進行多次類型檢查,還要打印日志。

public void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException {
// 類型檢查
if (dest == null) {
throw new IllegalArgumentException("No destination bean specified");
} else if (orig == null) {
throw new IllegalArgumentException("No origin bean specified");
} else {
// 打印日志
if (this.log.isDebugEnabled()) {
this.log.debug("BeanUtils.copyProperties(" + dest + ", " + orig + ")");
}

int var5;
int var6;
String name;
Object value;
// 類型檢查
// DanyBean 提供了可以動態修改實現他的類的屬性名稱、屬性值、屬性類型的功能
if (orig instanceof DynaBean) {
// 獲取源對象所有屬性
DynaProperty[] origDescriptors = ((DynaBean)orig).getDynaClass().getDynaProperties();
DynaProperty[] var4 = origDescriptors;
var5 = origDescriptors.length;

for(var6 = 0; var6 < var5; ++var6) {
DynaProperty origDescriptor = var4[var6];
// 獲取源對象屬性名
name = origDescriptor.getName();
// 判斷源對象是否可讀、判斷目標對象是否可寫
if (this.getPropertyUtils().isReadable(orig, name) && this.getPropertyUtils().isWriteable(dest, name)) {
// 獲取對應的值
value = ((DynaBean)orig).get(name);
// 每個屬性都調用一次copyProperty
this.copyProperty(dest, name, value);
}
}
} else if (orig instanceof Map) {
...
} else {
...
}

}
}

通過 jvisualvm.exe 檢測代碼性能

再通過jvisualvm.exe檢測一下運行情況,果然,logging.log4j赫然在列,穩居耗時Top1。

圖片

問:還有其它好的方式嗎?性能好一點的

答:當然有,據我了解有 4 種工具類,實際上,可能會有更多,話不多說,先簡單介紹一下。

  1. org.apache.commons.beanutils.BeanUtils。
  2. org.apache.commons.beanutils.PropertyUtils。
  3. org.springframework.cglib.beans.BeanCopier。
  4. org.springframework.beans.BeanUtils。

問:那你怎么不用?

答:OK,我來演示一下

public class Test {

private static void apacheBeanUtilsCopyTest(User source, User target, int sum){
for (int i = 0; i < sum; i++) {
org.apache.commons.beanutils.BeanUtils.copyProperties(source, target);
}
}

private static void commonsPropertyCopyTest(User source, User target, int sum){
for (int i = 0; i < sum; i++) {
org.apache.commons.beanutils.PropertyUtils.copyProperties(target, source);
}
}

static BeanCopier copier = BeanCopier.create(User.class, User.class, false);
private static void cglibBeanCopyTest(User source, User target, int sum){
for (int i = 0; i < sum; i++) {
org.springframework.cglib.beans.BeanCopier.copier.copy(source, target, null);
}
}

private static void springBeanCopy(User source, User target, int sum){
for (int i = 0; i < sum; i++) {
org.springframework.beans.BeanUtils.copyProperties(source, target);
}
}
}

"四大金剛" 性能統計

方法

1000

10000

100000

1000000

apache BeanUtils

906毫秒

807毫秒

1892毫秒

11049毫秒

apache PropertyUtils

17毫秒

96毫秒

648毫秒

5896毫秒

spring cglib BeanCopier

0毫秒

1毫秒

3毫秒

10毫秒

spring copyProperties

87毫秒

90毫秒

123毫秒

482毫秒

不測不知道,一測嚇一跳,差的還真的多。

spring cglib BeanCopier性能最好,apache BeanUtils性能最差。

性能走勢 --> spring cglib BeanCopier 優于 spring copyProperties 優于 apache PropertyUtils 優于 apache BeanUtils

避免用Apache Beanutils進行屬性的copy的問題 上面分析完了,下面再看看其它的方法做了哪些優化。

Apache PropertyUtils 源碼分析?

從源碼可以清晰的看到,類型檢查變成了非空校驗,去掉了每一次copy的日志記錄,性能肯定更好了。

  1. 類型檢查變成了非空校驗
  2. 去掉了每一次copy的日志記錄
  3. 實際賦值的地方由copyProperty變成了DanyBean  + setSimpleProperty;

DanyBean 提供了可以動態修改實現他的類的屬性名稱、屬性值、屬性類型的功能。

public void copyProperties(Object dest, Object orig){
// 判斷數據源和目標對象不是null
if (dest == null) {
throw new IllegalArgumentException("No destination bean specified");
} else if (orig == null) {
throw new IllegalArgumentException("No origin bean specified");
} else {
// 刪除了org.apache.commons.beanutils.BeanUtils.copyProperties中最為耗時的log日志記錄
int var5;
int var6;
String name;
Object value;
// 類型檢查
if (orig instanceof DynaBean) {
// 獲取源對象所有屬性
DynaProperty[] origDescriptors = ((DynaBean)orig).getDynaClass().getDynaProperties();
DynaProperty[] var4 = origDescriptors;
var5 = origDescriptors.length;

for(var6 = 0; var6 < var5; ++var6) {
DynaProperty origDescriptor = var4[var6];
// 獲取源對象屬性名
name = origDescriptor.getName();
// 判斷源對象是否可讀、判斷目標對象是否可寫
if (this.isReadable(orig, name) && this.isWriteable(dest, name)) {
// 獲取對應的值
value = ((DynaBean)orig).get(name);
// 相對于org.apache.commons.beanutils.BeanUtils.copyProperties此處有優化
// DanyBean 提供了可以動態修改實現他的類的屬性名稱、屬性值、屬性類型的功能
if (dest instanceof DynaBean) {
((DynaBean)dest).set(name, value);
} else {
// 每個屬性都調用一次copyProperty
this.setSimpleProperty(dest, name, value);
}
}
}
} else if (orig instanceof Map) {
...
} else {
...
}

}
}

通過 jvisualvm.exe 檢測代碼性能

再通過jvisualvm.exe檢測一下運行情況,果然,logging.log4j沒有了,其他的基本不變。

Spring copyProperties 源碼分析?

  1. 判斷數據源和目標對象的非空判斷改為了斷言。
  2. 每次copy沒有日志記錄。
  3. 沒有if (orig instanceof DynaBean) {這個類型檢查。
  4. 增加了放開權限的步驟。
private static void copyProperties(Object source, Object target, @Nullable Class<?> editable,
@Nullable String... ignoreProperties){

// 判斷數據源和目標對象不是null
Assert.notNull(source, "Source must not be null");
Assert.notNull(target, "Target must not be null");

/**
* 若target設置了泛型,則默認使用泛型
* 若是 editable 是 null,則此處忽略
* 一般情況下editable都默認為null
*/
Class<?> actualEditable = target.getClass();
if (editable != null) {
if (!editable.isInstance(target)) {
throw new IllegalArgumentException("Target class [" + target.getClass().getName() +
"] not assignable to Editable class [" + editable.getName() + "]");
}
actualEditable = editable;
}

// 獲取target中全部的屬性描述
PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable);
// 需要忽略的屬性
List<String> ignoreList = (ignoreProperties != null ? Arrays.asList(ignoreProperties) : null);

for (PropertyDescriptor targetPd : targetPds) {
Method writeMethod = targetPd.getWriteMethod();
// 目標對象存在寫入方法、屬性不被忽略
if (writeMethod != null && (ignoreList == null || !ignoreList.contains(targetPd.getName()))) {
PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName());
if (sourcePd != null) {
Method readMethod = sourcePd.getReadMethod();
/**
* 源對象存在讀取方法、數據是可復制的
* writeMethod.getParameterTypes()[0]:獲取 writeMethod 的第一個入參類型
* readMethod.getReturnType():獲取 readMethod 的返回值類型
* 判斷返回值類型和入參類型是否存在繼承關系,只有是繼承關系或相等的情況下,才會進行注入
*/
if (readMethod != null &&
ClassUtils.isAssignable(writeMethod.getParameterTypes()[0], readMethod.getReturnType())) {
// 放開讀取方法的權限
if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
readMethod.setAccessible(true);
}
// 通過反射獲取值
Object value = readMethod.invoke(source);
// 放開寫入方法的權限
if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) {
writeMethod.setAccessible(true);
}
// 通過反射寫入值
writeMethod.invoke(target, value);
}
}
}
}
}

總結?

阿里的友情提示,避免用Apache Beanutils進行對象的copy,還是很有道理的。

Apache Beanutils 的性能問題出現在類型校驗和每一次copy的日志記錄。

Apache PropertyUtils 進行了如下優化:

  1. 類型檢查變成了非空校驗。
  2. 去掉了每一次copy的日志記錄。
  3. 實際賦值的地方由copyProperty變成了DanyBean  + setSimpleProperty。

Spring copyProperties 進行了如下優化:

  1. 判斷數據源和目標對象的非空判斷改為了斷言。
  2. 每次copy沒有日志記錄。
  3. 沒有if (orig instanceof DynaBean) {這個類型檢查。
  4. 增加了放開權限的步驟。

本文轉載自微信公眾號「哪吒編程」,可以通過以下二維碼關注。轉載本文請聯系哪吒編程公眾號。

責任編輯:姜華 來源: 哪吒編程
相關推薦

2020-07-30 12:16:33

阿里巴巴Apache對象

2020-09-08 16:25:18

Apache BeancopyJava

2022-12-26 00:25:06

2022-05-10 15:24:34

KafkaZooKeeperKafka Raft

2023-09-21 16:17:48

數據驅動運營

2022-01-03 08:06:15

函數Go數據

2024-06-04 00:10:00

開發拷貝

2024-02-17 21:57:10

2015-08-06 10:14:15

造輪子facebook

2022-08-15 08:27:02

基站網絡

2013-03-12 14:30:09

Ubuntu操作系統

2017-08-02 16:47:43

數據數據收集數據分析

2014-05-19 15:52:57

Apache StraApache

2021-02-11 13:30:56

Nodejs源碼c++

2019-11-27 10:25:15

SaaS云端IT架構

2024-10-17 16:41:57

KafkaZooKeeper

2019-03-19 08:59:13

物聯網IOT技術

2017-09-08 08:35:16

Android代碼API設計

2017-04-05 16:40:45

2014-08-25 10:00:18

開源
點贊
收藏

51CTO技術棧公眾號

日韩国产网站| 欧美日本韩国一区二区| 欧美黄色一级视频| 亚洲精品二三区| 午夜精品久久久内射近拍高清| 国产精品天堂| 国产精品1区2区3区在线观看| 久久久久久成人精品| 欧美做受xxxxxⅹ性视频| 亚洲网站三级| 欧美视频裸体精品| 老司机午夜免费福利视频| 色猫av在线| 国产精品乡下勾搭老头1| 人人爽久久涩噜噜噜网站| 黑鬼狂亚洲人videos| 国产午夜一区| 亚洲黄页视频免费观看| 久久久精品高清| 欧美片第一页| 亚洲成a人v欧美综合天堂| 艳色歌舞团一区二区三区| 色婷婷av一区二区三区之e本道| 免费观看在线综合| 欧美一区二区.| 免费一级黄色大片| 天天做天天爱天天综合网| 亚洲毛片在线观看| 国产精品熟妇一区二区三区四区 | 中文字幕日韩一区二区| 精品亚洲一区二区三区四区五区高| 91丨九色丨丰满| 久久一区国产| 91av在线精品| 国产午夜久久久| 外国成人免费视频| 色哟哟网站入口亚洲精品| 国产乱了高清露脸对白| 亚洲视频一起| 日韩天堂在线观看| 国产又粗又长又爽又黄的视频| 黄色成人免费网| 欧美日韩亚洲视频| 六月婷婷在线视频| 国产极品人妖在线观看| 一区二区欧美精品| 男人c女人视频| a篇片在线观看网站| ...xxx性欧美| 特色特色大片在线| av网站网址在线观看| 国产精品超碰97尤物18| 亚洲高清视频在线观看| av在线三区| 国产精品久久久久婷婷二区次| 日本视频精品一区| av免费在线一区二区三区| 久久精品人人做人人爽97| 久久人人九九| 九色在线视频蝌蚪| 中文一区二区在线观看| 亚洲一区三区视频在线观看| 五月婷婷在线观看| 中文字幕精品一区二区精品绿巨人| 秋霞毛片久久久久久久久| 国产经典自拍视频在线观看| 国产拍欧美日韩视频二区| 深夜福利成人| 欧美13一16娇小xxxx| 亚洲激情网站免费观看| 草草视频在线免费观看| 亚洲最新无码中文字幕久久| 91久久精品午夜一区二区| 五月天婷婷激情视频| 日韩免费大片| 欧美tk丨vk视频| 三级黄色片网站| 欧美久久综合网| 久久久精品一区二区| 妺妺窝人体色www聚色窝仙踪| 亚洲二区视频| 国产精品观看在线亚洲人成网| 在线观看毛片av| 国产精品88888| 久久久水蜜桃| 欧美日韩视频在线播放| 亚洲自拍与偷拍| 欧美精品无码一区二区三区| 中文成人激情娱乐网| 欧美精品一区二区蜜臀亚洲| 91精品人妻一区二区三区蜜桃欧美| 精品久久视频| 欧美高清视频在线| 中文字幕永久在线视频| 丰满放荡岳乱妇91ww| 日韩精品伦理第一区| 日本欧美电影在线观看| 色国产综合视频| 日本泡妞xxxx免费视频软件| 国产中文字幕一区二区三区| 美女黄色丝袜一区| 69亚洲精品久久久蜜桃小说| 国产一区不卡视频| 视频二区一区| av在线最新| 884aa四虎影成人精品一区| 免费a在线观看播放| 欧美jizz| 日韩美女中文字幕| 国产91麻豆视频| 国产精品丝袜91| 大陆极品少妇内射aaaaa| 综合欧美精品| 一区二区福利视频| 国产情侣自拍av| 国产精品综合视频| 无遮挡亚洲一区| 成人午夜视屏| 欧美精品一区二区不卡 | 二区三区在线视频| 国产精品久久久久桃色tv| 久久美女福利视频| 北条麻妃一区二区三区在线观看| 色偷偷噜噜噜亚洲男人的天堂| 久久久久久久黄色片| 成人免费视频视频在线观看免费| 亚洲精品一区二区三区樱花| 345成人影院| 亚洲第一网站免费视频| 免费一级黄色大片| 国产精品18久久久久久久久久久久 | 91丨九色丨海角社区| www.亚洲免费av| 久久人妻无码一区二区| 亚洲精品自拍| 色妞色视频一区二区三区四区| 中文字幕亚洲乱码熟女1区2区| 成人中文字幕电影| 草草草视频在线观看| 成人亚洲精品| 久久天天躁狠狠躁夜夜爽蜜月| 国产精华7777777| 久久久精品影视| 999精品网站| 欧美激情在线精品一区二区三区| 538国产精品一区二区在线| 免费观看国产精品| 香蕉影视欧美成人| 99re久久精品国产| 午夜一级久久| 日本免费高清一区二区| 国产亚洲一区二区手机在线观看| 国产一区二区三区毛片| 中文字幕人妻精品一区| 国产精品久久综合| 亚洲黄色av片| 欧美天天在线| 国产一区免费视频| 厕沟全景美女厕沟精品| 亚洲男人天天操| 中文字幕乱码在线观看| 国产精品久久午夜| 日韩av影视大全| 极品尤物久久久av免费看| 国产伦精品一区二区三区照片91| 国产精品高颜值在线观看| 精品视频久久久久久久| 中文字幕一区二区三区四区欧美| 国产亚洲1区2区3区| 午夜精品中文字幕| 亚洲欧美一区在线| 精品欧美一区二区在线观看视频 | 国产区高清在线| 欧美精品第1页| 免费一级特黄特色大片| 久久久天堂av| 思思久久精品视频| 黄色精品网站| 日韩久久不卡| 清纯唯美激情亚洲| 欧洲亚洲妇女av| 欧美成人二区| 日韩福利视频在线观看| 正在播放木下凛凛xv99| 亚洲一区二区三区四区五区黄| 亚洲天堂网一区二区| 久久99日本精品| 精品视频在线观看一区| 波多野结衣在线观看一区二区三区 | 日本国产欧美| 久久99精品久久久久久噜噜| 日本大片在线观看| 欧美一级高清片| 亚洲天堂男人av| 亚洲一区在线观看免费观看电影高清 | 久久久精品中文字幕| 五月婷婷六月丁香| 7777精品伊人久久久大香线蕉超级流畅 | 欧美自拍偷拍网| www..com久久爱| 午夜视频在线网站| 久久九九免费| 日韩视频一二三| 欧美在线色图| 鲁鲁狠狠狠7777一区二区| 久久伊人久久| 国产精品网站入口| 欧美国产大片| 亚洲91精品在线| 成人影欧美片| 中文字幕国产精品| 色视频在线看| 欧美精品一区二区在线观看| 亚洲在线观看av| 色先锋资源久久综合| 亚洲国产精一区二区三区性色| 一区在线播放视频| 欧美午夜激情影院| 26uuu久久天堂性欧美| 午夜福利三级理论电影| 国产毛片精品视频| 不卡的在线视频| 男女视频一区二区| 国产成人无码av在线播放dvd| 激情婷婷久久| 青青视频免费在线| 91精品天堂福利在线观看| 午夜精品美女久久久久av福利| 日韩最新在线| 精品亚洲欧美日韩| 欧美日韩精品一区二区三区在线观看| 99久久国产免费免费| 久久9999免费视频| 91久久伊人青青碰碰婷婷| 99视频有精品高清视频| 国产精品一区二区女厕厕| 一呦二呦三呦精品国产| 国产精品扒开腿爽爽爽视频| 伊人成综合网站| 热99精品只有里视频精品| 韩日精品一区二区| 国产mv久久久| 成人网ww555视频免费看| 国产精品观看在线亚洲人成网| 日韩和的一区二在线| 国产精品久久久久久久久久免费 | 日本中文字幕在线播放| 最近中文字幕2019免费| 天天综合视频在线观看| www.久久撸.com| 色的视频在线免费看| 久久精品小视频| 日本在线观看高清完整版| 久久免费少妇高潮久久精品99| 成人福利影视| 欧美一区二区.| 日韩精品免费观看视频| 国产伦精品一区二区三区精品视频| 日韩一区二区三区四区五区| 91久久精品美女高潮| 日本高清久久| 久久狠狠久久综合桃花| 狠狠综合久久av一区二区蜜桃| 视频一区国产精品| 91精品观看| 日韩一级性生活片| 久久精品二区三区| www.久久av.com| 高清国产一区二区| 少妇毛片一区二区三区| 国产精品色婷婷| 精品99在线观看| 欧美日韩在线一区| 在线观看中文字幕网站| 欧美videossexotv100| 麻豆国产在线播放| 欧美精品日韩www.p站| 精精国产xxxx视频在线野外| 国产精品免费视频xxxx| 蜜桃精品一区二区三区| 精品无码久久久久国产| 久久激情电影| 国产夫妻自拍一区| 日韩成人免费电影| 91精品人妻一区二区三区蜜桃2| 99久久精品99国产精品| 懂色av蜜臀av粉嫩av永久| 亚洲在线一区二区三区| 免费又黄又爽又猛大片午夜| 欧美一区三区四区| 欧美性孕妇孕交| 精品少妇v888av| www.成人爱| 97神马电影| 欧美一级淫片| 国产妇女馒头高清泬20p多| 美女脱光内衣内裤视频久久影院| 中文字幕乱视频| 成人免费视频在线观看| 伊人手机在线视频| 欧美成人vps| 9191在线观看| 欧洲亚洲女同hd| 一区二区在线视频观看| 亚洲欧洲免费无码| 欧美亚洲专区| 在线观看免费视频国产| 亚洲欧洲美洲综合色网| 天堂网一区二区| 亚洲激情视频在线| 免费毛片在线看片免费丝瓜视频| 国产精品久久久久久影视| 久久免费视频66| 热久久最新网址| 韩国成人精品a∨在线观看| 国产一区自拍视频| 日本久久一二三四| 日本免费黄视频| 丰满放荡岳乱妇91ww| 免费精品在线视频| 欧美亚洲国产怡红院影院| 黄色大全在线观看| 日韩高清a**址| 性xxxxfjsxxxxx欧美| 国产中文字幕日韩| 第一会所sis001亚洲| 亚洲熟妇av一区二区三区| 91在线视频播放| 日本一二三区视频| 日韩欧美高清在线| av网站大全在线| 亚洲在线免费视频| 中文字幕av亚洲精品一部二部| 欧美日韩在线观看不卡| 国产拍揄自揄精品视频麻豆| 五月天激情四射| 亚洲色在线视频| 三级成人黄色影院| 日韩精品另类天天更新| 日韩二区在线观看| 亚洲精品国产精品国自产网站| 欧美性猛交99久久久久99按摩| 特黄aaaaaaaaa真人毛片| 国模视频一区二区三区| 国产伦乱精品| 日本十八禁视频无遮挡| 99国产精品99久久久久久| www.国产高清| 亚洲免费视频在线观看| 香蕉视频亚洲一级| 先锋影音一区二区三区| 蜜臂av日日欢夜夜爽一区| 国产又色又爽又高潮免费| 欧美高清视频在线高清观看mv色露露十八 | 欧美猛男性生活免费| 国产伦精品一区二区三区在线播放 | 精品999在线播放| h片在线观看下载| 精品一区久久| 三级欧美韩日大片在线看| 男人的天堂av网| 在线综合视频播放| 24小时免费看片在线观看| 欧美日韩一区二区三区在线观看免 | 亚洲图片一区二区| 三级在线电影| 成人精品久久久| 亚洲成人中文| 性猛交娇小69hd| 91精品欧美久久久久久动漫| 美女91在线| 日本一区网站| 国产一区日韩二区欧美三区| av大片免费在线观看| 国产亚洲精品久久久久久牛牛| 99久久999| 国产一级爱c视频| 欧美国产一区二区| 亚洲成人精品女人久久久| 国产成人av在线播放| 午夜影院欧美| 国产麻豆天美果冻无码视频| 欧美偷拍一区二区| 激情影院在线| 日韩中文字幕一区二区| 国产黄色91视频| 午夜精品免费观看| 欧美国产在线视频| 精品国产1区| 婷婷五月精品中文字幕| 欧美日韩一区久久| 国产美女高潮在线| 亚洲日本无吗高清不卡| a亚洲天堂av| 国产乱码精品一区二三区蜜臂| 51精品国产黑色丝袜高跟鞋| 亚州av乱码久久精品蜜桃| 丝袜美腿中文字幕| 日韩女优av电影| 亚洲青青久久|