Внедрить с помощью весенних партий экземпляров bean-объектов в карту / список без конфигурации xml - PullRequest
0 голосов
/ 19 марта 2019

Как я могу внедрить в карту (или список) Java-бина, экземпляры некоторых различных классов, используя spring, но без использования конфигураций xml (мы должны использовать только аннотации)?Я хочу иметь возможность указать конкретные экземпляры, которые будут внедрены в эту карту по имени или с помощью реализации класса

Экземпляры будут объявлены с использованием чего-то вроде этого:

@ Component ("instanceA ") открытый класс A реализует I {
...
}

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

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Нет уже существующей аннотации, которая может сделать это для вас, но вы можете использовать @Bean и @Qualifier для получения желаемых результатов.

@Bean
public List<YourInterface> getList(@Qualifier("yourCherryPickedInterfaceImpl1") YourInterface yourCherryPickedInterfaceImpl1, @Qualifier("yourCherryPickedInterfaceImpl2") YourInterface yourCherryPickedInterfaceImpl2) {
    return Arrays.asList(new YourInterface[]{yourCherryPickedInterfaceImpl1, yourCherryPickedInterfaceImpl2});
}
0 голосов
/ 19 марта 2019

Вы можете использовать фабрику бинов, чтобы получить доступ ко всем необходимым бинам

@Autowired
private ListableBeanFactory beanFactory;

beansOfType.getBeansOfType() возвращает карту BeanName -> Bean.

Вам просто нужно знать имена бинов, которыеВы хотите "ввести".Список необходимых BeanNames;

Тогда вы можете взять только необходимые бины.

Map<String, YourInterface> beansOfType = beanFactory.getBeansOfType(YourInterface.class);

List<YourInterface> necessaryBeanNames.stream().map(b-> beansOfType.get(b)).filter(b -> b != null).collect(toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...