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

SpringBoot中的@DependsOn注解詳解

 更新時(shí)間:2023年08月04日 09:07:14   作者:cloneme01  
這篇文章主要介紹了SpringBoot中的@DependsOn注解詳解,

@DependsOn

@DependsOn注解主要用于指定當(dāng)前BEAN所依賴(lài)的BEANS。任何被指定的依賴(lài)的BEAN都由Spring容器保證在當(dāng)前BEAN之前創(chuàng)建和加載。

在某些場(chǎng)景下,BEAN不是通過(guò)屬性或構(gòu)造函數(shù)參數(shù)顯式依賴(lài)于另一個(gè)BEAN,但卻需要要求另一個(gè)BEAN優(yōu)先完成初始化,則可以使用@DependsOn這個(gè)注解。

@DependsOn既可以指定初始化的依賴(lài)順序,也可以指定BEAN相應(yīng)的銷(xiāo)毀執(zhí)行順序(僅在單例bean的情況下)。

注解@DependsOn位于如下包

org.springframework.context.annotation

該注解用于聲明當(dāng)前bean依賴(lài)于另外一個(gè)bean。所依賴(lài)的bean會(huì)被容器確保在當(dāng)前bean實(shí)例化之前被實(shí)例化。

舉例來(lái)講,如果容器通過(guò)@DependsOn注解方式定義了bean plant依賴(lài)于bean water,那么容器在會(huì)確保bean water的實(shí)例在實(shí)例化bean plant之前完成。

一般用在一個(gè)bean沒(méi)有通過(guò)屬性或者構(gòu)造函數(shù)參數(shù)顯式依賴(lài)另外一個(gè)bean,但實(shí)際上會(huì)使用到那個(gè)bean或者那個(gè)bean產(chǎn)生的某些結(jié)果的情況。

使用目的

控制BEAN的加載順序。
用來(lái)表示一個(gè)BEAN-A的實(shí)例化依賴(lài)另一個(gè)BEAN-B的實(shí)例化, 但是BEAN-A并不需要持有一個(gè)BEAN-B的對(duì)象,如果需要?jiǎng)t需要使用依賴(lài)注入或者ref標(biāo)簽。

注解源碼

// 該注解的屬性是一個(gè)字符串?dāng)?shù)組,數(shù)組的元素是每個(gè)依賴(lài)的BEAN的名稱(chēng)。
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
	String[] value() default {};
}

官方說(shuō)明

Beans on which the current bean depends. Any beans specified are guaranteed to be created by the container before this bean. Used infrequently in cases where a bean does not explicitly depend on another through properties or constructor arguments, but rather depends on the side effects of another bean's initialization. A depends-on declaration can specify both an initialization-time dependency and, in the case of singleton beans only, a corresponding destruction-time dependency. Dependent beans that define a depends-on relationship with a given bean are destroyed first, prior to the given bean itself being destroyed. Thus, a depends-on declaration can also control shutdown order. May be used on any class directly or indirectly annotated with org.springframework.stereotype.Component or on methods annotated with Bean. Using DependsOn at the class level has no effect unless component-scanning is being used. If a DependsOn-annotated class is declared via XML, DependsOn annotation metadata is ignored, and is respected instead.

使用說(shuō)明

  • @DependsOn注解可以定義在類(lèi)和方法上;
  • 直接或者間接標(biāo)注在帶有@Component注解的類(lèi)上面;
  • 直接或者間接標(biāo)注在帶有@Bean 注解的方法上面;
  • 如果使用的是XML配置,則需要使用標(biāo)簽;
  • @DependsOn({“BEAN-NAME-1”, “BEAN-NAME-2”}),先創(chuàng)建BEAN-NAME-1,再創(chuàng)建BEAN-NAME-2,最后再創(chuàng)建當(dāng)前的BEAN。

組合使用

可以與@Component注解和@Bean注解組合使用。

示例代碼

@DependsOn({"c", "b"})
@Component
public class A implements InitializingBean, DisposableBean {
    public A() {
        System.out.println("TO CREATE: " + this.getClass().getName());
    }
    @Override
    public void afterPropertiesSet() throws Exception {
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("TO DESTROY: " + this.getClass().getName());
    }
}
@Component
public class B implements InitializingBean, DisposableBean {
    public B() {
        System.out.println("TO CREATE: " + this.getClass().getName());
    }
    @Override
    public void afterPropertiesSet() throws Exception {
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("TO DESTROY: " + this.getClass().getName());
    }
}
@Component
public class C implements InitializingBean, DisposableBean {
    public C() {
        System.out.println("TO CREATE: " + this.getClass().getName());
    }
    @Override
    public void afterPropertiesSet() throws Exception {
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("TO DESTROY: " + this.getClass().getName());
    }
}

 加載與創(chuàng)建順序:C、B、A

銷(xiāo)毀順序與創(chuàng)建順序相反:A、B、C

@DependsOn和@Lazy的區(qū)別

  • @DependsOn注解用于指定各個(gè)BEAN的依賴(lài)順序;
  • @Lazy注解用于指定該類(lèi)是否能夠懶加載,也就是說(shuō)如果一個(gè)類(lèi)不需要在啟動(dòng)時(shí)實(shí)例化,那么就可以使用@Lazy注解進(jìn)行懶加載,在第一次使用時(shí)創(chuàng)建并實(shí)例化。
    • 可以使用@Lazy注解將某些BEAN在第一次使用時(shí)創(chuàng)建并加載到SPRING容器中;
    • @Lazy注解只對(duì)單例有用,它讓BEAN在SPRING啟動(dòng)時(shí)不會(huì)加載到容器中,只有在代碼里第一次調(diào)用時(shí)才創(chuàng)建并加載到容器中;
    • 如果只在某個(gè)類(lèi)上添加@Lazy注解,但是其他代碼依賴(lài)了該類(lèi),那么即使在該類(lèi)上添加了@Lazy注解,也依然會(huì)在IoC容器初始化時(shí)實(shí)例化該類(lèi),也就是@Lazy注解失效了,這就是由代碼之間的依賴(lài)導(dǎo)致的@Lazy注解失效;如果希望在使用時(shí)才去實(shí)例化,那么就需要在每個(gè)依賴(lài)該類(lèi)的地方也添加@Lazy注解;
    • 如上代碼所示,如果在C這個(gè)BEAN上也添加了@Lazy注解,則@Lazy注解也會(huì)失效,這就是由@DependsOn注解引起的@Lazy注解失效。

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

相關(guān)文章

  • SSM框架前后端信息交互實(shí)現(xiàn)流程詳解

    SSM框架前后端信息交互實(shí)現(xiàn)流程詳解

    這篇文章主要介紹了SSM框架前后端信息交互實(shí)現(xiàn)流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • spring?boot入門(mén)之誕生背景及優(yōu)勢(shì)影響

    spring?boot入門(mén)之誕生背景及優(yōu)勢(shì)影響

    這篇文章主要為大家描述說(shuō)明了介紹了spring?boot誕生的背景以及其產(chǎn)生的優(yōu)勢(shì)影響,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • 一文帶你探索Java中的通配符與泛型

    一文帶你探索Java中的通配符與泛型

    Java 語(yǔ)言中的泛型是一種強(qiáng)大的特性,它可以將類(lèi)型參數(shù)化,使得代碼更具通用性和安全性,本文將深入講解 Java 通配符和泛型,有需要的小伙伴可以了解下
    2023-12-12
  • 寶塔面板配置及部署javaweb教程(全網(wǎng)最全)

    寶塔面板配置及部署javaweb教程(全網(wǎng)最全)

    這篇文章主要介紹了寶塔面板配置及部署javaweb教程(全網(wǎng)最全),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • spring?aop?pointcut?添加多個(gè)execution方式

    spring?aop?pointcut?添加多個(gè)execution方式

    這篇文章主要介紹了spring?aop?pointcut?添加多個(gè)execution方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java 數(shù)值類(lèi)型分秒時(shí)間格式化的實(shí)例代碼

    java 數(shù)值類(lèi)型分秒時(shí)間格式化的實(shí)例代碼

    這篇文章主要介紹了java 數(shù)值類(lèi)型分秒時(shí)間格式化的實(shí)例代碼的相關(guān)資料,將秒或分鐘的值轉(zhuǎn)換為xx天xx小時(shí)xx分鐘xx秒 如果 “xx” 為0 自動(dòng)缺省,需要的朋友可以參考下
    2017-07-07
  • java遞歸菜單樹(shù)轉(zhuǎn)換成pojo對(duì)象

    java遞歸菜單樹(shù)轉(zhuǎn)換成pojo對(duì)象

    這篇文章介紹了java遞歸菜單樹(shù)轉(zhuǎn)換成pojo對(duì)象的具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-08-08
  • Java實(shí)現(xiàn)PDF導(dǎo)出功能的示例代碼

    Java實(shí)現(xiàn)PDF導(dǎo)出功能的示例代碼

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)PDF導(dǎo)出功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-09-09
  • SpringBoot整合EasyExcel實(shí)現(xiàn)批量導(dǎo)入導(dǎo)出

    SpringBoot整合EasyExcel實(shí)現(xiàn)批量導(dǎo)入導(dǎo)出

    這篇文章主要為大家詳細(xì)介紹了SpringBoot整合EasyExcel實(shí)現(xiàn)批量導(dǎo)入導(dǎo)出功能的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下
    2024-03-03
  • 基于Java編寫(xiě)簡(jiǎn)單的Excel工具類(lèi)

    基于Java編寫(xiě)簡(jiǎn)單的Excel工具類(lèi)

    這篇文章主要為大家詳細(xì)介紹了如何基于Java編寫(xiě)簡(jiǎn)單的Excel工具類(lèi),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-02-02

最新評(píng)論