我是CDI的新手。在阅读时,我总是遇到上下文对象,非上下文对象。他们是什么意思?
例如以下链接
http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html#d0e881
消息驱动和实体bean本质上是非上下文对象 并且可能不会被注入其他物体
答案 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与数据库交互时,实体会来来去去,因此它们也不能与上下文绑定。 另一个例子是您手动创建的实例的任何对象。