ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Java EE CDI的真正好处

2019-10-29 09:03:35  阅读:248  来源: 互联网

标签:dependency-injection cdi java


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

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

public interface UserIf
{
    ...
}

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

public class Main
{
    @Inject
    UserIf user;
}

现在,我可以轻松注入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;

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

标签:dependency-injection,cdi,java
来源: https://codeday.me/bug/20191029/1958759.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有