【问题标题】:@Inject + @Qualifier vs @Inject implementation@Inject + @Qualifier 与 @Inject 实现
【发布时间】:2012-07-22 04:47:57
【问题描述】:

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

本题抄自:http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html

【问题讨论】:

    标签: java cdi inject qualifiers


    【解决方案1】:

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

    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;
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-22
        • 2013-01-09
        相关资源
        最近更新 更多