我是 Java EE 的新手,我想知道使用 CDI(@Named、@Inject)的真正好处是什么。我当然是在问谷歌。但我总是得到诸如“松耦合”和“更好地测试”之类的一般性答案。但我认为松耦合不需要框架。

在我的小项目中,我使用了三个类

public interface UserIf
{
    ...
}

@Named
public class User implements UserIf
{
     ...
}

public class Main
{
    @Inject
    UserIf user;
}

现在我可以轻松地注入(inject)另一个 UserIf 实现。但我也可以做到
public class Main
{
    UserIf user = new User();
}

这种架构也很容易改变。只需编写 UserIf 的另一个实现并更改
UserIf user = new User();


UserIf user = new AnotherUserImpl();

我没有看到在这里使用 CDI 的好处。当我考虑由一些 EJB 和 WAR 组成的更大的 EAR 项目时,如果某些模块(EJB、WAR)是松耦合的,那么重用它们可能更容易。但据我所知,如果这些类不在同一个 jar/war 中,则不可能使用 CDI。那么,您可以从使用 CDI 获得真正好处的真正设置是什么?

问候赫尔姆森

最佳答案

关键是,如果您需要例如重命名 AnotherUserImpl 或者您想切换到其他实现,而不必转到使用此 impl 的所有类并重命名它。使用 CDI 限定符,您无处不在

@Inject
@AnotherUser
private User user;

客户端代码对 User 的实现一无所知,因此您可以在业务方面随意更改它,客户端甚至不会注意到。松散耦合的原则是使用您的 API 的客户端并不真正了解实现,这是在外部配置的(想想 CDI Producers 或 Spring XML 配置)。 CDI 还有其他好处,如生产者、拦截器、新事务 API、替代品或其他。

关于java - Java EE CDI 的真正好处,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25136069/

10-12 16:28