Java 如何在Spring中使用单个@Bean注释方法(或类似方法)注册多个Bean?
我的课程与以下内容类似:Java 如何在Spring中使用单个@Bean注释方法(或类似方法)注册多个Bean?,java,spring,spring-java-config,Java,Spring,Spring Java Config,我的课程与以下内容类似: @Configuration public class ApplicationConfiguration { private <T> T createService(Class<T> serviceInterface) { // implementation omitted } @Bean public FooService fooService() { return creat
@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);
}
...
}
@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;
}
}
春天可能吗?当然可以。但是在应用程序上下文中只有一个可注入bean:map。您能详细解释一下您想要实现什么吗?我不认为有多少带有不同返回类型和名称的@Bean注释方法是个问题。理想情况下,您将把这些@Bean方法分组在单独的@Configuration类中,这样您就不会有一个God类负责整个配置。您可以@Import不同的配置类来重用定义的@Bean方法。我也有完全相同的要求。在我的例子中,我首先从一个文件中读取配置数据,对于配置中的每个条目,我需要创建一个bean(使用不同数据的相同java类型)。因此,我不能使用@Bean注释,因为它必须从config@hovanessyan哈里什解释了这个问题。我不知道要注册多少Bean,所以我不能将它们硬编码为单独的
@Bean
-注释方法。@Victor如果问题是Harish所描述的,您可以尝试另一种方法。如果所有的“bean”都是相同的java类型,那么可以使用一个从bean中有一个java类型的字段的集合的单个bean,或者您可以考虑不使用Spring bean。请尽量避免将代码倾倒为一个答案,并尝试解释它所做的和为什么。对于没有相关编码经验的人来说,您的代码可能不明显。@PostConstruct
需要无参数方法。如果需要将bean和属性注入@PostConstruct
对象,则这没有帮助。(在他的例子中,他甚至使用了一个注入的bean工厂)这有一个令人讨厌的模式,注册的bean在预期的时候不一定可用。
@Configuration
public class ApplicationConfiguration {
@Autowired
private ConfigurableBeanFactory beanFactory;
@PostConstruct
public void registerServices() {
beanFactory.registerSingleton("service...", new NNNService());
...
}
}