【发布时间】:2018-12-17 08:36:49
【问题描述】:
在 Java CDI 中,收集所有共享超类型的托管 bean 有很好的功能。假设我要收集 MyInterceptor 的所有托管实例,我只需要写:
@Inject
@Any
Instance<MyInterceptor> myInterceptors;
我在处理 EJB 时能够获得类似的功能,尽管解决方案不太漂亮(我需要调用 BeanManager)。
我可以在 Spring 上下文管理的 @Component 上获得类似的功能吗?
[编辑]
为什么不重复 What is the Spring equivalent for CDI's Instance, or Guices Provider
根据我的理解,在上述问题中,有一个隐藏的假设,即我有两个上下文:Spring 和 CDI,可能并非总是如此(尤其是在Java SE 应用程序)。此外,我在混合上下文方面的经验很糟糕,他们经常声称它们是兼容的,但并非总是如此。您可能会陷入意想不到的问题,例如:https://blog.akquinet.de/2017/01/04/dont-get-trapped-into-a-memory-leak-using-cdi-instance-injection/
【问题讨论】:
-
@Slaw 我已在头帖中添加了答案。
-
定义一个属性
List<your-type>或数组your-type[],spring 将注入该类型的所有bean。参考指南 (docs.spring.io/spring/docs/current/spring-framework-reference/…) 中也对此进行了说明。