@Inject + @Qualifier vs @Inject实现

时间:2012-07-23 21:59:19

标签: java cdi inject qualifiers

使用限定符和指定所需的确切实现类之间有什么不同?

此问题复制自:http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html

2 个答案:

答案 0 :(得分:1)

一般来说,限定符会在各方之间形成一层解耦。这允许您在不改变另一方的情况下更改一方的实现。

However, I find it very rare to actually have more than one implementation class. 

这取决于用例。虽然您可能适合业务逻辑的大多数“内部”类(将有一个MailService而不是两个或三个),但通常有一些 beantypes具有多个实现

@Inject @LDAP
private AuthenticatorService

VS

@Inject @FormBased
private AuthenticatorService

已经提到了为不同的部署方案模拟/提供不同的bean

此外,你几乎肯定会有这样的逻辑,其中限定词告诉“故事的一部分”并使代码可读和结构化:

@Inject @Authenticated
private User user;

答案 1 :(得分:0)

从功能上讲,它们是一样的。但是,我发现实际上有多个实现类非常罕见。当您对类进行单元测试时,您会发现依赖注入更有用。依赖注入允许您在运行时轻松注入常规实现实例。然后在单元测试中,当您手动构建要测试的对象时,可以轻松传入模拟实现。