[英]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類中更改字段webClient
和props
的順序時,一切正常。 我知道還有其他一些選項可以使代碼運行,例如,自動將屬性作為方法參數裝配,在WebClient中自動裝配屬性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.