加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 有关CDI / Weld和DI / Guice中@Inject的信息

发布时间:2020-12-15 04:18:06 所属栏目:Java 来源:网络整理
导读:我试图辨别(某些)CDI和DI之间的区别. 关于@Inject,CDI(JSR-299)带来的只是DI(JSR-330)是什么? CDI @Injects(就像DI)是真的,但它所注入的生命周期与某些背景/范围有关.如果在使用@Inject时对象存在于对象中,则会获得存在于其中声明的上下文/作用域的实例.如
我试图辨别(某些)CDI和DI之间的区别.

关于@Inject,CDI(JSR-299)带来的只是DI(JSR-330)是什么?

CDI @Injects(就像DI)是真的,但它所注入的生命周期与某些背景/范围有关.如果在使用@Inject时对象存在于对象中,则会获得存在于其中声明的上下文/作用域的实例.如果不存在,则将创建一个新对象.

所以当你想确定你正在获得你注入的对象的正确实例时.即@Inject MyObject myObj;将得到会话范围内的myObject实例(假设我已经注释了它)

它是否正确?

解决方法

免责声明:我在为Red Hat工作,我是CDI合作规范的负责人.所以我对CDI的了解可能比其他DI解决方案更好.这说,我会尽力给你一个客观的答案

是的,这是正确的

看看各自的API:

> AtInject
> CDI 1.0和CDI 1.1

您可以看到CDI比JSR 330更丰富.AtInject规范仅定义了1个接口和5个注释,以确保声明和解决注入的常用方法.它没有提供有关如何管理组件或关于其生命周期的任何规则.
CDI(实现JSR 330)是一个完整的依赖注入规范,可以将实现与Guice或Spring Core进行比较.

除了其他事物(事件,可移植扩展,装饰器,拦截器)之外,CDI还增加了上下文的概念.正如您所说,它允许您在自己的生命周期中自动管理组件(bean).您可以在较短的生命周期中注入较长寿命的bean,反之亦然(即在@ApplicationScoped bean中注入@RequestScoped bean). bean管理器将完成工作以始终为您提供有关活动上下文的正确bean.

CDI还有一个更新的版本,带有JSR 346(CDI 1.1)9个月前发布的Java EE 7.它增加了一些有关bean生命周期控制的有趣内容.您可以在JBoss Wildlfy 8或Oracle Glassfish 4应用程序服务器(其他服务器仍在使用其Java EE 7版本)中使用它,或者如果您更喜欢自己进行集成,则可以从servlet侦听器或Java SE中获取Weld 2.x和引导CDI.

现在我们正在开发1.2版并为CDI 2.0准备JSR提案.

要了解有关CDI的更多信息,我建议您阅读Weld documentation(Weld是CDI参考实现),从用户的角度来看,这是对规范的非常好的介绍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读