У меня есть несколько прототипов bean-компонентов, которые имеют общий суперкласс (Foo
). Все эти bean-компоненты имеют общий конструктор, принимающий один аргумент String.
Я хотел бы программно получить (и создать) эти bean-компоненты на основе полностью определенного имени bean-компонента и аргумента конструктора String. Поскольку это имя бина происходит из (внешней) конфигурации, мне нужно убедиться, что таким образом могут быть созданы только бины общего суперкласса Foo
.
Представьте себе следующее:
- Интерфейс
Foo
- Боб
A implements Foo
- Боб
B implements Foo
- Боб
C implements Bar
I теперь нужен метод, который делает это:
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, Object... args)
Too generi c. Позволяет создавать любой bean-компонент, соответствующий типу Foo
. BeanFactory#getBean(String name, Class<T> requiredType)
. Невозможно передать аргументы конструктора ObjectProvider<Foo>#getObject(Object... args)
. Несколько бобовых матчей. Не могу выбрать A
или B
по имени
Кажется, мне нужно что-то вроде BeanFactory#getBean(String name, Class<T> requiredType, Object... args)
, но этого, похоже, не существует.