【发布时间】:2014-01-30 09:16:12
【问题描述】:
我是 CDI 的新手。在阅读时,我总是遇到上下文对象,非上下文对象。它们是什么意思?
例如下面的链接
http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html#d0e881
消息驱动和实体 bean 本质上是非上下文对象 并且不能注入到其他对象中
【问题讨论】:
我是 CDI 的新手。在阅读时,我总是遇到上下文对象,非上下文对象。它们是什么意思?
例如下面的链接
http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html#d0e881
消息驱动和实体 bean 本质上是非上下文对象 并且不能注入到其他对象中
【问题讨论】:
CDI 框架的上下文基本上是对象的大图*。您可以使用任何 CDI 配置方法(spring xml beans/@Component/@Service 等注释)将对象添加到上下文或使 CDI 框架从您的服务类创建对象。
一旦你有了上下文,你就可以从中获取对象:(Spring: getBean(name))
现在您可以在上下文中配置对象/bean 之间的依赖关系,CDI 将确保您从上下文中获取的任何对象都设置了其依赖关系。这是依赖注入部分。
非上下文对象根本不会添加到上下文中,CDI 框架也不知道它们。通常只有服务类是 CDI 上下文的一部分。
* 虽然不是真正的地图,但可以通过名称、类型和其他方式访问对象。默认情况下,每次请求同名(单例)时,您都会获得相同的对象,尽管您可以配置 CDI 以在每次请求时创建一个新对象(原型)。
【讨论】:
CDI 中的上下文是在程序执行期间可以使用上下文对象的某个跨度。 它定义了 CDI 容器何时创建、销毁以及如何将这些对象的实例链接在一起。
非上下文对象是那些不绑定到任何 CDI 上下文的对象。
MDB 就是一个例子,它们由 EJB 容器管理,不打算用作普通对象。 当您通过 JPA 与数据库交互时,实体来来去去,因此它们也不能与上下文相关联。 另一个示例是您手动创建其实例的任何对象。
【讨论】: