我们正在研究使用JSR-330 javax.inject。*注释而不是com.google.inject。*等效项。它看起来像JSR-330标准没有包含我在Guice中喜欢的几个功能。是否有与@Assisted相同的javax.inject。*
具体来说,我看不到@Assisted关键字的支持。另外,@AssistedInject呢? @Inject是否可以放在多个构造函数上?
我有兴趣成为供应商中立,但不会以便利的功能为代价。任何建议?
我们正在研究使用JSR-330 javax.inject。*注释而不是com.google.inject。*等效项。它看起来像JSR-330标准没有包含我在Guice中喜欢的几个功能。是否有与@Assisted相同的javax.inject。*
具体来说,我看不到@Assisted关键字的支持。另外,@AssistedInject呢? @Inject是否可以放在多个构造函数上?
我有兴趣成为供应商中立,但不会以便利的功能为代价。任何建议?
@Assisted
是Guice专用的。您可以将其与JSR 330的@Inject
一起使用。如果你不想Guice的依赖,通过在代码中实现工厂接口来做手动辅助注入。
这太糟糕了,也许它会被包含在未来版本的JSR中。 – scubadev
在回答你的问题之一:
是@Inject能够被放置在多个构造函数?
注入的构造被注解为@注入,并接受零只或更多 依赖作为参数。 @Inject最多可以应用于每个类的一个构造函数 。
所以我认为答案是否定的。
请注意,JSR-330只是API,而不是实现。 –
我明白,它只是API。但是,@Assisted的使用将嵌入我们的源代码中。如果它不是API的一部分,那么如果需要的话,我们将无法“仅仅切换到另一个DI框架”。我不太了解Spring,但我认为它完成这个任务有一个完全不同的方法。 – scubadev
它不是API的一部分。如果你想要真正的DI框架独立性,你必须严格地对API进行编码。 –