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

SpringBoot中的@DependsOn注解詳解

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

@DependsOn

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

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

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

注解@DependsOn位于如下包

org.springframework.context.annotation

該注解用于聲明當前bean依賴于另外一個bean。所依賴的bean會被容器確保在當前bean實例化之前被實例化。

舉例來講,如果容器通過@DependsOn注解方式定義了bean plant依賴于bean water,那么容器在會確保bean water的實例在實例化bean plant之前完成。

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

使用目的

控制BEAN的加載順序。
用來表示一個BEAN-A的實例化依賴另一個BEAN-B的實例化, 但是BEAN-A并不需要持有一個BEAN-B的對象,如果需要則需要使用依賴注入或者ref標簽。

注解源碼

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

官方說明

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.

使用說明

  • @DependsOn注解可以定義在類和方法上;
  • 直接或者間接標注在帶有@Component注解的類上面;
  • 直接或者間接標注在帶有@Bean 注解的方法上面;
  • 如果使用的是XML配置,則需要使用標簽;
  • @DependsOn({“BEAN-NAME-1”, “BEAN-NAME-2”}),先創(chuàng)建BEAN-NAME-1,再創(chuàng)建BEAN-NAME-2,最后再創(chuà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

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

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

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

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

相關(guān)文章

  • spring為java.util.Properties類型的屬性進行賦值過程解析

    spring為java.util.Properties類型的屬性進行賦值過程解析

    這篇文章主要介紹了spring為java.util.Properties類型的屬性進行賦值過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 關(guān)于JSON.toJSONString()和Gson.toJson()方法的比較

    關(guān)于JSON.toJSONString()和Gson.toJson()方法的比較

    本文介紹了兩種將Java對象轉(zhuǎn)換為JSON字符串的方法:阿里的`JSON.toJSONString()`和谷歌的`Gson.toJson()`,通過一個示例,展示了當使用繼承關(guān)系且子類覆蓋父類字段時,`Gson`會報錯,而`JSON`可以正常運行,作者建議在處理JSON相關(guān)操作時使用阿里的`JSON`類
    2024-11-11
  • 修改Springboot默認序列化工具Jackson配置的實例代碼

    修改Springboot默認序列化工具Jackson配置的實例代碼

    這篇文章主要介紹了如何修改Springboot默認序列化工具Jackson的配置,當Spring容器中存在多個同類型的Bean時,默認情況下最后一個創(chuàng)建的Bean將作為首選Bean,文中通過代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2024-02-02
  • Java并發(fā) 線程間的等待與通知

    Java并發(fā) 線程間的等待與通知

    這篇文章主要介紹了Java并發(fā) 線程間的等待與通知,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • IDEA2024創(chuàng)建Web項目以及配置Tomcat的實現(xiàn)步驟

    IDEA2024創(chuàng)建Web項目以及配置Tomcat的實現(xiàn)步驟

    在Web項目的開發(fā)過程中,Tomcat作為一款開源的Servlet容器,扮演著至關(guān)重要的角色,本文將詳細闡述2024版本的idea配置Tomcat的全過程,下面就來詳細的介紹一下
    2025-10-10
  • SpringBoot使用LomBok的示例代碼

    SpringBoot使用LomBok的示例代碼

    這篇文章主要介紹了SpringBoot使用LomBok的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java Spire.PDF實現(xiàn)PDF表單數(shù)據(jù)自動導入與導出

    Java Spire.PDF實現(xiàn)PDF表單數(shù)據(jù)自動導入與導出

    對于Java開發(fā)者而言,處理PDF表單數(shù)據(jù)往往伴隨著諸多挑戰(zhàn),本文將借助 Spire.PDF for Java 這一強大工具,清晰地展示如何實現(xiàn)PDF表單數(shù)據(jù)的導入與導出,感興趣的小伙伴可以了解下
    2026-02-02
  • SpringCloud整合分布式服務跟蹤zipkin的實現(xiàn)

    SpringCloud整合分布式服務跟蹤zipkin的實現(xiàn)

    這篇文章主要介紹了SpringCloud整合分布式服務跟蹤zipkin的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Spring解決循環(huán)依賴的方法(三級緩存)

    Spring解決循環(huán)依賴的方法(三級緩存)

    今天,我們要說的是spring是如何解決循環(huán)依賴的。對于一個問題說解決之前,我們首先要先明確形成問題的本因。那么循環(huán)依賴,何為循環(huán)依賴呢?感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 關(guān)于文件上傳MultipartBody的使用方法

    關(guān)于文件上傳MultipartBody的使用方法

    這篇文章主要介紹了關(guān)于文件上傳MultipartBody的使用方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論

霞浦县| 泰宁县| 华安县| 黄浦区| 休宁县| 五莲县| 古浪县| 桐庐县| 陇南市| 芜湖县| 斗六市| 龙陵县| 平顺县| 弋阳县| 荆州市| 永登县| 南投县| 西盟| 辽阳市| 沛县| 井冈山市| 台南县| 鄂托克前旗| 长垣县| 内江市| 鲜城| 贵溪市| 西平县| 溧阳市| 固阳县| 平潭县| 都兰县| 曲沃县| 苍梧县| 新津县| 海门市| 万宁市| 濮阳县| 德阳市| 新巴尔虎左旗| 南平市|