当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

Spring与CDI生命周期的比较

发表于: 2014-02-25   作者:duyangsss   来源:转载   浏览次数:
摘要: 把容器中的对象绑定到某个范围(Scope)上并不是 CDI 的首创,为了更好地了解 CDI 的范围,我们可以和 Spring IoC 的范围进行对比。 Spring IoC Scope 和 CDI Scope Spring IoC 为 Bean 对象提供了五个范围,如表 1 所示: 表 1. Spring IoC 中的 Bean Scope Scope 说明 singleton
把容器中的对象绑定到某个范围(Scope)上并不是 CDI 的首创,为了更好地了解 CDI 的范围,我们可以和 Spring IoC 的范围进行对比。
Spring IoC Scope 和 CDI Scope
Spring IoC 为 Bean 对象提供了五个范围,如表 1 所示:
表 1. Spring IoC 中的 Bean Scope
Scope 说明
singleton 第一次请求时创建,整个 Spring IoC 容器中只会有唯一的对象。对象的生命周期会一直持续到容器销毁。
prototype 每次请求都会创建新的对象。创建后其生命周期脱离 Spring IoC 容器的管理,而由 JVM 当作普通对象来管理。
request 每个 HTTP 请求都会创建新的对象。对象的生命周期取决于 HTTP 请求。
session 每个 HTTP Session 会创建新的对象。对象的生命周期取决于 HTTP Session。
global-session 用于 portlet,这里不作讨论。

再来看 CDI 定义的 Scope,如表 2 所示。
表 2. CDI Scope
Scope 说明
RequestScoped 每个 HTTP 请求都会创建新的对象。对象的生命周期取决于 HTTP 请求。
SessionScoped 每个 HTTP Session 会创建新的对象。对象的生命周期取决于 HTTP Session。
ConversationScoped 每个 Conversation 会创建新的对象。对象的生命周期取决于 Conversation 的创建和销毁。
AppliactionScoped 每个 Web 应用会创建新的对象。对象的生命周期取决于 Web 应用的启动和关闭。
Dependent 对象的生命周期依赖于被注入对象的生命周期。每次请求会创建新的对象。

从表 1 和表 2 的对比来看,对方都提供了 Request Scope 和 Session Scope,功能基本相同。       
    在 Web 应用的层面来看,CDI 的 ApplicationScoped 起到的作用类似于 Spring IoC 的 singleton。
    CDI 的 Dependent 在创建对象的行为特点上与 Spring IoC 中的 prototype 比较相似,对象创建后的生命周期的管理,两者却完全不同。
    另外,Spring IoC 中没有 Conversation,但 CDI 1.0 规范中明确指出:Conversation 的实现由第三方 Web Framework 来提供。事实上,不使用 JSF 的环境中可能无法使用 Conversation,更详细的信息可在参考资源中找到相关链接。
    在容器的实现方式上, Spring IoC 和 CDI 很不一样。Spring IoC 的 Scope 可看作是管理容器对象的特殊手段,而 CDI 则是针对每个 Scope 创建相应的容器。
Normal Scope 和 Pseudo Scope
CDI 的五种 Scope 可分为两个类别,前四种 Scope(Request、Session、Conversation、Application)称为标准 Scope(Normal Scope),Dependent 则属于另一类——伪 Scope(Pseudo Scope)。 CDI 规范规定:  
    如果在同一线程的不同注入点上,注入相同 Bean 类型的 Normal Scope 对象,那么这些不同注入点所注入的对象是同一实例。Pseudo Scope 中的对象每次注入都会是新构建的对象,没有任何两个注入点会得到同一实例。

原文 http://www.ibm.com/developerworks/cn/java/j-lo-cdijpa/

Spring与CDI生命周期的比较

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
Spring ApplicationContext 中的bean的生命周期 Spring 的BeanFactory 工厂对与Spring的Bean的生命周
概述 如果说EJB,JPA是之前JEE(JEE5及JEE5之前)中里程碑式的规范,那么在JEE6,JEE7中CDI可以与之
Spring Bean 生命周期 任何一个事物都有自己的生命周期,生命的开始、生命中、生命结束。大家最熟悉
概述 如果说EJB,JPA是之前JEE(JEE5及JEE5之前)中里程碑式的规范,那么在JEE6,JEE7中CDI可以与之
开篇先用一张老图描述下 Spring 中 Bean 容器的生命周期。 插叙一下,记得某个博文中提到:“ Sprin
开篇先用一张老图描述下Spring中Bean容器的生命周期。 插叙一下,记得某个博文中提到:“Spring的Be
转自:http://sexycoding.iteye.com/blog/1046775 开篇先用一张老图描述下Spring中Bean容器的生命周
开篇先用一张老图描述下Spring中Bean容器的生命周期。 插叙一下,记得某个博文中提到:“Spring的Be
Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的
http://www.cnblogs.com/zrtqsk/p/3735273.html Spring作为当前Java最流行、最强大的轻量级框架,受
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号