最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Quarkus中的依賴注入DI和面向切面aop編程

 更新時間:2022年02月22日 15:25:18   作者:kl  
這篇文章主要為大家介紹了Quarkus中的依賴注入DI和面向切面aop的編程規(guī)范思想,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步

前言

做java開發(fā)的肯定清楚spring中的核心思想ioc和aop,ioc即控制反轉(zhuǎn)的意思,di的核心思想和ioc一樣,描述的也是同一個事情同一個思想,只是di的依賴注入更容易被理解了,aop即面向切面,如注解事務(wù)功能,就是基于aop的思想來實現(xiàn)的。Quarkus中也實現(xiàn)了一套非標(biāo)準(zhǔn)的cdi規(guī)范,下面就來看看Quarkus中的di和aop相關(guān)內(nèi)容。

cdi規(guī)范協(xié)議:https://docs.jboss.org/cdi/spec/2.0/cdi-spec.html#introduction

JSR 365:Java 2.0的上下文和依賴注規(guī)范

該規(guī)范定義了一組功能強大的補充服務(wù),這些服務(wù)有助于改善應(yīng)用程序代碼的結(jié)構(gòu)。

  • 綁定到生命周期上下文的有狀態(tài)對象的定義良好的生命周期,其中上下文集是可擴展的
  • 復(fù)雜的類型安全的依賴項注入機制,包括在開發(fā)或部署時選擇依賴項的能力,而無需進行冗長的配置
  • 支持Java EE模塊化和Java EE組件體系結(jié)構(gòu)-解決Java EE組件之間的依賴關(guān)系時要考慮Java EE應(yīng)用程序的模塊化結(jié)構(gòu)
  • 與統(tǒng)一表達語言(EL)集成,允許在JSF或JSP頁面中直接使用任何上下文對象
  • 裝飾注入對象的能力
  • 通過類型安全的攔截器綁定將攔截器與對象相關(guān)聯(lián)的能力
  • 一個事件通知模型
  • 除了Java Servlets規(guī)范定義的三個標(biāo)準(zhǔn)Web上下文之外的Web 對話上下文
  • 允許便攜式擴展與容器完美集成的SPI

通俗的說,JSR365是一套java實現(xiàn)DI依賴注入功能的接口設(shè)計,具體的框架只要實現(xiàn)這條接口,就可以正常的提供依賴注入功能,Quarkus就是實現(xiàn)的這套api,但是沒有完全實現(xiàn),所有只有部分功能。這里不研究具體的規(guī)范協(xié)議,內(nèi)容太多了,有興趣的可以在上面的地址中翻閱,下面主要看看在Quarkus中,怎么使用的。

Bean聲明和依賴注入

/**
 * @author kl : http://kailing.pub
 * @version 1.0
 * @date 2020/7/13 16:55
 */
@ApplicationScoped
public class TestBean {
    @Inject
    Bean1 bean1;
}
@ApplicationScoped
class Bean1 {
    String ping() {
        return "Bean1";
    }
}

在Quarkus中,可以使用@Dependent,@ApplicationScoped,@Singleton,@RequestScoped和@SessionScoped等CDI中定義的注解去聲明一個Bean對象,支持 @Inject注解和構(gòu)造函數(shù)注入一個Bean。默認(rèn)情況下,本聲明的Bean都是延遲加載的,在應(yīng)用第一次接收請求時才會初始化這個bean,如果需要在應(yīng)用程序啟動時就加載Bean,需要在Bean上添加如下注解:

/**
 * @author kl : http://kailing.pub
 * @version 1.0
 * @date 2020/7/13 16:55
 */
@ApplicationScoped
@Startup
public class TestBean {
    @Inject
    Bean1 bean1;
}

Bean的生命周期

@ApplicationScoped
@Startup
public class TestBean {
    @Inject
    Bean1 bean1;

    @PostConstruct
    private void init(){
        System.out.println("實例化后調(diào)用");
    }
    @PreDestroy
    private void pre(){
        System.out.println("銷毀前調(diào)用");
    }
    void startup(@Observes StartupEvent event) {
        System.out.println("應(yīng)用啟動后調(diào)用");
    }
    void stop(@Observes ShutdownEvent event) {
        System.out.println("應(yīng)用關(guān)閉后調(diào)用");
    }
}

條件化初始Bean

/**
 * @author kl : http://kailing.pub
 * @version 1.0
 * @date 2020/7/13 16:55
 */
@ApplicationScoped
@Startup
public class TestBean {
    @Inject
    Bean1 bean1;
}
@Dependent
class BeanConfig{
    @Produces
    @IfBuildProperty(name = "quarkus.bean1.enabled", stringValue = "true")
    private Bean1 bean1(){
        return new Bean1();
    }
}
class Bean1 {
    String ping() {
        return "Bean1";
    }
}

如上,只有在配置文件中顯示的配置quarkus.bean1.enabled=true時,才會激活Bean1的初始化

面向切面編程aop

Quarkus中編寫aop的程序和spring中類似,首先定義一個切點注解

@Inherited
@InterceptorBinding
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Logging {
}

然后編寫切面類

@Logging
@Interceptor
 class LogInterceptor {
    private final Logger logger = LoggerFactory.getLogger(getClass());
    @AroundInvoke
    public Object logging(InvocationContext ic) throws Exception {
        logger.info("方法參數(shù):{}", ic.getParameters().toString());
        return ic.proceed();
    }
}

編寫切面類時,只需要在切面類上將自定義的注解標(biāo)注在類上即可,然后使用@AroundInvoke注解標(biāo)注方法,被攔截到方法時,方法調(diào)用信息會自動注入到InvocationContext中。Quarkus中的aop沒有spring中那么多的概念,只有環(huán)繞通知的使用方式。使用時,將自定義的注解標(biāo)注在類或者方法上即可

Bean列表接口

Quarkus在本地開發(fā)時,會自動注冊HTTP GET- /quarkus/arc/beans接口,返回所有Bean的列表

結(jié)語

以上,是Quarkus中依賴注入和面向切面的基本使用方式和技巧,雖然沒有spring的功能那么多那么細(xì)分。但是基本的功能都已具備了

以上就是Quarkus中的依賴注入DI和面向切面aop編程的詳細(xì)內(nèi)容,更多關(guān)于Quarkus中DI與aop編程的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java運行時數(shù)據(jù)區(qū)概述詳解

    Java運行時數(shù)據(jù)區(qū)概述詳解

    這篇文章主要介紹了Java運行時數(shù)據(jù)區(qū)概述,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java異常體系非正常停止和分類

    Java異常體系非正常停止和分類

    這篇文章主要介紹了Java異常體系非正常停止和分類,指的是程序在執(zhí)行過程中,出現(xiàn)的非正常的情況,最終會導(dǎo)致JVM的非正常停止更多相關(guān)內(nèi)容需要的朋友可以參考一下
    2022-06-06
  • Java使用continue語句的實例詳解

    Java使用continue語句的實例詳解

    這篇文章主要介紹了Java使用continue語句的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握使用方法,需要的朋友可以參考下
    2017-10-10
  • 為了多次讀取ServletInputStream引發(fā)的一系列問題

    為了多次讀取ServletInputStream引發(fā)的一系列問題

    這篇文章主要介紹了為了多次讀取ServletInputStream引發(fā)的一系列問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java Enum和String及int的相互轉(zhuǎn)化示例

    Java Enum和String及int的相互轉(zhuǎn)化示例

    這篇文章主要介紹了Java Enum和String及int的相互轉(zhuǎn)化示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • Java之SpringBoot-Thymeleaf詳情

    Java之SpringBoot-Thymeleaf詳情

    聊Thymeleaf,需要知道為什么到了SpringBoot中就不用JSP了?這跟SpringBoot打包方式有點關(guān)系,SpringBoot項目打包是jar包,下面文章小編就對此做一個詳細(xì)介紹,需要的朋友可以參考一下
    2021-09-09
  • Java如何避免死鎖和競態(tài)條件的實現(xiàn)

    Java如何避免死鎖和競態(tài)條件的實現(xiàn)

    本文主要介紹了Java如何避免死鎖和競態(tài)條件的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • java中@DateTimeFormat和@JsonFormat注解的使用

    java中@DateTimeFormat和@JsonFormat注解的使用

    本文主要介紹了java中@DateTimeFormat和@JsonFormat注解的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Java使用itextpdf實現(xiàn)Excel轉(zhuǎn)PDF

    Java使用itextpdf實現(xiàn)Excel轉(zhuǎn)PDF

    這篇文章主要為大家詳細(xì)介紹了Java如何使用itextpdf實現(xiàn)Excel轉(zhuǎn)PDF,并且支持xlsx和xls兩種格,文中的示例代碼講解詳細(xì),希望對大家有所幫助
    2024-01-01
  • springboot prototype設(shè)置多例不起作用的解決操作

    springboot prototype設(shè)置多例不起作用的解決操作

    這篇文章主要介紹了springboot prototype設(shè)置多例不起作用的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09

最新評論

屏山县| 隆化县| 温州市| 皮山县| 蒙城县| 宜川县| 鄂州市| 延吉市| 苍南县| 清水县| 岳阳县| 五峰| 达日县| 无为县| 邵武市| 新密市| 固原市| 巴里| 文成县| 滕州市| 紫金县| 邵阳县| 德庆县| 昌图县| 磐石市| 于田县| 连江县| 仁怀市| 滦南县| 永泰县| 郑州市| 榕江县| 肥西县| 南充市| 车险| 贵德县| 防城港市| 绥芬河市| 温宿县| 松潘县| 基隆市|