Spring Prototype范围和CDI依赖范围之间有什么区别?

ams*_*ams 4 java spring dependency-injection java-ee cdi

Spring原型范围是否与CDI相关范围相同.

谷歌搜索引导我到博客帖子声称他们是相同的和其他声称他们相似但不完全相同而没有解释差异.

那么弹簧原型范围和cdi依赖范围之间有什么区别?

Sot*_*lis 5

根据CDI 文档javadoc

当bean声明具有@Dependent范围时:

  • 在多个注入点之间不共享注入的bean实例.
  • ...

同样,Spring文档说明

bean的非单例原型范围部署导致每次发出对该特定bean的请求时都会创建一个新的bean实例.

它们在行为上是一样的.

我能找到的唯一区别是bean的生命周期.在春天

因此,尽管无论范围如何都在所有对象上调用初始化生命周期回调方法,但在原型的情况下,不会调用已配置的销毁生命周期回调.客户端代码必须清理原型范围的对象并释放原型bean所持有的昂贵资源.

然而,在CDI中,容器管理bean的整个生命周期,直接在它作为方法调用参数注入时或在销毁注入的bean时间接管理.这些条件都在链接的文档中描述.

正如Luiggi在评论中提到的那样,重要的是要注意bean声明的默认范围.在Spring docs状态中

单例范围是默认范围[...]

而在CDI中,默认范围是dependent.