Müde von sich wiederholenden Spring Bean-Registrierungen? Du bist nicht allein!
Fühlen Sie sich jemals mit wiederholten Bean-Definitionen in Spring Boot festgefahren? Du bist nicht allein! Die Verwaltung mehrerer Beans derselben Klasse mit unterschiedlichen Konfigurationen kann mühsam und unübersichtlich werden. Nehmen wir an, Sie benötigen so etwas:
@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); }
Dieser Code ist nicht komplex, aber er wiederholt sich schnell, insbesondere wenn es um mehrere Beans desselben Typs geht. Im Idealfall hätten Sie die Möglichkeit, mehrere Instanzen mit unterschiedlichen Einstellungen ohne redundanten Code zu registrieren.
Dies unterscheidet sich von eindeutigen Beans für jede Implementierung einer Schnittstelle. Stattdessen geht es darum, eine Klasse mit Variationen einzurichten. Stellen Sie sich beispielsweise eine App vor, die eine Verbindung zu mehreren Datenbanken herstellt (z. B. Kunden-, Berichts- und Backup-Datenbanken). Jede Verbindung benötigt ihre eigene Konfiguration, was die Verwaltung ohne Unordnung erschwert. Am Ende könntest du so etwas schreiben:
@Bean DatabaseService primaryDatabaseService() { return new DatabaseService("db-url-primary"); } @Bean DatabaseService reportDatabaseService() { return new DatabaseService("db-url-report"); }
Eine einfachere Lösung könnte Ihre Konfiguration erheblich rationalisieren und Sie könnten sich mehr auf die Anwendungslogik konzentrieren. Geben Sie MultiBeanConfig ein – eine kleine Bibliothek, die ich erstellt habe, um die Verwaltung mehrerer Konfigurationen für dasselbe Spring-Bean zu erleichtern.
MultiBeanConfig vereinfacht die Einrichtung mehrerer Instanzen einer Bean mit separaten Konfigurationen. Damit können Sie:
Fügen Sie die Abhängigkeit in Ihre pom.xml ein:
io.github.olufemithompson multibeanconfig 0.0.3
Markieren Sie Ihre Klasse mit @MultiBean, um sie für mehrere Instanzen geeignet zu machen:
@MultiBean public class DatabaseService { // Your service logic }
Definieren Sie eindeutige Versionen in Ihren Eigenschaften oder Ihrer YAML-Datei:
multibean: primary-database-service: class: DatabaseService report-database-service: class: DatabaseService
Dadurch werden die Beans „primaryDatabaseService“ und „reportDatabaseService“ mit Standardkonfigurationen registriert. MultiBeanConfig übersetzt Namen automatisch von kebab-case in camelCase.
Um separate Einstellungen zuzuweisen, fügen Sie Eigenschaften direkt zur Konfiguration jeder Bean hinzu. Hier ist ein Beispiel, bei dem jede Instanz eine Verbindung zu einer anderen Datenbank herstellt:
@MultiBean public class DatabaseService { @Value("${database-config.connection-url}") private String connectionUrl; }
Konfigurieren Sie jede Instanz in application.yml:
database-config: connection-url: 'jdbc:h2:default-url' multibean: primary-database-service: class: DatabaseService database-config: connection-url: 'jdbc:mysql:primary-db-url' report-database-service: class: DatabaseService database-config: connection-url: 'jdbc:postgresql:report-db-url'
Dieses Setup gibt jeder Bean eine eindeutige Verbindungs-URL. Gemeinsame Einstellungen können auch in einem allgemeinen Abschnitt definiert werden, was Konfigurationen effizienter macht und Redundanz reduziert.
Sie müssen sich beim Einfügen von Konfigurationen nicht ausschließlich auf @Value verlassen. @ConfigurationProperties von Spring ermöglicht die Kapselung von Eigenschaften in einer Konfigurationsklasse:
@ConfigurationProperties("database-config") @Configuration public class DatabaseConfig { private String connectionUrl; private int connectionTimeout; // Getters and Setters }
Dann injizieren Sie DatabaseConfig direkt:
@MultiBean public class DatabaseService { private final DatabaseConfig databaseConfig; public DatabaseService(DatabaseConfig databaseConfig) { this.databaseConfig = databaseConfig; } }
Injizieren Sie mit MultiBeanConfig Ihre eindeutig konfigurierten Beans wie bei jeder Spring-Abhängigkeit:
@Service public class ApplicationService { private final DatabaseService primaryDatabaseService; private final DatabaseService reportDatabaseService; public ApplicationService(DatabaseService primaryDatabaseService, DatabaseService reportDatabaseService) { this.primaryDatabaseService = primaryDatabaseService; this.reportDatabaseService = reportDatabaseService; } }
MultiBeanConfig optimiert die Bean-Verwaltung in Spring Boot-Anwendungen, insbesondere bei der Handhabung von Feature-Flags, Datenquellen oder unterschiedlichen API-Verbindungen. Es reduziert Redundanz, hält Ihren Code sauber und verbessert die Wartbarkeit. Probieren Sie es aus und lassen Sie mich wissen, wie es für Ihre Projekte funktioniert!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3