Имеет ли Spring Context эквивалент @Inject @Any Java CDI - PullRequest
0 голосов
/ 17 декабря 2018

В Java CDI есть отличная функциональность для сбора всех управляемых bean-компонентов, имеющих общий супертип.Скажем, я собираю все управляемые экземпляры MyInterceptor, мне просто нужно написать:

@Inject
@Any
Instance<MyInterceptor> myInterceptors;

Подобную функциональность я смог получить, работая над EJB, хотя решение там было гораздо менее привлекательным (янеобходимо позвонить в BeanManager).

Может ли аналогичная функциональность работать с @ Component, управляемым из контекста Spring?

[Редактировать] Почему не является дубликатом Что такое эквивалент Spring для экземпляра CDI или поставщика Guices
Насколько я понимаю, в приведенном выше вопросе есть скрытое предположение, что у меня есть оба контекста: Spring и CDI, которые могут не соответствоватьбыть всегда (особенно в приложениях Java SE).Кроме того, у меня плохой опыт смешивания контекстов, они часто утверждают, что они совместимы, но это не всегда так.Вы можете попасть в ловушку неожиданных проблем, например: https://blog.akquinet.de/2017/01/04/dont-get-trapped-into-a-memory-leak-using-cdi-instance-injection/

1 Ответ

0 голосов
/ 17 декабря 2018

Если вы укажете поле как List с универсальным типом MyInterctptor, вы сможете достичь того, что ищете.Пример:

@Autowired
List<MyInterceptor> interceptors;

Более подробную информацию можно найти здесь: https://dzone.com/articles/load-all-implementors

...