欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

前言

做java開發(fā)的肯定清楚spring中的核心思想ioc和aop,ioc即控制反轉(zhuǎn)的意思,di的核心思想和ioc一樣,描述的也是同一個(gè)事情同一個(gè)思想,只是di的依賴注入更容易被理解了,aop即面向切面,如注解事務(wù)功能,就是基于aop的思想來實(shí)現(xiàn)的。Quarkus中也實(shí)現(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ī)范定義了一組功能強(qiáng)大的補(bǔ)充服務(wù),這些服務(wù)有助于改善應(yīng)用程序代碼的結(jié)構(gòu)。

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

通俗的說,JSR365是一套java實(shí)現(xiàn)DI依賴注入功能的接口設(shè)計(jì),具體的框架只要實(shí)現(xiàn)這條接口,就可以正常的提供依賴注入功能,Quarkus就是實(shí)現(xiàn)的這套api,但是沒有完全實(shí)現(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中定義的注解去聲明一個(gè)Bean對(duì)象,支持 @Inject注解和構(gòu)造函數(shù)注入一個(gè)Bean。默認(rèn)情況下,本聲明的Bean都是延遲加載的,在應(yīng)用第一次接收請(qǐng)求時(shí)才會(huì)初始化這個(gè)bean,如果需要在應(yīng)用程序啟動(dòng)時(shí)就加載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("實(shí)例化后調(diào)用");
    }
    @PreDestroy
    private void pre(){
        System.out.println("銷毀前調(diào)用");
    }
    void startup(@Observes StartupEvent event) {
        System.out.println("應(yīng)用啟動(dò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時(shí),才會(huì)激活Bean1的初始化

面向切面編程aop

Quarkus中編寫aop的程序和spring中類似,首先定義一個(gè)切點(diǎn)注解

@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();
    }
}

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

Bean列表接口

Quarkus在本地開發(fā)時(shí),會(huì)自動(dòng)注冊(cè)HTTP GET- /quarkus/arc/beans接口,返回所有Bean的列表

結(jié)語

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)QQ第三方登錄的示例代碼

    Java實(shí)現(xiàn)QQ第三方登錄的示例代碼

    這篇文章主要介紹了Java實(shí)現(xiàn)QQ第三方登錄的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java協(xié)程編程之Loom項(xiàng)目實(shí)戰(zhàn)記錄

    Java協(xié)程編程之Loom項(xiàng)目實(shí)戰(zhàn)記錄

    這篇文章主要介紹了Java協(xié)程編程之Loom項(xiàng)目嘗鮮,如果用嘗鮮的角度去使用Loom項(xiàng)目,可以提前窺探JVM開發(fā)者們是如何基于協(xié)程這個(gè)重大特性進(jìn)行開發(fā)的,這對(duì)于提高學(xué)習(xí)JDK內(nèi)核代碼的興趣有不少幫助,需要的朋友可以參考下
    2021-08-08
  • 詳解Java的引用類型及使用場(chǎng)景

    詳解Java的引用類型及使用場(chǎng)景

    這篇文章主要介紹了詳解Java的引用類型及使用場(chǎng)景,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • SpringBoot中實(shí)現(xiàn)Redis緩存預(yù)熱

    SpringBoot中實(shí)現(xiàn)Redis緩存預(yù)熱

    緩存預(yù)熱是一種在系統(tǒng)啟動(dòng)后,但在實(shí)際使用前將數(shù)據(jù)加載到緩存中的技術(shù),本文主要來和大家一起探討如何在Spring Boot應(yīng)用程序中實(shí)現(xiàn)Redis緩存預(yù)熱,以確保系統(tǒng)在處理請(qǐng)求前就已經(jīng)處于最佳狀態(tài),感興趣的可以了解下
    2023-11-11
  • Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法

    Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法

    這篇文章給大家介紹Springboot2 集成 druid 加密數(shù)據(jù)庫密碼的配置方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • 詳解spring applicationContext.xml 配置文件

    詳解spring applicationContext.xml 配置文件

    本篇文章主要介紹了詳解spring applicationContext.xml 配置文件 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • 解決MyEclipse6.5無法啟動(dòng),一直停留剛開始啟動(dòng)界面的詳解

    解決MyEclipse6.5無法啟動(dòng),一直停留剛開始啟動(dòng)界面的詳解

    本篇文章是對(duì)解決MyEclipse6.5無法啟動(dòng),一直停留剛開始啟動(dòng)界面的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組

    java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組

    這篇文章主要介紹了java如何將Object數(shù)組轉(zhuǎn)換為指定類型數(shù)組,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決

    Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決

    這篇文章主要介紹了Mybatis-Plus主鍵插入null值報(bào)錯(cuò)問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • 完美解決docx4j變量替換的問題

    完美解決docx4j變量替換的問題

    這篇文章主要介紹了完美解決docx4j變量替換的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07

最新評(píng)論