CDI中的上下文是什么意思?

时间:2014-01-30 09:16:12

标签: java java-ee-6 cdi

我是CDI的新手。在阅读时,我总是遇到上下文对象,非上下文对象。他们是什么意思?

例如以下链接

http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html#d0e881

  

消息驱动和实体bean本质上是非上下文对象   并且可能不会被注入其他物体

3 个答案:

答案 0 :(得分:6)

CDI框架的上下文基本上是对象的大图*。您可以使用任何CDI配置方法(弹簧xml bean /注释,如@ Component / @Service)使对象添加到上下文或使CDI框架从服务类创建对象。

获得上下文后,您可以从中获取对象:(Spring:getBean(name))

现在,您可以在上下文中配置对象/ bean之间的依赖关系,CDI将确保从上下文中获取的任何对象都将设置其依赖项。这是依赖注入部分。

非上下文对象根本不会添加到上下文中,CDI框架也不知道它们。通常,只有服务类是CDI上下文的一部分。

*实际上不是地图,可以通过名称,类型和其他方式访问对象。默认情况下,每次使用相同的名称(单例)时,您都会获得相同的对象,尽管您可以将CDI配置为每次询问(原型)时创建一个新对象。

答案 1 :(得分:0)

这里解释得很好!

http://docs.jboss.org/cdi/spec/1.0/html/contexts.html

此外,

这里的人已经很好地解释了这一点。

The difference between context and scope in CDI - and Java at all

答案 2 :(得分:0)

当可以使用上下文对象时,CDI中的上下文是程序执行期间的某个跨度。 它定义CDI容器何时创建,销毁以及如何将这些对象的实例链接在一起。

非上下文对象是那些与任何CDI上下文无关的对象。

MDB是一个示例,它们由EJB容器管理,不打算用作普通对象。 当您通过JPA与数据库交互时,实体会来来去去,因此它们也不能与上下文绑定。 另一个例子是您手动创建的实例的任何对象。