[英]Spring boot : configuration inheritance
我有
package com.parent.spring;
public abstract class ParentConfig {
@Bean
public String bParent() {
return "parent bean";
}
然后
package com.child.spring;
public class ChildConfig extends ParentConfig {
@Bean
public String bChild() {
return "child bean";
}
}
這是我如何啟動 Spring Boot 應用程序
@SpringBootApplication
@ComponentScan(basePackages = { "com.child.spring","com.parent.spring" })
public class MyMain {
public static void main(String args[]) throws Exception {
SpringApplication.run(MyMain.class, args);
}
}
我想先從子配置加載 bean,然后從父配置加載 bean。 然而,相反的情況正在發生。 不想使用取決於選項,因為這只是一個例子,實際上我在子級和父級配置中有很多 bean。 另外,我在父包中有很多其他配置類,所以我不想從組件掃描中刪除它。 對此有更好的解決方案嗎?
我想先從子配置加載 bean,然后從父配置加載 bean。
你想向框架解釋如何做它的工作?
Spring Configuration
和更一般的 Spring bean 以 Spring 認為滿足所有依賴項要求的正確順序加載和添加到上下文中。
此外,配置繼承沒有被記錄為實現這種事情的一種方式。
明確指定特定 bean 的順序是可能的,但它應該是例外而不是規范,而您似乎想要將該例外作為規范。
您能否解釋更多您的用例,以便我們可以為您提供最佳解決方案:)?
一般來說,將@Configuration
文件視為常規 java 類並使用 java 的所有功能作為此文件中代碼的語言是一種錯誤的方法。 你提到了繼承,那么復雜的 if 條件、循環、遞歸,任何人呢? :) 我的觀點是,您真的不想在配置中得到復雜的代碼並對其進行調試。
現在關於繼承本身。 這不是一個好主意,因為考慮到它不是一個常規的 java 類,再加上對 spring 如何使用這些配置文件的理解,你會明白配置在這里沒有任何意義。 將配置視為您聲明應加載哪些 bean 的地方。 Spring 會處理剩下的事情。 我確實理解您有一些用例,但它根本不適合 Spring 方法。
至於你的說法:
我想先從子配置加載 bean,然后從父配置加載 bean。
你能解釋一下你為什么需要這個嗎? 當 spring 加載時,它首先掃描所有配置但不創建 bean (還沒有)。 相反,它將在這些@Configuration
類中找到的信息“翻譯”為“元數據”(這在 spring 中稱為“Bean 定義”)。 來自所有配置的所有 bean 定義....
只有在 Spring 開始 bean 實例化之后(此時它也知道應該首先創建哪個 bean,例如,如果您有類似的東西):
class A {
private B b;
public A(B b) {this.b = b;}
}
class B {
....
}
那么很明顯Spring應該首先創建Bean“B”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.