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

日本免费福利视频| 黄色成人在线免费观看| 波多野结衣电车痴汉| 成人短片线上看| 91精品国产aⅴ一区二区| 8x8x华人在线| 天堂影院在线| 精品一区中文字幕| 国内外成人免费激情在线视频| aaaaa级少妇高潮大片免费看| 精品自拍视频| 亚洲第一久久影院| 色狠狠久久av五月综合| 午夜精品久久久久久久99热黄桃| 久久久xxx| 欧美夫妻性视频| 中文字幕av久久爽一区| 亚洲一二av| 欧美亚洲自拍偷拍| 极品粉嫩国产18尤物| 一区二区高清不卡| 91免费看视频| 亚洲aⅴ日韩av电影在线观看 | 久久久中文字幕| 日本人亚洲人jjzzjjz| 高清一区二区三区| 91精品午夜视频| 亚欧在线免费观看| 欧美猛烈性xbxbxbxb| 久久亚洲综合色一区二区三区| 成人网在线免费观看| 在线观看日本网站| 在线播放日韩| 欧美裸体xxxx极品少妇| 中国1级黄色片| 视频一区欧美| 日韩激情视频在线| 国产一卡二卡三卡四卡| 国产日本亚洲| 欧美一区二区三区思思人| 国产超碰在线播放| 婷婷午夜社区一区| 欧美视频第一页| 日本a在线免费观看| 欧美人与性动交α欧美精品济南到| 国产精品你懂的| 日韩少妇中文字幕| 久热av在线| 久久婷婷色综合| 蜜桃久久精品乱码一区二区 | 国产一级性生活| 亚洲成人99| 久久久国产成人精品| 欧美一级特黄高清视频| 久久国产中文字幕| 精品久久久av| 亚洲二区在线播放| 小小影院久久| 欧美成人激情图片网| 91九色丨porny丨极品女神| 午夜激情久久| 久久最新资源网| 18岁成人毛片| 亚洲国产免费| 91福利视频网| 婷婷激情五月综合| 精品一区中文字幕| 99久热re在线精品996热视频| www男人的天堂| 成人av在线网| 欧美二区在线看| 国产三级在线看| 国产精品无遮挡| 一区二区三区四区在线视频| 男人和女人做事情在线视频网站免费观看 | 肥臀熟女一区二区三区| av色综合久久天堂av综合| 美女被啪啪一区二区| 毛片在线播放网站| 中文字幕一区二区三区色视频| 在线观看国产一区| 日韩精品卡一| 欧美性猛交xxxx偷拍洗澡| 亚洲激情在线观看视频| 色综合视频一区二区三区44| 日韩午夜在线观看| 黄色性生活一级片| 色天天综合网| 高清欧美一区二区三区| 中文字幕免费在线观看视频| 日本不卡视频一二三区| 亚洲xxx大片| 欧美理论在线观看| 国产精品久久久久久妇女6080| 熟女视频一区二区三区| 福利影院在线看| 欧美午夜电影在线播放| 四虎精品一区二区| 欧美日韩一区二区综合| 久久九九全国免费精品观看| 亚洲精品国产精品乱码| 免费xxxx性欧美18vr| 91嫩草在线| 国产高清视频在线播放| 一区二区三区中文免费| 久久婷婷国产精品| 欧美专区一区| 永久免费看mv网站入口亚洲| 久草成人在线视频| 日韩国产精品久久久| 成人激情av| chinese偷拍一区二区三区| 夜夜嗨av一区二区三区四季av| 精品国产成人av在线免| 欧美一区一区| 日韩中文字幕在线视频| 日韩不卡在线播放| 国产91精品露脸国语对白| 视频一区二区精品| 亚洲黄色网址| 精品88久久久久88久久久| 欧美xxxooo| 日韩制服丝袜av| 国产精品一区视频| 日本精品在线| 在线日韩国产精品| 久久精品一区二区免费播放| 欧美特黄a级高清免费大片a级| 国产精品旅馆在线| 亚州av在线播放| 亚洲国产三级在线| 欧美体内she精高潮| 日韩精品一卡| 国产精品国语对白| 欧美精品久久久久久久久久丰满| 亚洲午夜日本在线观看| 99999精品| 久久精品av| 国产精品久久久久久久久久免费 | 亚洲欧洲日韩综合二区| 久久久久久久| 精品香蕉一区二区三区| 日韩av一二三区| 成人做爰69片免费看网站| 日韩一级特黄毛片| 久久久久毛片免费观看| 久久久久999| 一区二区日韩在线观看| 中文av一区二区| 波多结衣在线观看| 精品国产a一区二区三区v免费| 51ⅴ精品国产91久久久久久| 天天操天天干天天舔| 亚洲一级二级在线| 亚洲欧美高清在线| 日韩一级精品| 欧美连裤袜在线视频| 成人性生活av| 一本色道久久综合亚洲精品小说| 中文字幕xxxx| 国产三区在线成人av| 国产精品人人爽人人爽| 欧美一级精品片在线看| 国产精品自产拍在线观看| 麻豆传媒视频在线| 欧美刺激脚交jootjob| 国产一级aa大片毛片| 99精品黄色片免费大全| 热久久精品国产| 日韩av二区| 91在线精品播放| 男插女视频久久久| 日韩乱码在线视频| 波多野结衣电车痴汉| 中文字幕欧美一| 午夜诱惑痒痒网| 亚洲激情亚洲| 欧美一区二区三区在线免费观看 | 欧美成年黄网站色视频| 日韩欧美区一区二| 日韩精品一区二区不卡| 国产欧美视频在线观看| 热久久久久久久久| 影音先锋亚洲一区| 日韩aⅴ视频一区二区三区| 亚洲国产天堂| 国内精品久久久久影院优| 日本福利午夜视频在线| 欧美日本韩国一区二区三区视频| 日本aⅴ在线观看| 99久久精品99国产精品| 亚州精品一二三区| 国产精品黄色| 日本在线观看一区二区| 亚洲成人1区| 51ⅴ精品国产91久久久久久| 久操视频在线| 日韩av最新在线观看| 一起草av在线| 欧美午夜激情视频| 永久免费看片视频教学| 99在线热播精品免费| 日本中文字幕二区| 国产一区91| 青草全福视在线| 欧美三级伦理在线| 国产精品午夜av在线| 久久亚洲国产精品尤物| 91黄色8090| 高h视频在线观看| 一区二区三区黄色| 欧洲av在线播放| 777xxx欧美| 精产国品一区二区| 亚洲国产成人91porn| 女人18毛片毛片毛片毛片区二| 91在线小视频| 绯色av蜜臀vs少妇| 麻豆一区二区99久久久久| 日本韩国欧美在线观看| 伊人久久大香线蕉综合四虎小说| 欧美一区免费视频| 免费福利视频一区| 99久久自偷自偷国产精品不卡| 欧美亚洲福利| 国产精品久久久久影院日本| 国产免费拔擦拔擦8x在线播放| 久久综合久久美利坚合众国| 高清性色生活片在线观看| 亚洲精品美女在线| 亚洲精品久久久久avwww潮水| 欧美日韩视频在线观看一区二区三区| 五月婷婷开心网| 亚洲国产另类av| 欧美成人片在线观看| 国产精品第四页| 成人无码av片在线观看| 久久精品一区二区| 免费成人蒂法网站| jiyouzz国产精品久久| 日本wwww色| 国产一区二区三区久久悠悠色av| 男操女免费网站| 麻豆一区二区三区| 天天爽人人爽夜夜爽| 免费高清成人在线| 在线观看av网页| 看国产成人h片视频| 波多野结衣天堂| 美女久久久精品| 亚洲 激情 在线| 免费观看日韩电影| av亚洲天堂网| 国产美女娇喘av呻吟久久| 三级黄色片播放| 国产精品99久久久久久有的能看| www.日本xxxx| 美日韩一级片在线观看| www.cao超碰| 国产美女在线观看一区| 三级网站免费看| 成人黄色777网| avtt香蕉久久| 国产日韩亚洲欧美综合| 午夜影院黄色片| 综合久久久久久| 久久午夜无码鲁丝片| 性做久久久久久久久| 日本三级小视频| 在线观看亚洲专区| 一级黄色录像大片| 日韩亚洲欧美一区二区三区| 亚洲精品97久久中文字幕无码| 亚洲国模精品私拍| 欧美3p视频在线观看| 日韩在线视频导航| 亚洲男同gay网站| 91精品国产高清自在线| 午夜欧美巨大性欧美巨大| 成人精品视频久久久久 | 好看的日韩精品视频在线| 免费电影一区二区三区| 亚洲在线视频一区二区| 狠狠色狠狠色综合日日tαg| 国产原创中文在线观看 | 五月天婷婷影视| www.亚洲人| 久久午夜精品视频| 亚洲综合av网| 波多野结衣高清在线| 日韩一级成人av| 国产在线观看黄| 欧美xxxx做受欧美.88| 热色播在线视频| 国产日韩视频在线观看| 高清日韩中文字幕| 亚洲三区四区| 一区二区日本视频| 日韩精品视频一二三| 成人av免费在线| 2017亚洲天堂| 欧美日韩综合视频| www.麻豆av| 国产午夜精品视频免费不卡69堂| 菠萝菠萝蜜在线视频免费观看| 91精品国产色综合久久不卡98| 国产毛片精品久久| 久久99精品久久久久久青青日本| 久久综合99| 国产精品丝袜久久久久久消防器材| 久久成人久久爱| 色噜噜日韩精品欧美一区二区| 伊人一区二区三区| 国产成人a v| 日韩精品在线观看一区| 少妇av在线| 成人免费激情视频| 精品美女在线视频| 免费观看美女裸体网站| 国产成人在线视频免费播放| 欧美丰满美乳xxⅹ高潮www| 欧美色xxxx| 狠狠人妻久久久久久综合麻豆| 中文字幕在线观看亚洲| 神马久久资源| 精品久久蜜桃| 狠狠综合久久| 久久精品亚洲天堂| 国产精品欧美综合在线| 日本久久综合网| 日韩精品中文字幕视频在线| 成年人在线网站| 国产精品v欧美精品v日韩| 亚洲精品小说| 国产又黄又猛的视频| 国产精品天干天干在观线| 在线免费观看av网址| 日韩精品黄色网| 999精品网| 国产精品区免费视频| 在线观看日韩av电影| 特级特黄刘亦菲aaa级| 亚洲在线观看免费| 亚洲精品一区二区三区区别| 欧美另类69精品久久久久9999| 高清久久精品| 手机在线视频你懂的| 国产美女视频一区| 美女毛片在线观看| 精品国产免费久久| √8天堂资源地址中文在线| 肥熟一91porny丨九色丨| 欧美大片专区| 69xxx免费视频| 亚洲成人av一区二区三区| 成人午夜视频一区二区播放| 欧美精品久久一区二区| 国产精品nxnn| 成人毛片一区二区| 久久人人超碰精品| 日韩黄色片网站| 日韩中文在线中文网三级| 96sao精品免费视频观看| 美国av在线播放| 国产高清无密码一区二区三区| 久久久久无码国产精品| 亚洲国产日韩欧美在线动漫| 欧美sm一区| 亚洲午夜久久久影院伊人| 精品在线视频一区| www.youjizz.com亚洲| 日韩不卡中文字幕| 日韩一区二区三区在线免费观看| 一区二区视频国产| 国产成人精品免费网站| 在线观看亚洲天堂| 伊人av综合网| 久久69av| 黄色一级视频片| 中文字幕av一区二区三区免费看| 国产精品久久久久久久免费| 国模视频一区二区三区| 要久久爱电视剧全集完整观看| 欧美精品久久久久久久久25p| 亚洲免费在线观看视频| 亚洲 另类 春色 国产| 国产精品视频区1| 国产一区视频在线观看免费| 亚洲欧美色图视频| 欧美区在线观看| 黄色在线网站噜噜噜| 日韩欧美一区二区在线观看| 国产精品一区二区久久不卡| 久久国产视频一区| 成年人精品视频| 国产成人精品三级高清久久91| 福利片一区二区三区| 天天操天天综合网| 日本高清中文字幕在线| 久久久影院一区二区三区|