Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Spring中使用单个@Bean注释方法(或类似方法)注册多个Bean?_Java_Spring_Spring Java Config - Fatal编程技术网

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());
        ... 
    }
}