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

Spring?Boot如何在加載bean時(shí)優(yōu)先選擇我

 更新時(shí)間:2023年03月14日 10:13:54   作者:陳書予  
這篇文章主要介紹了Spring?Boot如何在加載bean時(shí)優(yōu)先選擇我,在?Spring?Boot?應(yīng)用程序中,我們可以采取三種方式實(shí)現(xiàn)自己的?bean?優(yōu)先加載,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下

引言

Spring Boot 是當(dāng)前業(yè)界最受歡迎和廣泛使用的 Java Web 應(yīng)用開發(fā)框架之一。在 Spring Boot 應(yīng)用中,bean
是通過自動(dòng)配置進(jìn)行裝載的,因?yàn)槠浒凑占s定順序位置,Spring Boot
希望盡可能提供正確的自動(dòng)配置,在應(yīng)用運(yùn)行時(shí)重寫或自定義擴(kuò)展。這樣,bean
的優(yōu)先級(jí)可以在應(yīng)用程序的所有層次結(jié)構(gòu)中管理。如果我們需要在應(yīng)用程序啟動(dòng)時(shí)優(yōu)先加載某些 bean,那么本文就是為大家詳細(xì)介紹如何實(shí)現(xiàn)。

一、適用場(chǎng)景

  • 如果我們需要在應(yīng)用程序的所有層次結(jié)構(gòu)中對(duì)特定 bean 的啟動(dòng)順序進(jìn)行管理。例如,需要在應(yīng)用程序啟動(dòng)的時(shí)候初始化某個(gè)bean。
  • 如果我們公共庫(kù)中的 bean 被其他開發(fā)者服務(wù)用到,但是他們需要在部分場(chǎng)景下自定義 bean,則我們需要在這些自定義的 bean前面先加載公共庫(kù)中的 bean。

二、三種實(shí)現(xiàn)方式

在 Spring Boot 應(yīng)用程序中,我們可以采取以下三種方式實(shí)現(xiàn)自己的 bean 優(yōu)先加載:

1. @Configuration 注解 + @DependsOn 注解

@Configuration 注解在 Spring Boot 應(yīng)用程序中聲明 bean 并允許我們指定 bean 的優(yōu)先級(jí)。然后,我們可以使用 @DependsOn 注解明確地告訴 Spring 容器這些 bean 應(yīng)該在應(yīng)用程序的哪一階段被加載。

使用方法如下:

(1) 聲明 @Configuration 注解以及使用 @DependsOn 注解并且確保引用的 bean 已經(jīng)存在(可以是其他的 bean 或配置類)。

@Configuration 
@DependsOn("myOrderBean") 
public class MyOrderedBeanConfig {
   // 配置類內(nèi)普通Bean
   @Bean
   public MyBean myBean() {
      return new MyBean();
   }
}

(2) 將 @Configuration 注解引入到 Spring Boot 應(yīng)用程序中,以便在應(yīng)用程序啟動(dòng)時(shí)執(zhí)行。

@SpringBootApplication
@Import(MyOrderedBeanConfig.class)
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

2. @Component 注解 + @DependsOn 注解

@Component 注解是最快速的聲明 bean 的方法之一,并允許我們指定 bean 的名稱。如果我們希望已有的 bean 在應(yīng)用程序啟動(dòng)時(shí)首先被加載,那么我們可以使用 @DependsOn 注解來實(shí)現(xiàn)。當(dāng)指定多個(gè) bean 時(shí),可以使用逗號(hào)來分隔。

使用方法如下:

(1) 在使用 @Component 注解的類中,使用 @DependsOn 注解來明確指定 bean 的加載順序。

@Component("myBean") 
@DependsOn({"bean1", "bean2"}) 
public class MyBean {
   // ...
}

(2) 將 @Component 注解引入到 Spring Boot 應(yīng)用程序中,以便在應(yīng)用程序啟動(dòng)時(shí)執(zhí)行。

@SpringBootApplication 
@ComponentScan(basePackages = "com.example.demo") 
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

3. 實(shí)現(xiàn) PriorityOrdered 接口

實(shí)現(xiàn) PriorityOrdered 接口并實(shí)現(xiàn) getOrder() 方法可以使我們控制 bean 的加載順序。最后,我們可以使用 BeanPostProcessor 接口來確保這些 bean 第一次生成時(shí)被加載。

使用方法如下:

(1) 實(shí)現(xiàn) PriorityOrdered 接口,并使用 getOrder() 方法返回一個(gè)正整數(shù)以指定 bean 的優(yōu)先級(jí)。該數(shù)值越小,優(yōu)先級(jí)越高。

public class MyBean implements InitializingBean, PriorityOrdered {
   public void afterPropertiesSet() {
       // ...
   }
   public int getOrder() {
      return 0; // 這個(gè)值將確保此 bean 被最先加載
   }
}

(2) 提供 BeanPostProcessor 實(shí)例,并用 @Order 注解指定順序。在 Spring 容器的生命周期中,此實(shí)例將在所有常規(guī) bean 之前執(zhí)行。

@Component 
@Order(value = 1) 
public class MyBeanPostProcessor implements BeanPostProcessor {
   // ...
}

(3) 將 @ComponentScan 注解引入到 Spring Boot 應(yīng)用程序中,以便在應(yīng)用程序啟動(dòng)時(shí)執(zhí)行。

@SpringBootApplication 
@ComponentScan(basePackages = {"com.example.demo"}) 
public class DemoApplication {
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
}

注意事項(xiàng)

  • 在應(yīng)用程序中使用上述方式之一都能夠幫助您管理 bean 的優(yōu)先級(jí),但這并不意味著其優(yōu)先級(jí)不會(huì)被其他 bean 覆蓋。
  • 如果想覆蓋先前聲明的 bean,可以使用相應(yīng)技術(shù)棧的高優(yōu)先級(jí) bean 來覆蓋先前聲明的 bean。
  • 可以在所有 bean 上使用 @Order 注解或?qū)崿F(xiàn) Ordered 接口來實(shí)現(xiàn) bean 的排序。
  • 使用多個(gè)技術(shù)棧時(shí),可以混合使用這些技術(shù)棧來達(dá)到目的。

三、參考資料

Spring Boot 官方文檔: Controlling Startup Behaviour of Spring BootApplication
Spring 官方文檔: Prioritized Bean Applicatons
Medium: Order execution with Spring Boot
Baeldung: Bean Order in Spring

到此這篇關(guān)于Spring Boot如何在加載bean時(shí)優(yōu)先選擇我?的文章就介紹到這了,更多相關(guān)springboot加載bean優(yōu)先選擇我內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中API接口參數(shù)獲取方式小結(jié)

    SpringBoot中API接口參數(shù)獲取方式小結(jié)

    在Spring Boot中,API接口參數(shù)可以通過多種方式獲取,具體取決于你定義的API接口參數(shù)類型(如路徑參數(shù)、查詢參數(shù)、請(qǐng)求體參數(shù)、請(qǐng)求頭等),本文給大家就介紹了一些常見的參數(shù)獲取方式,需要的朋友可以參考下
    2024-06-06
  • MyBatis-Plus如何最優(yōu)雅最簡(jiǎn)潔地完成數(shù)據(jù)庫(kù)操作

    MyBatis-Plus如何最優(yōu)雅最簡(jiǎn)潔地完成數(shù)據(jù)庫(kù)操作

    Mybatis-Plus是一個(gè)?Mybatis?的增強(qiáng)工具,在?Mybatis?的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于MyBatis-Plus如何最優(yōu)雅最簡(jiǎn)潔地完成數(shù)據(jù)庫(kù)操作的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Eclipse下編寫java程序突然不會(huì)自動(dòng)生成R.java文件和包的解決辦法

    Eclipse下編寫java程序突然不會(huì)自動(dòng)生成R.java文件和包的解決辦法

    這篇文章主要介紹了Eclipse下編寫java程序突然不會(huì)自動(dòng)生成R.java文件和包的解決辦法 的相關(guān)資料,需要的朋友可以參考下
    2016-01-01
  • 詳解Java的初始化與清理

    詳解Java的初始化與清理

    這篇文章主要介紹了Java的初始化與清理,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Spring Cloud升級(jí)最新Finchley版本的所有坑

    Spring Cloud升級(jí)最新Finchley版本的所有坑

    這篇文章主要介紹了Spring Cloud升級(jí)最新Finchley版本的所有坑,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 如何基于Idea遠(yuǎn)程調(diào)試tomcat war包及jar包

    如何基于Idea遠(yuǎn)程調(diào)試tomcat war包及jar包

    這篇文章主要介紹了如何基于Idea遠(yuǎn)程調(diào)試tomcat war包及jar包,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • SpringMVC 整合SSM框架詳解

    SpringMVC 整合SSM框架詳解

    這篇文章主要介紹了SpringMVC 整合SSM框架詳解,本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringCloud微服務(wù)之Config知識(shí)總結(jié)

    SpringCloud微服務(wù)之Config知識(shí)總結(jié)

    今天帶大家學(xué)習(xí)SpringCloud微服務(wù)中的Config的相關(guān)知識(shí),文中有非常詳細(xì)的介紹,對(duì)正在學(xué)習(xí)SpringCloud微服務(wù)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • 解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法

    解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法

    這篇文章主要介紹了解決mybatis-plus3.1.1版本使用lambda表達(dá)式查詢報(bào)錯(cuò)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • JavaScript中HTML元素操作的實(shí)現(xiàn)

    JavaScript中HTML元素操作的實(shí)現(xiàn)

    本文主要介紹了JavaScript中HTML元素操作的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評(píng)論