在自己的Java框架中支持多个DI容器

在自己的Java框架中支持多个DI容器,java,spring,dependency-injection,frameworks,cdi,Java,Spring,Dependency Injection,Frameworks,Cdi,在我自己的多用途Java框架中,如何在不依赖具体DI容器的情况下使用依赖项注入?也就是说,任何应用程序都应该能够使用我的框架,无论它是使用CDI、Spring还是Guice本身 应能满足以下所有条件: 让我的框架将依赖项注入到应用程序中 让应用程序将依赖项注入到我的框架中 让我的框架的一个组件将依赖项注入到另一个组件中 您必须为您需要的所有DI操作和您可能要使用的每个具体实例的实现提供最低公分母接口 对象中不能有任何特定于DI引擎的注释,因此必须将所有配置外部化,并对所有对象使用setter或

在我自己的多用途Java框架中,如何在不依赖具体DI容器的情况下使用依赖项注入?也就是说,任何应用程序都应该能够使用我的框架,无论它是使用CDI、Spring还是Guice本身

应能满足以下所有条件:

  • 让我的框架将依赖项注入到应用程序中
  • 让应用程序将依赖项注入到我的框架中
  • 让我的框架的一个组件将依赖项注入到另一个组件中

您必须为您需要的所有DI操作和您可能要使用的每个具体实例的实现提供最低公分母接口

对象中不能有任何特定于DI引擎的注释,因此必须将所有配置外部化,并对所有对象使用setter或构造函数注入

我个人认为这是浪费时间。DI应该是一种商品。我看不出切换DI引擎的好理由。您很可能会选择一个满足您需求的规范并坚持执行。

是依赖项注入社区内达成最大共识的规范,因此得到以下方面的支持:

  • Spring自3.0版起:
  • 在启动3.0版的GUI中:
  • CDI(,)规范中,该规范利用了JSR 330,因此得到了和实现的支持

这使得JSR330成为跨依赖注入框架具有可移植性的最佳公分母。这显然是以一系列功能为代价的。

感谢Antonin指出JSR330注释受所有三个框架的支持。我希望,我可以给你的答案打分,但我必须等待更高的“声誉”。谢谢,达菲莫。我们的想法不是切换DI引擎,而是允许使用任何DI引擎的应用程序使用框架提供的功能。我的建议是什么?“就用它吧。”你的框架不需要框架。最好遵循框架所要求的习惯用法。不要把它包起来或藏起来。