Ich habe eine Klasse ähnlich den folgenden:Wie registriert man mehrere Beans mit einzelnen @ Bean-Annotated-Methode (oder ähnlich) im Frühjahr?
@Configuration
public class ApplicationConfiguration {
private <T> T createService(Class<T> serviceInterface) {
// implementation omitted
}
@Bean
public FooService fooService() {
return createService(FooService.class);
}
@Bean
public BarService barService() {
return createService(BarService.class);
}
...
}
Das Problem ist, dass es zu viele @ Bean-kommentierten Methoden, die in ihrem Namen nur dadurch unterscheiden, Rückgabetypen und Argumente für den crateService
Methodenaufruf. Ich mag diese Klasse ähnlich den folgenden machen:
@Configuration
public class ApplicationConfiguration {
private static final Class<?>[] SERVICE_INTERFACES = {
FooSerivce.class, BarService.class, ...};
private <T> T createService(Class<T> serviceInterface) {
// implementation omitted
}
@Beans // whatever
public Map<String, Object> serviceBeans() {
Map<String, Object> result = ...
for (Class<?> serviceInterface : SERVICE_INTERFACES) {
result.put(/* calculated bean name */,
createService(serviceInterface));
}
return result;
}
}
Ist es möglich, im Frühjahr?
Natürlich ja. Aber Sie haben nur eine injizierbare Bean im Anwendungskontext: die Karte. –
Können Sie bitte im Detail erläutern, was Sie erreichen möchten? Ich sehe nicht, wie viele @Bean-Annotated-Methoden mit unterschiedlichen Rückgabetypen und -namen ein Problem darstellen. Idealerweise gruppieren Sie diese @ Bean-Methoden in separaten @ Configuration-Klassen, sodass Sie nicht eine einzige Gott-Klasse haben, die die gesamte Konfiguration enthält. Sie können verschiedene Konfigurationsklassen importieren, um definierte @ Bean-Methoden wiederzuverwenden. – hovanessyan
Ich habe auch genau die gleiche Anforderung. In meinem Fall lese ich zuerst die Konfigurationsdaten aus einer Datei und für jeden Eintrag in der Konfiguration muss ich eine Bean erstellen (alle vom gleichen Java-Typ mit unterschiedlichen Daten). Daher kann ich @Bean Annotation nicht verwenden, da es von einer Konfig – Harish