当前位置: 首页 > 知识库问答 >
问题:

如何在Spring中使用单个@bean-Annotated方法(或类似方法)注册多个bean?

谷隐水
2023-03-14

我有一个类似于下面的类:

@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);
    }

    ...

}

问题是,有太多@bean注释的方法,它们只是在名称、返回类型和crateService方法调用的参数上有所不同。我想让这堂课类似于以下内容:

@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;
    }

}

Spring有可能吗?

共有1个答案

华俊弼
2023-03-14
@Configuration
public class ApplicationConfiguration {

    @Autowired
    private ConfigurableBeanFactory beanFactory;

    @PostConstruct
    public void registerServices() {
        beanFactory.registerSingleton("service...", new NNNService());
        ... 
    }
}
 类似资料:
  • 在使用HTTP远程处理的Spring应用程序中,我有一个服务façade模块,配置如下(我将代码设置为通用代码以提高清晰度): 其中,FirstService和SecondService是与现有实现的接口,此处不需要这些实现的详细信息。 我有另一个模块,它定义了39个代理(HTTPInvokerProxy工厂bean的实例),对应于通过façade公开的每个服务。 到目前为止,一切正常。 但我希望

  • 是否有任何选项可以使用PhpStorm/PHPUnit测试单个Codeception类或方法? 我知道如何使用普通的. php/PHPUnit文件运行测试/测试案例。 但是如何配置PhpStorm以与Codeception一起工作?

  • 我在Spring测试中使用和来模拟bean: 但是bean的其他方法返回,我如何监视真正创建的bean,而只监视mock方法?

  • 我正在使用ECMAScript 6模块。从下面的选项中从模块导出/导入多个方法的正确方法是什么? 单一类别的静态方法: 多个导出方法: 1) 导出:一个仅仅是静态方法的类感觉有点像“代码味道”,但类似地,单独导出所有内容确实感觉有点冗长。这仅仅是开发人员的偏好,还是存在性能影响? 2) 导入:“*as”语法是我首选的方法,因为它允许您使用点表示法(同时引用模块和方法)帮助代码可读性。当我可能只使用

  • 我用TestNG类创建了一个Maven项目。在TestNG。xml我已经给出了套件的名称。我使用了多个浏览器Chrome和Firefox来并行运行。仅使用setup类和一个以上的类就可以了,但是当我使用注释包含多个类时,我会得到一个注入错误,并给出一个错误。 我将提供我尝试过的代码 设置。JAVA 我得到的错误如下: 无法使用[class org.openqa.selenium.remote.De

  • 问题内容: 我正在使用ECMAScript6模块。通过以下选项从模块导出/导入多个方法的正确方法是什么? 单类静态方法: 多种导出方法: 1)导出:一类只是静态方法的感觉有点像“代码气味”,但是类似地,单独导出所有内容确实有点冗长。仅仅是开发人员的偏爱还是这里有性能影响? 2)导入:’* as’语法是我的首选方法,因为它允许您使用点表示法(同时引用模块和方法)来辅助代码的可读性。但是,当我可能只使