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

BeanUtils.copyProperties的11個坑

開發 前端
淺拷貝是指創建一個新對象,該對象的屬性值與原始對象相同,但對于引用類型的屬性,仍然共享相同的引用。換句話說,淺拷貝只復制對象及其引用,而不復制引用指向的對象本身。

前言

大家好,我是田螺。

我們日常開發中,經常涉及到DO、DTO、VO對象屬性拷貝賦值,很容易想到org.springframework.beans.BeanUtils的copyProperties 。它會自動通過反射機制獲取源對象和目標對象的屬性,并將對應的屬性值進行復制??梢詼p少手動編寫屬性復制代碼的工作量,提高代碼的可讀性和維護性。

但是你知道嘛?使用BeanUtils的copyProperties ,會有好幾個坑呢,今天田螺哥給大家盤點一下哈:

圖片

第1個坑:類型不匹配

@Data
public class SourceBean {
    private Long age;
}

@Data
public class TargetBean {
    private String age;
}

public class Test {

    public static void main(String[] args) {
        SourceBean source = new SourceBean();
        source.setAge(25L);

        TargetBean target = new TargetBean();
        BeanUtils.copyProperties(source, target);

        System.out.println(target.getAge());  //拷貝賦值失敗,輸出null
    }
}

在上述demo中,源對象SourceBean的age屬性是一個Long類型,而目標對象TargetBean的age屬性是一個String類型。由于類型不匹配,BeanUtils.copyProperties不會賦值成功的。我跑demo的結果,控制臺輸出null。

第2個坑: BeanUtils.copyProperties是淺拷貝

先給大家復習一下,什么是深拷貝?什么是淺拷貝?

  • 淺拷貝是指創建一個新對象,該對象的屬性值與原始對象相同,但對于引用類型的屬性,仍然共享相同的引用。換句話說,淺拷貝只復制對象及其引用,而不復制引用指向的對象本身。
  • 深拷貝是指創建一個新對象,該對象的屬性值與原始對象相同,包括引用類型的屬性。深拷貝會遞歸復制引用對象,創建全新的對象,以確??截惡蟮膶ο笈c原始對象完全獨立。

圖片

我再給個代碼demo給大家看看哈:

public class Address {
    private String city;
    //getter 和 setter 方法省略
}

public class Person {
    private String name;
    private Address address;
    //getter 和 setter 方法省略
}

 Person sourcePerson = new Person();
 sourcePerson.setName("John");
 Address address = new Address();
 address.setCity("New York");
 sourcePerson.setAddress(address);

 Person targetPerson = new Person();
 BeanUtils.copyProperties(sourcePerson, targetPerson);

 sourcePerson.getAddress().setCity("London");

 System.out.println(targetPerson.getAddress().getCity());  // 輸出為 "London"

在上述示例中,源對象Person的屬性address是一個引用類型。當使用BeanUtils.copyProperties方法進行屬性復制時,實際上只復制了引用,即目標對象targetPerson的 address 屬性引用和源對象 sourcePerson 的 address 屬性引用指向同一個對象。因此,當修改源對象的address對象時,目標對象的address對象也會被修改。

大家日常開發中,要注意這個坑哈~

第3個坑:屬性名稱不一致

public class SourceBean {
    private String username;

    // getter 和 setter 方法省略
}

public class TargetBean {
    private String userName;
    // getter 和 setter 方法省略
}

 SourceBean source = new SourceBean();
 source.setUsername("撿田螺的小男孩");

 TargetBean target = new TargetBean();
 BeanUtils.copyProperties(source, target);

 System.out.println(target.getUserName());   // 輸出為 null

在上述示例中,源對象SourceBean 的屬性名稱是username,而目標對象TargetBean的屬性名稱也是userName。但是,兩個 username,一個N是大寫,一個n是小寫,即屬性名稱不一致,BeanUtils.copyProperties方法無法自動映射這些屬性(無法忽略大小寫自動匹配),因此目標對象的userName屬性值為null。

大家日常開發中,要注意這個坑哈~ 比如大小寫不一致,差一兩個字母等等。

第4個坑:Null 值覆蓋

@Data
public class SourceBean {

    private String name;
    private String address;

}

@Data
public class TargetBean {

    private String name;
    private String address;
}

SourceBean source = new SourceBean();
source.setName("John");
source.setAddress(null);

TargetBean target = new TargetBean();
target.setAddress("田螺address");
BeanUtils.copyProperties(source, target);

System.out.println(target.getAddress());  // 輸出為 null

在上述示例中,源對象 SourceBean 的 address 屬性值為 null。默認情況下,BeanUtils.copyProperties 方法會將源對象中的 null 值屬性覆蓋到目標對象中。因此,目標對象的 address 屬性值也為 null。

如果你不希望 null 值覆蓋目標對象中的屬性,可以使用 BeanUtils.copyProperties 方法的重載方法,并傳入一個自定義的 ConvertUtilsBean 實例來進行配置。

第5個坑:注意引入的包

BeanUtils.copyProperties其實有兩個包,分別是spring、apache。大家注意一下哈,這兩個包,是有點不一樣的:

//org.springframework.beans.BeanUtils(源對象在左邊,目標對象在右邊)
public static void copyProperties(Object source, Object target) throws BeansException 
//org.apache.commons.beanutils.BeanUtils(源對象在右邊,目標對象在左邊)
public static void copyProperties(Object dest, Object orig) throws IllegalAccessException, InvocationTargetException

大家使用的時候,要注意一下哈,注意自己引入的哪個BeanUtils,寫對應參數位置。

第6個坑:Boolean類型數據+is屬性開頭的坑

把SourceBean和TargetBean中的都有個屬性isTianLuo,它們的數據類型保持不變,但是一個為基本類型boolean,一個為包裝類型Boolean

@Data
public class SourceBean {
    private boolean isTianLuo;
}

@Data
public class TargetBean {
    private Boolean isTianLuo;
}

跑測試用里的時候,發現賦值不上:

SourceBean source = new SourceBean();
source.setTianLuo(true);

TargetBean target = new TargetBean();
BeanUtils.copyProperties(source, target);
System.out.println(target.getIsTianLuo()); // 輸出為 null

為什么呢?即使是一個包裝類型,一個基本類型,應該可以賦值上才對的。

這是因為當屬性類型為boolean時,屬性名以is開頭,屬性名會去掉前面的is,因此源對象和目標對象屬性對不上啦。

大家使用BeanUtils.copyProperties過程中,要注意哈~

第7個坑:查找不到字段引用

在某些開發場景呢,如果我們要修改某個字段的賦值,我們可能會全文搜索它的所有set方法,看哪些地方引用到。

圖片

但是呢,如果使用BeanUtils.copyProperties,就不知道是否引用到對應的ste方法啦,即查找不到字段引用。這就可能導致你會漏掉修改對應的字段。

圖片

第8個坑:不同內部類,即使相同屬性,也是賦值失敗

@Data
public class CopySource {

    public String outerName;
    public CopySource.InnerClass innerClass;

    @Data
    public static class InnerClass {
        public String InnerName;
    }
}

@Data
public class CopyTarget {
    public String outerName;
    public CopyTarget.InnerClass innerClass;

    @Data
   public static class InnerClass {
        public String InnerName;
    }
}

CopySource test1 = new CopySource();
test1.outerName = "outTianluo";

CopySource.InnerClass innerClass = new CopySource.InnerClass();
innerClass.InnerName = "innerTianLuo";
test1.innerClass = innerClass;

System.out.println(test1);
CopyTarget test2 = new CopyTarget();
BeanUtils.copyProperties(test1, test2);

System.out.println(test2);  //輸出CopyTarget(outerName=outTianluo, innerClass=null)

以上demo中,CopySource和CopyTarget各自存在一個內部類InnerClass,雖然這個內部類屬性也相同,類名也相同,但是在不同的類中,因此Spring會認為屬性不同,不會Copy;

如果要復制成功,可以讓他們指向同一個內部類。

第9個坑:bean對應的屬性,沒有getter和setter方法,賦值失敗

BeanUtils.copyProperties要拷貝屬性值成功,需要對應的bean要有getter和setter方法。因為它是用反射拿到set和get方法再去拿屬性值和設置屬性值的。

@Data
public class SourceBean {
    private String value;
}

@Getter   //沒有對應的setter方法
public class TargetBean {
    private String value;
}

SourceBean source = new SourceBean();
source.setValue("撿田螺的小男孩");

TargetBean target = new TargetBean();
BeanUtils.copyProperties(source, target);
System.out.println(target.getValue()); //輸出null

第10個坑:BeanUtils.copyProperties + 泛型

如果BeanUtils.copyProperties遇到泛型,也是很可能賦值失敗的哈。大家看下這個例子:

@Data
public class CopySource {

    public String outerName;
    public List<CopySource.InnerClass> clazz;

    @Data
    public static class InnerClass {
        public String InnerName;
    }
}

@ToString
@Data
public class CopyTarget {
    public String outerName;
    public List<CopyTarget.InnerClass> clazz;

    @Data
    public static class InnerClass {
        public String InnerName;
    }
}

CopySource test1 = new CopySource();
test1.outerName = "outTianluo";

CopySource.InnerClass innerClass = new CopySource.InnerClass();
innerClass.InnerName = "innerTianLuo";

List<CopySource.InnerClass> clazz = new ArrayList<>();
clazz.add(innerClass);
test1.setClazz(clazz);

System.out.println(test1);
CopyTarget test2 = new CopyTarget();
BeanUtils.copyProperties(test1, test2);

System.out.println(test2);  //輸出CopyTarget(outerName=outTianluo, clazz=null)

這里面的例子,BeanUtils.copyProperties方法拷貝包含泛型屬性的對象clazz。CopyTarget和CopySource的泛型屬性類型不匹配,因此拷貝賦值失敗。

第11個坑:性能問題

由于這些BeanUtils類都是采用反射機制實現的,對程序的效率也會有影響。我跑了個demo對比:

SourceBean sourceBean = new SourceBean();
sourceBean.setName("tianLuoBoy");
TargetBean target = new TargetBean();

long beginTime = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {  //循環10萬次
      target.setName(sourceBean.getName());
}
System.out.println("common setter time:" + (System.currentTimeMillis() - beginTime));

long beginTime1 = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {  //循環10萬次
    BeanUtils.copyProperties(sourceBean, target);
}
System.out.println("bean copy time:" + (System.currentTimeMillis() - beginTime1));

//輸出
common setter time:3
bean copy time:331

可以發現,簡單的setter和BeanUtils.copyProperties對比,性能差距非常大。因此,慎用BeanUtils.copyProperties?。?!

12. 替換BeanUtils.copyProperties的方案

以上聊了BeanUtils.copyProperties的11個坑,都是在跟大家聊,要慎用BeanUtils.copyProperties。那有沒有推薦替換它的方案呢。

第一種,那就是使用原始的setter和getter方法。

使用手動的setter方法進行屬性賦值。這種方法可能需要編寫更多的代碼,但是可以提供更細粒度的控制,并且在性能方面通常比BeanUtils.copyProperties更高效。

Target target = new Target();
target.setName(source.getName());
target.setAge(source.getAge());

如果實在對象bean的屬性比較多的話,可以使用插件GenerateAllSetter,它可以一鍵生成對象的set方法,挺方便的。

圖片

第二種方案,使用映射工具庫,如MapStruct、ModelMapper等,它們可以自動生成屬性映射的代碼。這些工具庫可以減少手動編寫setter方法的工作量,并提供更好的性能。

使用MapStruct的示例:

@Mapper
public interface SourceTargetMapper {
    SourceTargetMapper INSTANCE = Mappers.getMapper(SourceTargetMapper.class);

    @Mapping(source = "name", target = "name")
    @Mapping(source = "age", target = "age")
    Target mapToTarget(Source source);
}

Target target = SourceTargetMapper.INSTANCE.mapToTarget(source);

責任編輯:武曉燕 來源: 撿田螺的小男孩
相關推薦

2024-06-04 00:10:00

開發拷貝

2024-02-27 10:42:04

開發代碼測試

2022-12-07 08:45:45

工具Springweb

2022-12-09 07:53:20

vo2dto方法AOP

2019-09-25 10:37:16

SpringBeanUtils接口

2024-04-10 08:39:56

BigDecimal浮點數二進制

2020-06-12 11:03:22

Python開發工具

2018-01-20 20:46:33

2024-02-04 08:26:38

線程池參數內存

2021-10-19 08:00:00

Windows 11Windows微軟

2021-08-14 09:48:02

ReentrantLock多線編程

2022-03-09 09:43:20

并發編程Java

2024-11-26 08:20:53

程序數據歸檔庫

2021-11-05 07:59:25

HashMapJava知識總結

2022-08-16 08:27:20

線程毀線程異步

2025-07-25 09:02:56

2023-05-18 15:32:02

HTML開發技巧

2022-09-19 16:02:12

List代碼

2022-04-08 08:48:16

線上事故日志訂閱者

2024-05-06 00:00:00

緩存高并發數據
點贊
收藏

51CTO技術棧公眾號

欧美日韩在线播放一区二区| 国语自产精品视频在线看抢先版图片| 一区二区xxx| 永久免费av片在线观看全网站| 久久er99热精品一区二区| 麻豆乱码国产一区二区三区 | 久久久久久精| 亚洲香蕉在线视频| 亚洲午夜视频| 日韩福利视频在线观看| 香蕉视频禁止18| а√在线天堂官网| 国产亚洲精品中文字幕| 亚洲自拍另类欧美丝袜| 久久久久在线视频| 午夜久久黄色| 伊人久久大香线蕉av一区二区| 国产高清999| 三上悠亚亚洲一区| 亚洲妇熟xx妇色黄| 国产美女视频免费| 二区在线观看| 91色在线porny| 成人免费视频网站| 中文字幕一区二区人妻| 亚洲深夜av| 欧美精品在线网站| 国产aaaaaaaaa| 亚洲精品亚洲人成在线观看| 日韩欧美成人激情| 中文字幕亚洲影院| 日本中文字幕一区二区| 欧美日韩免费在线观看| 国产va亚洲va在线va| 国产在线观看a视频| 欧美国产日韩在线观看| 欧美精品亚洲| 五月天激情婷婷| 不卡一区中文字幕| av一区二区三区在线观看| 在线视频播放大全| 日韩二区在线观看| 国产成人精品在线| 日韩精品一区不卡| 亚洲一区不卡| 91av国产在线| 日韩乱码人妻无码中文字幕| 欧美激情性爽国产精品17p| 日韩精品在线影院| www.自拍偷拍| 日韩超碰人人爽人人做人人添| 精品久久一区二区三区| 国产91在线免费观看| 国产精品777777在线播放| 欧美日韩一区二区三区不卡 | 91日韩中文字幕| 五月天久久网站| 久久久国产精品视频| 国产麻豆a毛片| 一个色综合网| 欧美日韩成人黄色| 九九热视频精品| 国内久久视频| 久久久久中文字幕| 久久久99精品| 在线精品亚洲| 欧美伊久线香蕉线新在线| www.国产毛片| 青草av.久久免费一区| 成人精品一区二区三区电影黑人| 97超碰人人模人人人爽人人爱| 精品亚洲成a人| 99精品99久久久久久宅男| 亚洲国产综合网| 99精品一区二区| 日韩激情视频| 免费黄色电影在线观看| 一区二区三区高清| 北条麻妃在线视频观看| 成人做爰免费视频免费看| 欧美日韩国产精品成人| 中文字幕第66页| 久久久久久久久久久久久久久久久久久久 | 久久亚洲一区二区三区明星换脸 | 91欧美日韩| 九九九久久国产免费| 国产一级特黄aaa大片| 另类图片国产| 成人h片在线播放免费网站| www.热久久| 国产亚洲综合av| 永久免费在线看片视频| 久久影院午夜精品| 欧美欧美欧美欧美首页| 欧美日韩人妻精品一区在线| 精品国产精品国产偷麻豆| 久久亚洲欧美日韩精品专区| 国产成人免费观看视频| 久久99精品久久久久久久久久久久 | 天堂а√在线中文在线新版| 九九视频精品免费| 久久精品国产一区二区三区日韩 | 日韩欧美国产片| 嗯用力啊快一点好舒服小柔久久| 一区二区在线视频| 日韩av一二三区| 久久97超碰国产精品超碰| 国产伦精品一区二区三区四区视频| 国产三级在线免费| 亚洲国产视频在线| 手机av在线网| 久操精品在线| 欧美精品激情blacked18| 免费黄色一级大片| 99久久夜色精品国产网站| 一区精品在线| 欧美最新精品| 日韩不卡中文字幕| 久久精品99国产精| 久久69国产一区二区蜜臀| 欧美日韩精品不卡| 999福利在线视频| 日韩你懂的电影在线观看| 你懂得视频在线观看| 国产亚洲精品自拍| 国产精品一区在线播放| 在线网址91| 欧美日韩国产免费| 日本黄色小视频在线观看| 国产欧美日韩综合一区在线播放 | 日韩中文字幕免费在线| 国产精品一区二区三区美女| 欧美老女人性视频| 91中文字幕在线播放| 国产精品天天看| 中文字幕在线观看第三页| 亚洲精品3区| 97超级碰碰碰久久久| 亚洲精品视频专区| 一区二区三区小说| 青娱乐国产精品视频| 99久久九九| 国产自摸综合网| 在线免费av电影| 欧美综合色免费| 久久美女免费视频| 日本午夜精品视频在线观看| 日韩欧美激情一区二区| 电影天堂国产精品| 中文日韩电影网站| 在线播放亚洲精品| 国产精品乱人伦一区二区| 欧美三级午夜理伦三级富婆| 日韩精品午夜| 91情侣偷在线精品国产| 国产黄色在线网站| 精品日韩在线一区| 日本三级午夜理伦三级三| 成人精品免费看| 91av资源网| 国产精品片aa在线观看| 国产高清视频一区三区| av在线日韩国产精品| 欧美视频一区在线观看| 在线看的片片片免费| 国产精品亚洲а∨天堂免在线| av一区二区三区免费观看| 欧美日韩国产一区二区在线观看| 久久这里只有精品99| 亚洲AV无码一区二区三区少妇| 亚洲一区二区三区免费视频| 中文字幕在线播放视频| 石原莉奈一区二区三区在线观看| 视频三区二区一区| 国产亚洲高清一区| 欧美—级高清免费播放| 欧美一区二区视频| 欧美日韩国产高清一区二区三区 | 青青操视频在线| 欧美在线小视频| 69xx绿帽三人行| 99久久99久久精品免费观看| 中文字幕第80页| 欧美精品大片| 欧美一区二区三区精美影视| 一区二区三区日本视频| 久久久女人电视剧免费播放下载| 黄色av网址在线免费观看| 91精品婷婷国产综合久久| 男女视频免费看| 亚洲视频免费看| 中文字幕影片免费在线观看| 欧美96一区二区免费视频| 日韩一级特黄毛片| 精品精品99| 国产精品美女诱惑| 韩国精品视频在线观看 | 日本高清不卡码| 136国产福利精品导航| 蜜桃精品成人影片| 国内久久婷婷综合| 蜜臀av午夜一区二区三区| 亚洲天堂免费| 色一情一乱一伦一区二区三欧美| 亚洲国产欧美国产第一区| 国产成人在线亚洲欧美| 国产啊啊啊视频在线观看| 中文字幕一区二区三区电影| 亚洲 小说区 图片区 都市| 欧美一级片免费看| 中文字幕乱码人妻二区三区| 午夜精品一区在线观看| 亚洲综合网在线| 国产精品五月天| 日韩 中文字幕| 成人午夜短视频| 久久婷婷中文字幕| 男人的天堂亚洲一区| 六月丁香婷婷激情| 欧美喷水视频| dy888午夜| 欧美第一精品| 欧美一区国产一区| 全国精品免费看| 国产一区二区不卡视频在线观看 | 久久精品人人| 久久99久久久久久| 中文字幕人成人乱码| 一区二区不卡在线观看| 欧美女优在线视频| 久久亚洲午夜电影| 久久精品福利| 精品视频免费观看| 精品少妇3p| 精品日本一区二区三区在线观看| 91免费精品国偷自产在线在线| 91久久国产精品| 99亚洲男女激情在线观看| 国产在线精品成人一区二区三区| 欧美暴力调教| 国产精品成人一区二区三区吃奶| 二区三区不卡| 国产精品白嫩美女在线观看| 桃花岛成人影院| 国产精品久久久久国产a级| 成人免费直播| 国产精品久久激情| 成人精品高清在线视频| 国产精品久久久久久中文字| 成人在线中文| 成人福利网站在线观看11| 亚洲色图图片| 亚洲最大福利网站| 91九色鹿精品国产综合久久香蕉| 97人人模人人爽人人少妇| 亚洲一区二区三区免费| 国产精品久久久对白| 国产成人精品福利| 国产伦精品一区二区三| 欧美调教在线| 日本视频精品一区| 欧美1级片网站| 日本道在线视频| 欧美日本一区二区视频在线观看| 99在线观看视频免费| 一本久道久久综合狠狠爱| 日日摸日日碰夜夜爽av| 热久久免费视频| 三级av免费看| av在线一区二区| 中文字幕第20页| 亚洲情趣在线观看| 国产精品30p| 91久久国产综合久久| 伊人色综合久久久| 欧美成人三级在线| 久久天堂电影| 久久精品国产一区| av小说在线播放| 国产激情久久久| 精品国产不卡一区二区| 蜜桃av色综合| 91精品久久久久久久久久不卡| 免费高清一区二区三区| 国产精品综合色区在线观看| 日本一二区免费| 99精品视频中文字幕| 国产小视频你懂的| 亚洲成人免费视频| 中文字幕网址在线| 精品av综合导航| av男人的天堂在线| 欧美精品激情blacked18| 韩国三级一区| av免费观看久久| 日韩综合在线| 久久成人免费观看| 国产黄色精品网站| 白丝女仆被免费网站| 亚洲男同性视频| 69亚洲精品久久久蜜桃小说| 日韩欧美国产综合一区 | 国产午夜精品一区二区三区视频 | 日韩黄色影院| 欧美一二三视频| 日韩欧美久久| 先锋影音亚洲资源| 国产精品日本| 欧美精品色视频| 欧美高清在线一区| www.国产高清| 精品久久久久久最新网址| av免费在线一区二区三区| 亲子乱一区二区三区电影| 91成人精品在线| 在线一区日本视频| 日韩国产欧美在线观看| 日本japanese极品少妇| 一区二区三区四区蜜桃 | 亚洲成色www8888| 蜜桃av在线免费观看| 国产成人精品电影久久久| 国产精品调教| 日本阿v视频在线观看| 国产老肥熟一区二区三区| 你懂得视频在线观看| 色香蕉成人二区免费| 少妇高潮一区二区三区99小说| 久久影院模特热| 91精品网站在线观看| 亚洲日本欧美在线| 免费视频一区二区| 中国女人特级毛片| 色哟哟一区二区三区| 神马久久久久| 青草青草久热精品视频在线观看| 国产精品jk白丝蜜臀av小说| 欧美黄色免费网址| 国产成人午夜片在线观看高清观看| 极品美妇后花庭翘臀娇吟小说| 欧美无砖砖区免费| sese一区| 国产美女被下药99| 手机亚洲手机国产手机日韩| 国产91色在线观看| 国产精品护士白丝一区av| 中文字幕网址在线| 日韩中文字幕在线视频| 日韩毛片网站| 中文网丁香综合网| 激情六月婷婷久久| 全程偷拍露脸中年夫妇| 日韩一级片网址| 国产粉嫩在线观看| 久久久久天天天天| 日韩精品一二三| 丰满的亚洲女人毛茸茸| 欧美喷潮久久久xxxxx| av在线网址观看| 国产99在线免费| 亚洲伊人网站| 久久视频精品在线观看| 666欧美在线视频| 新版中文在线官网| 国产一区二区三区高清| 免费看的黄色欧美网站| 国产黄色片在线| 欧美一区二区网站| av男人的天堂在线观看| 欧美日韩一区二区三区免费| 久久精品国产99国产| 日本a级片视频| 亚洲国产中文字幕久久网| videos性欧美另类高清| 亚洲人成77777| 粉嫩嫩av羞羞动漫久久久| 啦啦啦免费高清视频在线观看| 在线播放日韩欧美| 日本在线视频一区二区三区| 欧美日韩二三区| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | bt欧美亚洲午夜电影天堂| 亚洲精品男人的天堂| 日韩在线视频一区| 激情小说亚洲色图| 一区二区在线播放视频| 亚洲美女视频一区| 欧洲亚洲在线| 亚洲影院高清在线| 久久看片网站| 精品欧美一区二区久久久久| 亚洲美腿欧美激情另类| 亚洲1区在线| 亚洲乱码国产一区三区| 一区二区三区免费网站| 国产精品免费播放| 国产精品国产亚洲精品看不卡15 | 国产精品视频久久| 在线成人国产| 欧美性x x x|