Ich habe einige ähnliche Sätze Bohnen. Zum Beispiel könnte ich eine Verbindung zur Datenbank haben, Überwachung für diese Datenbank und DAO für diese Datenbank, Thread-Pool für diese Datenbank und so weiter. Und ich möchte diese Menge von Beans mehrmals im selben Kontext mit leicht unterschiedlichen Eigenschaften instanziieren (z. B. mit einem anderen Host-Namen). Ich möchte so etwas haben:Frühling: wie man die gleiche Konfiguration mehrmals wiederbenutzt
abstract class ContextTemplate {
abstract String dbHost();
@Bean
DataSource dataSource() { return new DataSourceImpl(dbHost()); }
@Bean
DbMonitoring dbMonitoring() { return new DbMonitoring(dataSource()); }}
// and ten more db-specific beans
}
@Configuration(prefix = "primary-")
class PrimaryDbContext extends ContextTemplate {
@Override
String dbHost() { return "primary.host"; }
}
@Configuration(prefix = "slow-reqs-")
class SlowRequestsContext extends ContextTemplate {
@Override
String dbHost() { return "slow.requests.host"; }
}
@Configuration
@Import({
PrimaryContext.class,
SlowRequestsContext.class,
})
class MyContext {
}
Mit dieser imaginären Konfiguration instanziiert ich mit Bohnen einen einzigen Kontext haben möchte primary-dataSource
, primary-monitoring
, slow-reqs-dataSource
, slow-reqs-monitoring
.
Der Punkt ist, dass jedes von PrimaryDbContext
und SlowRequestsContext
mehrere sehr ähnliche Bean-Definitionen in einem resultierenden Anwendungskontext ausgeben sollte.
Ist so etwas mit Spring möglich?
Bearbeiten: erstellt ein feature request in the Spring tracker.
@mre Ich bezweifle es. Profile sollen Bohnen instanziieren. Ich muss Bohnen aus derselben Definition bedingungslos instanziieren. – stepancheg
@ pczeus Prototyp wird nicht funktionieren. Ich muss Beans mit unterschiedlicher Konfiguration instanziieren: 'primary-dataSource' und' slow-reqs-dataSource' sollten mit unterschiedlichen Host-Parametern instanziiert werden. – stepancheg
Leider können Sie dies nicht mit Konfigurationen tun. Die Standard-Bean-Benennungsstrategie gibt denselben Namen für Bean, der mit derselben Methode erstellt wurde. Das bedeutet, dass die letzte Konfiguration alle vorherigen Beans mit eigenen Beans entfernt. Aber .. Sie können Ihre Bohnen manuell registrieren. –