gpt4 book ai didi

java - CDI/Weld 和 DI/Guice 中关于@Inject 的信息

转载 作者:搜寻专家 更新时间:2023-11-01 01:43:17 25 4
gpt4 key购买 nike

我正在尝试辨别 CDI 和 DI 之间的(部分)差异。

相对于 @Inject,CDI(JSR-299) 仅带来 DI (JSR-330) 是什么?

CDI @Injects(就像 DI 一样)是真的吗,无论它所注入(inject)的生命周期如何,都与某些上下文/范围相关联。如果在使用 @Inject 时某个对象存在于某个范围内,您将获得实例,该实例存在于声明它所在的任何上下文/范围内。如果不存在,将创建一个新实例。

所以当你想确保你得到了你注入(inject)的对象的正确实例时。即@Inject MyObject myObj;将获得 session 范围内的 myObject 实例(假设我已经这样注释了它)

这是正确的吗?

最佳答案

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

是的,这是正确的

查看各自的 API :

可以看到,CDI 远比 JSR 330 丰富。AtInject 规范只定义了 1 个接口(interface)和 5 个注解,以确保声明和解析注入(inject)的通用方式。它没有提供任何关于如何管理组件的规则,也没有提供任何关于组件生命周期的规则。CDI(实现 JSR 330)是一个完整的依赖注入(inject)规范,其实现可以与 Guice 或 Spring Core 进行比较。

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

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

目前我们正在开发 1.2 版并准备 CDI 2.0 的 JSR 提案。

要了解有关 CDI 的更多信息,我建议您阅读 Weld documentation (Weld 是 CDI 引用实现)从用户的角度来看,这是对规范的一个很好的介绍。

关于java - CDI/Weld 和 DI/Guice 中关于@Inject 的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21904424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com