Как использовать отражение Java для создания экземпляра класса @Autowired - PullRequest
0 голосов
/ 07 августа 2020

У меня есть база данных postgres, в которой хранится (в виде строки) соответствующий класс для использования в зависимости от информации, поступающей от пользователя.

например, пользователь ввел Имя , в базе данных хранится значение NameFinder (), и код должен создать экземпляр NameFinder ().

Мне было интересно, есть ли способ использовать отражение для создания экземпляра этого класса как компонента @Autowired , а затем вызовите соответствующую функцию.

Кажется, я не могу найти руководство, в котором используются классы @Autowired, поэтому любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 07 августа 2020

Для работы автомонтирования вам нужен класс, который использует @Autowired как @Component (или дочерний элемент, например @Service ...). https://www.baeldung.com/spring-autowire

Чтобы Spring знал, что вводить, вам необходимо определить @Bean в своей конфигурации https://www.baeldung.com/spring-bean

Что касается отражающий экземпляр в bean-компоненте:

@Bean
public Name getName(Database db) {
    String nameFqn = db.getConfigTable().getNameFQN();
    return (Name) Class.forName(nameFqn).getConstructor().newInstance();
}

Обратите внимание, что здесь используется конструктор c publi без аргументов. FQN означает полное имя, т.е. com.some.pkg.NameFinder при условии:

package com.some.pkg;

class NameFinder implements Name {
    public NameFinder(){}
}

Мне кажется, что Spring Bean также должен быть настроен непосредственно из FQN без использования отражения, но я не знаю как. Попробуйте почитать о BeanFactory или чем-то подобном. Обычно следует избегать размышлений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...