亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中的@DependsOn注解使用解析

 更新時(shí)間:2024年01月25日 09:17:38   作者:znoone  
這篇文章主要介紹了Spring中的@DependsOn注解使用解析,@DependsOn注解可以定義在類和方法上,意思是我這個(gè)組件要依賴于另一個(gè)組件,也就是說(shuō)被依賴的組件會(huì)比該組件先注冊(cè)到IOC容器中,需要的朋友可以參考下

@DependsOn定義/作用

@DependsOn注解可以定義在類和方法上,意思是我這個(gè)組件要依賴于另一個(gè)組件,也就是說(shuō)被依賴的組件會(huì)比該組件先注冊(cè)到IOC容器中。

使用場(chǎng)景: 需要用到觀察者模式的情況下通常都需要用到該注解,觀察者模式(詳細(xì)可查看相關(guān)文章)有三要輸,觀察者、事件源、事件,機(jī)制是觀察者會(huì)監(jiān)聽數(shù)據(jù)源的某些時(shí)間,當(dāng)事件源觸發(fā)該事件后,觀察者就會(huì)知道進(jìn)行相應(yīng)措施。

比如老師是觀察者,學(xué)生是事件源,學(xué)生遲到是事件,老師觀察學(xué)生是否遲到,每當(dāng)學(xué)生遲到,老師就會(huì)發(fā)現(xiàn),并處罰該學(xué)生。

這類場(chǎng)景一般需要觀察者要比事件源先創(chuàng)建,才能不遺漏事件源觸發(fā)的每一個(gè)事件,要是事件源先創(chuàng)建,可能會(huì)在觀察者創(chuàng)建前就觸發(fā)了事件而觀察者無(wú)法知道。

比如上述例子,八點(diǎn)算遲到,但是老師自己都八點(diǎn)半才到學(xué)校,所以就無(wú)法知道八點(diǎn)到八點(diǎn)半之間遲到的學(xué)生。

源碼

//可以作用在方法和類上。
//當(dāng)作用在類上時(shí),通常會(huì)與@Component及其衍生注解等注解配合使用。
//當(dāng)作用在方法上時(shí),通常會(huì)與@Bean注解配合使用。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
	//要依賴的bean id,是個(gè)數(shù)組,也就是說(shuō)可以依賴多個(gè)bean。
	//效果是該注解作用的bean會(huì)比value設(shè)置的依賴bean晚實(shí)例化到容器中。
    String[] value() default {};
}
 

demo(與@Component配合使用)

/**
 * 事件源
 */
@Component
public class EventSource {
    public EventSource(){
        System.out.println("事件源創(chuàng)建");
    }
}
/**
 * 監(jiān)聽類
 */
@Component
public class EventTListener {
    public EventTListener(){
        System.out.println("監(jiān)聽器創(chuàng)建");
    }
}
//測(cè)試類:
@Configuration
@ComponentScan(basePackages = "dependsondemo")
public class SpringConfig {
}
 

結(jié)果:

在這里插入圖片描述

在這里插入圖片描述

分析:因?yàn)閟pring默認(rèn)掃描包時(shí)會(huì)根據(jù)文件在文件夾的位置先后順序掃描加載,而EventSource 文件位置在EventTListener前面,所以會(huì)先加載EventSource 事件源組件。這不符合邏輯。

使用@DependsOn注解

@Component
@DependsOn(value = {"eventTListener"})
public class EventSource {
    public EventSource(){
        System.out.println("事件源創(chuàng)建");
    }
}
 

結(jié)果:

在這里插入圖片描述

監(jiān)聽器先創(chuàng)建了。value屬性的bean id必須存在,不然會(huì)報(bào)錯(cuò)。

demo(與Bean注解配合使用)

//要把上面兩個(gè)組件類上的注解去掉,再使用下面
@Configuration
@ComponentScan(basePackages = "dependsondemo")
public class SpringConfig {
    @Bean
    @DependsOn(value = {"eventListener"})
    public EventSource eventSource(){
        return new EventSource();
    }
    @Bean
    public EventTListener eventListener(){
        return new EventTListener();
    }
}
 

結(jié)果: 如果不加@DependsOn注解的話,就會(huì)先創(chuàng)建事件源,如果加了(如上代碼),就會(huì)先創(chuàng)建監(jiān)聽器。

到此這篇關(guān)于Spring中的@DependsOn注解使用解析的文章就介紹到這了,更多相關(guān)@DependsOn注解使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java程序圖形用戶界面設(shè)計(jì)之標(biāo)簽組件

    Java程序圖形用戶界面設(shè)計(jì)之標(biāo)簽組件

    圖形界面(簡(jiǎn)稱GUI)是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。與早期計(jì)算機(jī)使用的命令行界面相比,圖形界面對(duì)于用戶來(lái)說(shuō)在視覺上更易于接受,本篇精講Java語(yǔ)言中關(guān)于圖形用戶界面的標(biāo)簽組件部分
    2022-02-02
  • 實(shí)例總結(jié)Java多線程編程的方法

    實(shí)例總結(jié)Java多線程編程的方法

    在本篇文章里我們給大家總結(jié)了Java多線程編程的方法以及相關(guān)實(shí)例代碼,需要的朋友們可以學(xué)習(xí)下。
    2018-10-10
  • maven工程中jar包瘦身的五種方法

    maven工程中jar包瘦身的五種方法

    這篇文章主要介紹了maven工程中jar包瘦身的五種方法,幫助大家更好的理解和使用maven,感興趣的朋友可以了解下
    2021-02-02
  • Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回

    Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回

    這篇文章主要介紹了Spring?Boot如何實(shí)現(xiàn)統(tǒng)一數(shù)據(jù)返回,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-07-07
  • idea中的jvm調(diào)優(yōu)方式

    idea中的jvm調(diào)優(yōu)方式

    這篇文章主要介紹了idea中的jvm調(diào)優(yōu)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java Map.getOrDefault方法詳解

    Java Map.getOrDefault方法詳解

    Map.getOrDefault(Object key, V defaultValue)是Java中Map接口的一個(gè)方法,用于獲取指定鍵對(duì)應(yīng)的值,如果鍵不存在,則返回一個(gè)默認(rèn)值,這篇文章主要介紹了Java Map.getOrDefault方法詳解,需要的朋友可以參考下
    2024-01-01
  • Java--Socket通信(客戶端服務(wù)端雙向)

    Java--Socket通信(客戶端服務(wù)端雙向)

    這篇文章主要介紹了Java--Socket通信(客戶端服務(wù)端雙向),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • SpringBoot使用Apache?POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel文件

    SpringBoot使用Apache?POI實(shí)現(xiàn)導(dǎo)入導(dǎo)出Excel文件

    Apache?POI?是一個(gè)強(qiáng)大的?Java?庫(kù),用于處理?Microsoft?Office?文檔,下面我們來(lái)看看SpringBoot如何使用Apache?POI導(dǎo)入導(dǎo)出Excel文件功能吧
    2025-01-01
  • Jenkins自動(dòng)部署SpringBoot項(xiàng)目實(shí)踐教程

    Jenkins自動(dòng)部署SpringBoot項(xiàng)目實(shí)踐教程

    這篇文章主要介紹了Jenkins自動(dòng)部署SpringBoot項(xiàng)目實(shí)踐教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    Spring中的兩種代理JDK和CGLIB的區(qū)別淺談

    本篇文章中主要介紹了Spring中的兩種代理JDK和CGLIB的區(qū)別淺談,詳解的介紹了JDK和CGLIB的原理和方法,有需要的朋友可以了解一下
    2017-04-04

最新評(píng)論