Ho una classe simile al seguente:Come registrare più bean usando il metodo single @ Bean-annotated (o simile) in primavera?
@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);
}
...
}
Il problema è che ci sono troppi @ metodi di Bean-annotati che differiscono solo nei loro nomi, restituiscono i tipi e gli argomenti per la chiamata crateService
metodo. Vorrei fare questa classe simile al seguente:
@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;
}
}
E 'possibile in primavera?
Naturalmente sì. Ma avrai un solo fagiolo iniettabile nel contesto dell'applicazione: la mappa. –
Puoi spiegare in dettaglio cosa stai cercando di ottenere? Non vedo come avere molti metodi annotati @ Bean con diversi tipi di ritorno e nomi è un problema. Idealmente raggrupperai i metodi @ Bean in classi @ Configuration separate, quindi non avrai una sola classe God che mantenga l'intera configurazione. Puoi @ Importare diverse classi di configurazione per riutilizzare i metodi definiti @ Bean. – hovanessyan
Ho anche lo stesso requisito. Nel mio caso, sto prima leggendo i dati di configurazione da un file e per ogni voce nel config, ho bisogno di creare un bean (tutto dello stesso tipo java con dati diversi). Quindi non posso usare l'annotazione @Bean, dato che deve essere letta da una configurazione – Harish