【发布时间】:2012-07-22 04:47:57
【问题描述】:
使用限定符与仅指定所需的确切实现类有什么不同?
本题抄自:http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html
【问题讨论】:
标签: java cdi inject qualifiers
使用限定符与仅指定所需的确切实现类有什么不同?
本题抄自:http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html
【问题讨论】:
标签: java cdi inject qualifiers
一般来说,限定符在各方之间形成一层解耦。这允许您更改一侧的实现而不更改另一侧。
However, I find it very rare to actually have more than one implementation class.
这取决于用例。虽然您可能适合业务逻辑的大多数“内部”类(将有一个 MailService,而不是两个或三个),但通常有一些 beantypes 具有多个实现。
@Inject @LDAP
private AuthenticatorService
对
@Inject @FormBased
private AuthenticatorService
为不同的部署场景模拟/提供不同的bean已经提到了。
此外,您几乎肯定会有这样的逻辑,其中限定符讲述“故事的一部分”,并使代码可读且结构化:
@Inject @Authenticated
private User user;
【讨论】:
在功能上,它们是相同的。但是,我发现实际上拥有多个实现类的情况非常罕见。当您对类进行单元测试时,您会发现依赖注入更加有用。依赖注入允许您在运行时轻松注入常规实现实例。然后在您的单元测试中,当您手动构建要测试的对象时,您可以轻松地传入一个模拟实现。
【讨论】: