首页 > 解决方案 > 按名称、类型和构造函数参数检索 bean 的正确 BeanFactory 用法

问题描述

我有许多原型 bean,它们都共享一个共同的超类 ( Foo)。所有这些 bean 都有一个带有一个 String 参数的公共构造函数。

我想基于完全限定的 bean 名称和 String 构造函数参数以编程方式检索(和创建)这些 bean。因为这个 bean 名称来自(外部)配置,所以我需要确保只有公共超类的 beanFoo才能以这种方式构造

想象一下:

我现在需要一个方法来做到这一点:

public Foo getBean(String name, String arg) {
    // Create a new instance of A or B (but not C) depending on name.
    // Pass args as the constructor argument
}

我已经设法尝试排除以下内容:

看来我需要的是类似的东西,BeanFactory#getBean(String name, Class<T> requiredType, Object... args)但这似乎不存在。

标签: javaspringspring-boot

解决方案


我已经创建了一些有用的东西,但我仍然希望有一个更好、更清洁的解决方案:

    public Foo getFoo(String name, String arg) {
        if (beanFactory.containsBean(name) && beanFactory.isTypeMatch(name, Foo.class)) {
            return (Foo) beanFactory.getBean(name, arg);
        }
        throw new RuntimeException("nope!");
    }

推荐阅读