厭倦了重複的 Spring Bean 註冊?你並不孤單!
是否曾因 Spring Boot 中重複的 bean 定義而陷入困境?你並不孤單!管理具有不同配置的相同類別的多個 bean 可能會變得乏味且混亂。假設您需要這樣的東西:
@Bean MyService beanA() { // Set Configuration for bean A Configuration a = new... a.setUrl(.....) return new MyService(a); } @Bean MyService beanB() { // Set Configuration for bean A Configuration b = new... b.setUrl(.....) return new MyService(b); }
這段程式碼並不複雜,但很快就會變得重複,尤其是在處理多個相同類型的 bean 時。理想情況下,您可以透過不同的設定註冊多個實例,而無需冗餘程式碼。
這與為介面的每個實作擁有唯一的 bean 不同。相反,我們正在討論建立一個具有變化的類別。例如,考慮一個連接到多個資料庫(例如客戶、報告和備份)的應用程式。每個連接都需要自己的配置,這使得管理變得混亂且具有挑戰性。你最終可能會寫出這樣的東西:
@Bean DatabaseService primaryDatabaseService() { return new DatabaseService("db-url-primary"); } @Bean DatabaseService reportDatabaseService() { return new DatabaseService("db-url-report"); }
擁有更簡單的解決方案可以顯著簡化您的配置,讓您更專注於應用程式邏輯。輸入 MultiBeanConfig — 我建立的一個小型庫,用於幫助管理同一個 Spring bean 的多個配置。
MultiBeanConfig 透過單獨的配置簡化了 Bean 的多個實例的設定。有了它,您可以:
在 pom.xml 中包含依賴項:
<dependency> <groupId>io.github.olufemithompson</groupId> <artifactId>multibeanconfig</artifactId> <version>0.0.3</version> </dependency>
使用 @MultiBean 標記您的類,使其符合多個實例的條件:
@MultiBean public class DatabaseService { // Your service logic }
在屬性或 YAML 檔案中定義唯一版本:
multibean: primary-database-service: class: DatabaseService report-database-service: class: DatabaseService
這會使用預設設定註冊primaryDatabaseService 和reportDatabaseService bean。 MultiBeanConfig 會自動將名稱從短橫線命名法轉換為駝峰命名法。
要指派單獨的設置,請將屬性直接加入到每個 bean 的配置中。這是每個實例連接到不同資料庫的範例:
@Bean MyService beanA() { // Set Configuration for bean A Configuration a = new... a.setUrl(.....) return new MyService(a); } @Bean MyService beanB() { // Set Configuration for bean A Configuration b = new... b.setUrl(.....) return new MyService(b); }
設定application.yml中的每個實例:
@Bean DatabaseService primaryDatabaseService() { return new DatabaseService("db-url-primary"); } @Bean DatabaseService reportDatabaseService() { return new DatabaseService("db-url-report"); }
此設定為每個 bean 提供了唯一的連接 URL。共享設定也可以在常規部分中定義,從而使配置高效並減少冗餘。
您不必僅依賴@Value來注入配置。 Spring 的 @ConfigurationProperties 允許將屬性封裝在設定類別中:
<dependency> <groupId>io.github.olufemithompson</groupId> <artifactId>multibeanconfig</artifactId> <version>0.0.3</version> </dependency>
然後,直接注入DatabaseConfig:
@MultiBean public class DatabaseService { // Your service logic }
使用 MultiBeanConfig ,像使用任何 Spring 依賴項一樣注入您獨特配置的 bean:
multibean: primary-database-service: class: DatabaseService report-database-service: class: DatabaseService
MultiBeanConfig 簡化了 Spring Boot 應用程式中的 bean 管理,特別是在處理功能標誌、資料來源或不同的 API 連線時。它減少了冗餘,保持程式碼整潔,並增強了可維護性。嘗試一下,讓我知道它如何適用於您的專案!
以上是使用獨特的配置輕鬆設定多個 Spring Bean的詳細內容。更多資訊請關注PHP中文網其他相關文章!