bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

怎么控制springboot中bean的加載順序-創新互聯

創新互聯www.cdcxhl.cn八線動態BGP香港云服務器提供商,新人活動買多久送多久,劃算不套路!

成都創新互聯致力于互聯網網站建設與網站營銷,提供成都網站設計、成都做網站、網站開發、seo優化、網站排名、互聯網營銷、小程序制作、公眾號商城、等建站開發,成都創新互聯網站建設策劃專家,為不同類型的客戶提供良好的互聯網應用定制解決方案,幫助客戶在新的全球化互聯網環境中保持優勢。

小編這次要給大家分享的是怎么控制springboot中bean的加載順序,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

1.為什么需要控制加載順序

springboot遵從約定大于配置的原則,極大程度的解決了配置繁瑣的問題。在此基礎上,又提供了spi機制,用spring.factories可以完成一個小組件的自動裝配功能。

在一般業務場景,可能你不大關心一個bean是如何被注冊進spring容器的。只需要把需要注冊進容器的bean聲明為@Component即可,spring會自動掃描到這個Bean完成初始化并加載到spring上下文容器。

而當你在項目啟動時需要提前做一個業務的初始化工作時,或者你正在開發某個中間件需要完成自動裝配時。你會聲明自己的Configuration類,但是可能你面對的是好幾個有互相依賴的Bean。如果不加以控制,這時候可能會報找不到依賴的錯誤。

但是你明明已經把相關的Bean都注冊進spring上下文了呀。這時候你需要通過一些手段來控制springboot中的bean加載順序。

2.幾個誤區

在正式說如何控制加載順序之前,先說2個誤區。

在標注了@Configuration的類中,寫在前面的@Bean一定會被先注冊

這個不存在的,spring在以前xml的時代,也不存在寫在前面一定會被先加載的邏輯。因為xml不是漸進的加載,而是全部parse好,再進行依賴分析和注冊。到了springboot中,只是省去了xml被parse成spring內部對象的這一過程,但是加載方式并沒有大的改變。

利用@Order這個標注能進行加載順序的控制

嚴格的說,不是所有的Bean都可以通過@Order這個標注進行順序的控制。你把@Order這個標注加在普通的方法上或者類上一點鳥用都沒有。

@Order能控制哪些bean的加載順序呢,我們先看看官方的解釋:

{@code @Order} defines the sort order for an annotated component. Since Spring 4.0, annotation-based ordering is supported for many kinds of components in Spring, even for collection injection where the order values of the target components are taken into account (either from their target class or from their {@code @Bean} method). While such order values may influence priorities at injection points, please be aware that they do not influence singleton startup order which is an orthogonal concern determined by dependency relationships and {@code @DependsOn} declarations (influencing a runtime-determined dependency graph).

最開始@Order注解用于切面的優先級指定;在 4.0 之后對它的功能進行了增強,支持集合的注入時,指定集合中 bean 的順序,并且特別指出了,它對于但實例的 bean 之間的順序,沒有任何影響。

目前用的比較多的有以下3點:

@Aspect
ApplicationListener
CommandLineRunner

3.如何控制

3.1@DependsOn

@DependsOn注解可以用來控制bean的創建順序,該注解用于聲明當前bean依賴于另外一個bean。所依賴的bean會被容器確保在當前bean實例化之前被實例化。

示例:

@Configuration
public class BeanOrderConfiguration {

 @Bean
 @DependsOn("beanB")
 public BeanA beanA(){
  System.out.println("bean A init");
  return new BeanA();
 }

 @Bean
 public BeanB beanB(){
  System.out.println("bean B init");
  return new BeanB();
 }

 @Bean
 @DependsOn({"beanD","beanE"})
 public BeanC beanC(){
  System.out.println("bean C init");
  return new BeanC();
 }

 @Bean
 @DependsOn("beanE")
 public BeanD beanD(){
  System.out.println("bean D init");
  return new BeanD();
 }

 @Bean
 public BeanE beanE(){
  System.out.println("bean E init");
  return new BeanE();
 }
}

文章標題:怎么控制springboot中bean的加載順序-創新互聯
新聞來源:http://vcdvsql.cn/article4/isiie.html

成都網站建設公司_創新互聯,為您提供移動網站建設標簽優化網站維護網頁設計公司手機網站建設域名注冊

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站建設