aşağıdaki benzer bir sınıf var:İlkbaharda tek @ Bean-açıklamalı yöntem (veya benzer) kullanarak birden fazla fasulye nasıl kaydedilir?
@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);
}
...
}
sorun, sadece isimleri farklı crateService
yöntem çağrısı türleri ve argümanlar dönmek Fasulye-açıklamalı yöntemlere @ çok fazla var olmasıdır.
@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;
}
}
O kaynakta mümkün mü: şuna benzer bu sınıfı yapmak istersiniz?
Tabii ki evet. Ancak uygulama kapsamında sadece bir tane enjekte edilebilir fasülyeye sahip olacaksınız: harita. –
Neyi başarmaya çalıştığınızı ayrıntılı olarak açıklayabilir misiniz? Farklı dönüş türlerine ve isimlere sahip birçok Bean ek açıklamalı yöntemin nasıl bir sorun olduğunu anlamıyorum. İdeal olarak, aşağıdaki @ Bean yöntemlerini ayrı @ Yapılandırma sınıflarında gruplayacaksınız, böylece tüm yapılandırmayı tutan tek bir Tanrı sınıfına sahip olmayacaksınız. @ Tanımlanmış @ Bean yöntemlerini yeniden kullanmak için farklı yapılandırma sınıflarını içe aktarabilirsiniz. – hovanessyan
Ayrıca aynı gereksinim var. Benim durumumda, önce bir dosyadan yapılandırma verilerini okuyorum ve her giriş için yapılandırmada, bir fasulye yaratmam gerekiyor (hepsi farklı veriyle aynı java tipi). Bu nedenle, @Bean ek açıklamasını kullanamıyorum, çünkü bir konfigürasyondan okunması gerektiği için – Harish