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

Quarkus依賴注入之二:Bean的作用域

開發 前端
Bean的作用域(Scope),每個Bean的作用域是唯一的,不同類型的作用域,決定了各個Bean實例的生命周期,例如:何時何處創建,又何時何處銷毀。

關于bean的作用域(scope)

  • 官方資料:https://lordofthejars.github.io/quarkus-cheat-sheet/#_injection
  • 上一篇《quarkus依賴注入之一:創建bean
  • 作為《quarkus依賴注入》系列的第二篇,繼續學習一個重要的知識點:bean的作用域(scope),每個bean的作用域是唯一的,不同類型的作用域,決定了各個bean實例的生命周期,例如:何時何處創建,又何時何處銷毀。
  • bean的作用域在代碼中是什么樣的?回顧前文的代碼,如下,ApplicationScoped就是作用域,表明bean實例以單例模式一直存活(只要應用還存活著),這是業務開發中常用的作用域類型:
@ApplicationScoped
public class ClassAnnotationBean {

    public String hello() {
        return "from " + this.getClass().getSimpleName();
    }
}
  • 作用域有多種,如果按來源區分一共兩大類:quarkus內置和擴展組件中定義,本篇聚焦quarkus的內置作用域
  • 下面是整理好的作用域一覽,接下來會逐個講解。

常規作用域和偽作用域

  • 常規作用域,quarkus官方稱之為normal scope,包括:ApplicationScoped、RequestScoped、SessionScoped三種。
  • 偽作用域稱之為pseudo scope,包括:Singleton、RequestScoped、Dependent兩種。
  • 接下來,用一段最平常的代碼來揭示常規作用域和偽作用域的區別。
  • 下面的代碼中,ClassAnnotationBean的作用域ApplicationScoped就是normal scope,如果換成Singleton就是pseudo scope了。
@ApplicationScoped
public class ClassAnnotationBean {

    public String hello() {
        return "from " + this.getClass().getSimpleName();
    }
}
  • 再來看使用ClassAnnotationBean的代碼,如下所示,是個再平常不過的依賴注入。
@Path("/classannotataionbean")
public class ClassAnnotationController {

    @Inject
    ClassAnnotationBean classAnnotationBean;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String get() {
        return String.format("Hello RESTEasy, %s, %s",
                LocalDateTime.now(),
                classAnnotationBean.hello());
    }
}
  • 現在問題來了,ClassAnnotationBean是何時被實例化的?有以下兩種可能:
  1. 第一種:ClassAnnotationController被實例化的時候,classAnnotationBean會被注入,這時ClassAnnotationBean被實例化。
  2. 第二種:get方法第一次被調用的時候,classAnnotationBean真正發揮作用,這時ClassAnnotationBean被實例化。
  • 所以,一共有兩個時間點:注入時和get方法首次執行時,作用域不同,這兩個時間點做的事情也不同,下面用表格來解釋。

  • 至此,您應該明白兩種作用域的區別了:偽作用域的bean,在注入的時候實例化,常規作用域的bean,在注入的時候并未實例化,只有它的方法首次執行的時候才會實例化,如下圖:

  • 接下來細看每個作用域。

ApplicationScoped

  • ApplicationScoped算是最常用的作用域了,它修飾的bean,在整個應用中只有一個實例。

RequestScoped

  • 這是與當前http請求綁定的作用域,它修飾的bean,在每次http請求時都有一個全新實例,來寫一段代碼驗證。
  • 首先是bean類RequestScopeBean.java,注意作用域是RequestScoped,如下,在構造方法中打印日志,這樣可以通過日志行數知道實例化次數。
package com.bolingcavalry.service.impl;

import io.quarkus.logging.Log;
import javax.enterprise.context.RequestScoped;

@RequestScoped
public class RequestScopeBean {

    /**
     * 在構造方法中打印日志,通過日志出現次數對應著實例化次數
     */
    public RequestScopeBean() {
        Log.info("Instance of " + this.getClass().getSimpleName());
    }

    public String hello() {
        return "from " + this.getClass().getSimpleName();
    }
}
  • 然后是使用bean的代碼,是個普通的web服務類。
package com.bolingcavalry;

import com.bolingcavalry.service.impl.RequestScopeBean;
import javax.inject.Inject;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;

@Path("/requestscope")
public class RequestScopeController {

    @Inject
    RequestScopeBean requestScopeBean;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String get() {
        return String.format("Hello RESTEasy, %s, %s",
                LocalDateTime.now(),
                requestScopeBean.hello());
    }
}
  • 最后是單元測試代碼RequestScopeControllerTest.java,要注意的是注解RepeatedTest,有了此注解,testGetEndpoint方法會重復執行,次數是注解的value屬性值,這里是10次。
package com.bolingcavalry;

import com.bolingcavalry.service.impl.RequestScopeBean;
import io.quarkus.test.junit.QuarkusTest;
import org.junit.jupiter.api.RepeatedTest;
import org.junit.jupiter.api.Test;

import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.containsString;

@QuarkusTest
class RequestScopeControllerTest {

    @RepeatedTest(10)
    public void testGetEndpoint() {
        given()
                .when().get("/requestscope")
                .then()
                .statusCode(200)
                // 檢查body內容,是否含有ClassAnnotationBean.hello方法返回的字符串
                .body(containsString("from " + RequestScopeBean.class.getSimpleName()));
    }
}
  • 由于單元測試中接口會調用10次,按照RequestScoped作用域的定義,RequestScopeBean會實例化10次,執行單元測試試試吧。
  • 執行結果如下圖,紅框4顯示每次http請求都會觸發一次RequestScopeBean實例化,符合預期,另外還有意外收獲,稍后馬上就會提到。

  • 另外,請重點關注藍框和藍色注釋文字,這是意外收獲,居然看到了代理類的日志,看樣子代理類是繼承了RequestScopeBean類,于是父類構造方法中的日志代碼也執行了,還把代理類的類名打印出來了。
  • 從日志可以看出:10次http請求,bean的構造方法執行了10次,代理類的構造方法只執行了一次,這是個重要結論:bean類被多次實例化的時候,代理類不會多次實例化。

SessionScoped

  • SessionScoped與RequestScoped類似,區別是范圍,RequestScoped是每次http請求做一次實例化,SessionScoped是每個http會話,以下場景都在session范圍內,共享同一個bean實例:
  1. servlet的service方法。
  2. servlet filter的doFileter方法。
  3. web容器調用HttpSessionListener、AsyncListener、ServletRequestListener等監聽器。

Singleton

  • 提到Singleton,聰明的您是否想到了單例模式,這個scope也是此意:它修飾的bean,在整個應用中只有一個實例。
  • Singleton和ApplicationScoped很像,它們修飾的bean,在整個應用中都是只有一個實例,然而它們也是有區別的:ApplicationScoped修飾的bean有代理類包裹,Singleton修飾的bean沒有代理類。
  • Singleton修飾的bean沒有代理類,所以在使用的時候,對bean的成員變量直接讀寫都沒有問題(safely),而ApplicationScoped修飾的bean,請不要直接讀寫其成員變量,比較拿都是代理的東西,而不是bean的類自己的成員變量。
  • Singleton修飾的bean沒有代理類,所以實際使用中性能會略好(slightly better performance)。
  • 在使用QuarkusMock類做單元測試的時候,不能對Singleton修飾的bean做mock,因為沒有代理類去執行相關操作。
  • quarkus官方推薦使用的是ApplicationScoped。
  • Singleton被quarkus劃分為偽作用域,此時再回頭品味下圖,您是否恍然大悟:成員變量classAnnotationBean如果是Singleton,是沒有代理類的,那就必須在@Inject位置實例化,否則,在get方法中classAnnotationBean就是null,會空指針異常的。

  • 運行代碼驗證是否有代理類,找到剛才的RequestScopeBean.java,將作用域改成Singleton,運行單元測試類RequestScopeControllerTest.java,結果如下圖紅框,只有RequestScopeBean自己構造方法的日志。

  • 再將作用域改成ApplicationScoped,如下圖藍框,代理類日志出現。

Dependent

  • Dependent是個偽作用域,它的特點是:每個依賴注入點的對象實例都不同。
  • 假設DependentClinetA和DependentClinetB都用@Inject注解注入了HelloDependent,那么DependentClinetA引用的HelloDependent對象,DependentClinetB引用的HelloDependent對象,是兩個實例,如下圖,兩個hello是不同的實例。

Dependent的特殊能力

  • Dependent的特點是每個注入點的bean實例都不同,針對這個特點,quarkus提供了一個特殊能力:bean的實例中可以取得注入點的元數據。
  • 對應上圖的例子,就是HelloDependent的代碼中可以取得它的使用者:DependentClientA和DependentClientB的元數據。
  • 寫代碼驗證這個特殊能力。
  • 首先是HelloDependent的定義,將作用域設置為Dependent,然后注意其構造方法的參數,這就是特殊能力所在,是個InjectionPoint類型的實例,這個參數在實例化的時候由quarkus容器注入,通過此參數即可得知使用HelloDependent的類的身份。
@Dependent
public class HelloDependent {

    public HelloDependent(InjectionPoint injectionPoint) {
        Log.info("injecting from bean "+ injectionPoint.getMember().getDeclaringClass());
    }

    public String hello() {
        return this.getClass().getSimpleName();
    }
}
  • 然后是HelloDependent的使用類DependentClientA。
@ApplicationScoped
public class DependentClientA {

    @Inject
    HelloDependent hello;

    public String doHello() {
        return hello.hello();
    }
}
  • DependentClientB的代碼和DependentClientA一模一樣,就不貼出來了。
  • 最后寫個單元測試類驗證HelloDependent的特殊能力。
@QuarkusTest
public class DependentTest {

    @Inject
    DependentClientA dependentClientA;

    @Inject
    DependentClientB dependentClientB;

    @Test
    public void testSelectHelloInstanceA() {
        Class<HelloDependent> clazz = HelloDependent.class;

        Assertions.assertEquals(clazz.getSimpleName(), dependentClientA.doHello());
        Assertions.assertEquals(clazz.getSimpleName(), dependentClientB.doHello());
    }
}
  • 運行單元測試,如下圖紅框,首先,HelloDependent的日志打印了兩次,證明的確實例化了兩個HelloDependent對象,其次日志的內容也準確的將注入點的類的信息打印出來。

擴展組件的作用域

  • quarkus的擴展組件豐富多彩,自己也能按照官方指引制作,所以擴展組件對應的作用域也隨著組件的不同而各不相同,就不在此列舉了,就舉一個例子吧:quarkus-narayana-jta組件中定義了一個作用域javax.transaction.TransactionScoped,該作用域修飾的bean,每個事物對應一個實例。
  • 至此,quarkus作用域的了解和實戰已經完成,這樣一來,不論是使用bean還是創建bean,都能按業務需要來準確控制其生命周期了。
責任編輯:姜華 來源: 今日頭條
相關推薦

2023-07-11 09:14:12

Beanquarkus

2023-06-27 08:58:13

quarkusBean

2011-03-18 09:27:00

Spring

2025-11-17 07:45:45

SpringBean接口

2021-07-05 08:43:46

Spring Beanscope作用域

2023-09-05 08:23:56

SpringScope方法

2023-10-07 08:35:07

依賴注入Spring

2021-06-03 07:55:12

技術

2022-07-26 00:00:04

Maven作用域Java

2024-01-05 08:38:20

SpringBeanScope

2022-12-29 08:54:53

依賴注入JavaScript

2022-08-31 07:04:50

Bean作用域

2024-08-26 08:52:41

2023-03-08 09:59:39

SpringBean注入

2021-07-01 10:45:18

Bean對象作用域

2015-09-02 11:22:36

JavaScript實現思路

2011-05-31 10:00:21

Android Spring 依賴注入

2010-09-29 15:02:23

DHCP作用域

2025-11-17 07:45:46

SQL校驗Redis

2011-09-06 09:56:24

JavaScript
點贊
收藏

51CTO技術棧公眾號

在线观看国产精品视频| 天天干天天曰天天操| 黄色片在线免费看| 免费观看日韩av| 久久精品中文字幕免费mv| 潘金莲一级淫片aaaaa| 美女搞黄视频在线观看| 国产精品色婷婷| 国产区日韩欧美| 中文字幕在线网站| 影音先锋国产精品| 日韩视频永久免费观看| 素人fc2av清纯18岁| 国内不卡的一区二区三区中文字幕 | 亚洲午夜91| 最近2019年日本中文免费字幕| 免费a v网站| 国产精品亚洲欧美日韩一区在线| 一本大道综合伊人精品热热 | 久久字幕精品一区| 欧美多人乱p欧美4p久久| 性欧美一区二区| 18国产精品| 欧美肥妇毛茸茸| 欧美伦理片在线看| 国产v日韩v欧美v| 亚洲人妖av一区二区| 天堂√在线观看一区二区| 午夜成人免费影院| 丁香啪啪综合成人亚洲小说| 91精品视频网站| 最近中文字幕在线观看| 久久久久久黄| 91国产精品电影| 国产精品日日夜夜| 欧美黄色aaaa| 久久人人爽人人爽人人片亚洲| 极品人妻videosss人妻| 欧美sss在线视频| 亚洲国产精品电影在线观看| 无套内谢丰满少妇中文字幕| 综合欧美精品| 91精品国产欧美日韩| 天天摸天天舔天天操| jizz亚洲女人高潮大叫| 欧美影片第一页| 日本男人操女人| 亚洲www啪成人一区二区| 色综合咪咪久久| 六月激情综合网| 中文字幕乱码中文乱码51精品| 天天综合色天天综合| 尤物av无码色av无码| 日本不良网站在线观看| 欧美性猛交xxxx乱大交3| 男人日女人bb视频| 欧美magnet| 欧美三区在线观看| 日韩成人精品视频在线观看| 精品国产亚洲一区二区在线观看| 欧美一级片在线看| 91精品国产高清91久久久久久| 综合视频一区| 国产视频在线观看一区二区| 无码人妻aⅴ一区二区三区69岛| 欧美日韩中文一区二区| 中文字幕日韩欧美在线| 91麻豆精品成人一区二区| 欧美韩日精品| 欧美亚洲另类视频| 国语对白做受69按摩| 精品一区二区三区欧美| www.av一区视频| 日本福利午夜视频在线| 欧美精彩视频一区二区三区| 最近中文字幕免费mv| 麻豆av在线免费观看| 欧美日在线观看| 可以看污的网站| av动漫精品一区二区| 国产手机视频精品| 午夜爽爽爽男女免费观看| 亚洲一级黄色| 国产精品老女人视频| 国产成人av免费看| 26uuu亚洲| 日本免费在线视频观看| 91超碰在线| 欧美亚日韩国产aⅴ精品中极品| 亚欧美一区二区三区| 丝袜美腿综合| 久久亚洲欧美日韩精品专区 | 免费成人av在线| 99蜜桃在线观看免费视频网站| 日韩电影免费| 亚洲欧美日韩一区二区 | 激情综合网激情| 国产在线精品一区| 美女隐私在线观看| 狠狠做深爱婷婷久久综合一区| 99re精彩视频| 牲欧美videos精品| 九九热精品视频国产| 日韩三级一区二区| 成人午夜免费电影| 一区二区在线观看网站| 91精品论坛| 精品嫩草影院久久| 中文字幕资源站| 天堂成人免费av电影一区| 国产精品一区而去| 91cn在线观看| 欧美天堂亚洲电影院在线播放| 污污污www精品国产网站| 91成人看片| 国产剧情日韩欧美| 噜噜噜在线观看播放视频| 亚洲国产一区二区三区| 想看黄色一级片| 色88久久久久高潮综合影院| 欧美与欧洲交xxxx免费观看 | 国产一区二区三区视频免费| 国产主播在线观看| 国产成人综合亚洲91猫咪| 亚洲欧美日韩在线综合| 日韩三级影视| 亚洲欧美日韩在线高清直播| 日本一级黄色录像| 国产不卡视频一区| 九一免费在线观看| japansex久久高清精品| 日韩性xxxx爱| 亚洲天堂视频网| 中文字幕+乱码+中文字幕一区| 久久精品香蕉视频| 亚洲盗摄视频| 青青青国产精品一区二区| 五月激情婷婷网| 黄色一区二区三区| 国产黄色三级网站| 日韩视频中文| 麻豆av福利av久久av| 色戒汤唯在线| 亚洲跨种族黑人xxx| 四虎精品永久在线| 久久影院电视剧免费观看| 九九九九免费视频| 自拍偷拍欧美一区| 日韩av电影在线免费播放| 欧美91精品久久久久国产性生爱| 一本大道久久精品懂色aⅴ | 日韩成人精品一区| 国产美女高潮久久白浆| 欧美成年黄网站色视频| 337p亚洲精品色噜噜狠狠| 国产精品免费人成网站酒店 | y111111国产精品久久婷婷| av网址在线| 精品欧美久久久| 国产区在线观看视频| 91丨porny丨国产| 久久久久免费精品| 99热在线成人| 国产精品yjizz| 亚洲少妇视频| 综合网中文字幕| 国产夫绿帽单男3p精品视频| 亚洲成人av资源| 这里只有久久精品| 理论片日本一区| 91亚洲精品国产| 丝袜美腿综合| 国产综合在线观看视频| 日本h片在线观看| 亚洲精品自在久久| 国产精品高潮呻吟AV无码| 一区二区免费在线播放| 毛片网站免费观看| 精品一区二区在线播放| 热99这里只有精品| 日韩精品一区二区三区免费观看| 5566av亚洲| 奇米777日韩| 久操成人在线视频| 日本成人一区二区三区| 91精品国产综合久久久蜜臀粉嫩| 国产午夜精品一区二区理论影院| 国产午夜精品久久久久久免费视| 超碰在线免费av| 午夜在线视频观看日韩17c| 一区二区视频在线播放| 亚洲ab电影| 亚洲综合精品伊人久久| 午夜精品久久久久久久久久蜜桃| 欧美成人免费全部| av在线电影观看| 精品国产99国产精品| 中文字幕第31页| 午夜天堂影视香蕉久久| 色哟哟一一国产精品| 久久婷婷一区二区三区| 韩国黄色一级片| 蜜臀av性久久久久蜜臀aⅴ| 69sex久久精品国产麻豆| 色一情一区二区三区| 久久久999久久久| 日韩一区欧美小说| 特级西西人体wwwww| 狠狠狠色丁香婷婷综合激情| 国产在线青青草| 欧美福利电影在线观看| 色乱码一区二区三在线看| 成人性生交大片免费看96| 国产精品综合不卡av| 中文字幕影音在线| 久久免费观看视频| 老司机在线视频二区| 亚洲男子天堂网| 日本激情视频网站| 日韩午夜在线影院| 91免费视频播放| 欧美曰成人黄网| 中文字幕在线播| 欧美日韩午夜视频在线观看| 妺妺窝人体色www聚色窝仙踪| 中文字幕人成不卡一区| 亚洲AV无码成人精品区明星换面| 99视频超级精品| 中文字幕天堂av| 国产不卡高清在线观看视频| 亚洲理论中文字幕| 精品中文av资源站在线观看| 激情 小说 亚洲 图片: 伦| 美女精品在线观看| 精品一区二区中文字幕| 一本色道久久综合亚洲精品不卡| 国产尤物av一区二区三区| 欧美1区2区3区| 妞干网这里只有精品| 香蕉av一区二区| 一区中文字幕在线观看| 天天操综合网| 亚洲第一精品区| 午夜激情久久| 永久免费网站视频在线观看| 欧美影院一区| 成年女人18级毛片毛片免费| 激情视频一区二区三区| 免费一级特黄毛片| 亚洲女同同性videoxma| 欧美牲交a欧美牲交aⅴ免费真| 亚洲一区自拍| 美女黄色片视频| 免费成人av资源网| 一级网站在线观看| 国产成人精品三级| 国产chinese中国hdxxxx| 白白色亚洲国产精品| 欧美做受喷浆在线观看| 久久久国际精品| 日本视频在线免费| 亚洲精品国产一区二区精华液 | 91综合在线| 特级西西人体www高清大胆| 欧美三级免费| 日韩在线视频在线观看| 日产欧产美韩系列久久99| 中文av字幕在线观看| 福利一区在线观看| 少妇精品一区二区三区| 国产精品三级av| 亚洲国产成人精品综合99| 精品露脸国产偷人在视频| 天堂网一区二区| 日韩一区二区三区电影| 好男人www在线视频| 国产亚洲免费的视频看| 久热国产在线| 欧美一区二区影院| 一级欧美视频| 久久精品国产理论片免费| 日韩精品一区二区久久| 日韩小视频网站| 日本视频一区二区三区| 免费看三级黄色片| 国产精品午夜春色av| 久久国产精品二区| 在线观看视频一区二区欧美日韩| 精品人妻一区二区三区含羞草| 亚洲国产一区二区三区四区 | 久久久午夜视频| 国产成人免费9x9x人网站视频| www.成人三级视频| 久久国产综合| 黄色免费福利视频| 久草这里只有精品视频| 国产人妻人伦精品1国产丝袜| 亚洲三级在线看| 亚洲av无码不卡| 亚洲二区在线播放视频| 黄网页在线观看| 国产精品99久久99久久久二8| 日韩中文字幕无砖| 亚洲精品在线免费| 性感少妇一区| 涩视频在线观看| 亚洲欧洲精品成人久久奇米网| 精品人妻一区二区三区免费看| 日韩女优电影在线观看| 337p日本欧洲亚洲大胆鲁鲁| 欧美有码在线观看| 国产精品玖玖玖在线资源| 糖心vlog在线免费观看| 日本最新不卡在线| 国产熟妇搡bbbb搡bbbb| 午夜精品影院在线观看| 国产富婆一级全黄大片| 日韩亚洲国产中文字幕| 日韩一区二区三区免费视频| 免费在线观看91| 亚洲少妇自拍| 日本一级片在线播放| 亚洲乱码日产精品bd| 国产精品国产av| 中文字幕亚洲欧美日韩高清| 久久91导航| 日本一区二区三区视频免费看| 亚洲激情精品| 天天躁日日躁狠狠躁av麻豆男男| 一区二区三区精品视频| 99热这里只有精品在线| 超碰97人人做人人爱少妇| 欧美成人黄色| 亚洲一区二区三区四区中文| 奇米精品一区二区三区四区| 一区二区伦理片| 欧美亚一区二区| 日本在线免费| 成人精品在线视频| 一区二区三区午夜探花| 亚洲网中文字幕| 亚洲欧美激情小说另类| 国产99视频在线| 久久99国产精品自在自在app| 免费观看亚洲视频大全| 粉嫩av一区二区三区天美传媒| 国产麻豆精品95视频| 欧美成人片在线观看| 精品少妇一区二区三区日产乱码 | 国产视频精品久久| 国产精品久久久久久av下载红粉| 国产精品一区高清| 欧美午夜aaaaaa免费视频| 国产精品无人区| 国产免费黄色录像| 欧美激情一区二区三区在线视频观看 | 国产精品一区二区x88av| 久草中文在线视频| 亚洲精品大尺度| 成人啊v在线| 一级黄色免费在线观看| 国产成人免费视频网站高清观看视频| 国产成人精品av久久| 亚洲老司机av| 粉嫩91精品久久久久久久99蜜桃| 国产精品波多野结衣| 国产成人在线视频播放| 在线观看亚洲天堂| 中文字幕日韩欧美| 成人三级毛片| 欧美综合在线观看视频| 亚洲欧洲精品天堂一级| 秋霞av鲁丝片一区二区| 国产精品夫妻激情| 欧美精品不卡| 亚洲做受高潮无遮挡| 5月丁香婷婷综合| 99re6在线精品视频免费播放| 日本中文不卡| 国产99精品国产| 国产一区二区视频免费| 美日韩在线视频| 亚洲人成亚洲精品| 久久国产剧场电影| 黄色一级视频在线播放| 成人做爰69片免费看网站| 久久精品视频7| 久久九九全国免费精品观看| 黄色免费大全亚洲| 国产三级三级看三级| 亚洲一区二区三区自拍| 国产福利在线看| 国产精品白丝jk白祙| 秋霞午夜av一区二区三区| 成人91视频| 亚洲另类自拍| 日本中文在线视频| 日韩成人网免费视频| 羞羞视频在线观看一区二区| 欧美在线观看成人|