Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于@Inject-in-CDI/Weld和DI/Guice的信息_Java_Dependency Injection_Cdi_Guice_Jboss Weld - Fatal编程技术网

Java 关于@Inject-in-CDI/Weld和DI/Guice的信息

Java 关于@Inject-in-CDI/Weld和DI/Guice的信息,java,dependency-injection,cdi,guice,jboss-weld,Java,Dependency Injection,Cdi,Guice,Jboss Weld,我正试图辨别CDI和DI之间的(一些)区别 CDI(JSR-299)在@Inject方面带来了什么 CDI@Injects(就像DI)是真的吗?然而,它所注入的内容的生命周期与某些上下文/范围有关。如果在使用@Inject时某个对象存在于某个作用域中,则会得到该对象在其声明的上下文/作用域中存在的实例。如果一个不存在,将创建一个新的 因此,当您希望确保获得所注入对象的正确实例时。ie@injectmyobject myObj;将获取会话范围内的myObject实例(假设我已经对其进行了注释) 这

我正试图辨别CDI和DI之间的(一些)区别

CDI(JSR-299)在@Inject方面带来了什么

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

因此,当您希望确保获得所注入对象的正确实例时。ie@injectmyobject myObj;将获取会话范围内的myObject实例(假设我已经对其进行了注释)

这是正确的吗?

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

是的,这是正确的

查看各自的API:

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

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

CDI还有一个更新的版本,它是9个月前用JavaEE7发布的JSR346(CDI1.1)。它添加了一些关于bean生命周期控制的有趣内容。您可以在应用程序或服务器(其他服务器仍在使用其JavaEE7版本)中使用它,或者从servlet侦听器或JavaSE获取并引导CDI(如果您愿意自己进行集成)

现在我们正在开发1.2版,并为CDI2.0准备JSR提案


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

嗨,安托万,谢谢你花时间回答这个问题。回答得好。