Spring Context是否等效于Java CDI的@Inject @Any

时间:2018-12-17 08:36:49

标签: java spring ejb cdi

在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/

1 个答案:

答案 0 :(得分:1)

如果您将字段指定为具有常规类型List的{​​{1}},则应该能够实现所需的功能。例如:

MyInterctptor

更多信息可以在这里找到:https://dzone.com/articles/load-all-implementors