簡體   English   中英

Spring Boot:自動裝配注釋的順序有時會導致循環引用

[英]Spring Boot: order of Autowired annotation leads sometimes to circular references

我有一個帶有多個Components和Configuration類的Spring Boot項目。 在我的項目中,我注意到自動裝配字段的順序導致了不同的情況。 有時我會收到Nullpointer-Exceptions,而Spring Boot抱怨循環引用,但是按正確的字段順序,一切正常。

我可以通過以下簡單的代碼片段重現我的問題:

COMPONENT1:

@Component
public class Properties {

    public String getHost() {
        return "some.address.com";
    }
    public int getPort() {
        return 8080;
    }
}

COMPONENT2:

@Component
public class WebClient {

    @Autowired
    String webadress;

    public void callWebAdress() {
        System.out.println("Getting Data from " + webadress);
    }
}

應用:

@SpringBootApplication
public class Application {

    @Autowired
    WebClient webClient;

    @Autowired
    Properties props;

    @Bean
    String webAdresss(){
        return "http://+"+props.getHost()+":"+props.getPort();
    }

    @PostConstruct
    void init (){
        webClient.callWebAdress();
    }

    public static void main(String[] args) {
         SpringApplication.run(Application.class, args);
    }
}

現在,此配置導致循環參考問題。 但是,當我在Application類中更改字段webClientprops的順序時,一切正常。 我知道還有其他一些選項可以使代碼運行,例如,自動將屬性作為方法參數裝配,在WebClient中自動裝配屬性Bean。 但是這些選項對於我的簡單示例來說效果很好,但是它們會降低我更復雜的代碼中的可讀性。

我不了解有關此問題的以下問題:

  • 為什么Spring無法找到創建bean的正確順序?
  • 我一般如何構造多個Configuration類和Components
  • 如何構造配置以避免與自動裝配順序有關的問題?

Bean之間的引用/依賴關系:

在此處輸入圖片說明

(橙色表示自動接線,黃色表示豆子,白色表示組件)

一件簡單的事情就是將這個@Bean分成不同的Configuration類,如下所示

@Configuration
public class ApplicationConfig{

 @Autowired
 WebClient webClient;


 @Bean
 String webAdresss(){
        return "http://+"+props.getHost()+":"+props.getPort();
 }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM