`
duyangsss
  • 浏览: 127422 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

[转载]Spring与CDI生命周期的比较

 
阅读更多
把容器中的对象绑定到某个范围(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/
  • 大小: 110.2 KB
  • 大小: 110.2 KB
分享到:
评论

相关推荐

    Spring3.2.5相关jar包

    IoC容器是Spring框架的基础,它负责管理对象的生命周期和依赖关系。在Spring3.2.5中,IoC容器的性能得到优化,配置方式也更加灵活,支持XML、注解以及Java配置三种方式,使得代码更加简洁和可读。 其次,AOP模块...

    spring-3.1.0中文版api帮助文档.pdf

    - **Bean的作用范围与验证**:Spring允许定义Bean的作用范围,如singleton、prototype等,这有助于控制对象的生命周期和内存消耗。此外,Spring还提供了BeanValidation集成支持,便于进行数据验证。 #### 三、面向...

    Spring3X权威开发指南.pdf

    通过XML配置或基于注解的配置,开发者可以定义Bean的生命周期和行为。 3. **AOP**:Spring的AOP模块支持面向切面编程,可以将关注点分离,如日志、事务管理等,使核心业务逻辑更为清晰。 4. **数据访问**:Spring...

    Spring 3.x权威开发指南:实施Java EE 6的利器.pdf

    在书中,读者将了解到Spring的核心组件,如IoC(Inversion of Control)容器,它通过管理对象的生命周期和依赖关系,使得代码更加松耦合和易于测试。此外,作者详细讲解了AOP(Aspect-Oriented Programming)面向切...

    spring帮助文档

    Spring容器负责创建bean、装配它们的依赖关系并管理它们的生命周期。 - **命名bean**:为bean指定一个唯一的名字,方便后续的引用。 - **实例化bean**:可以通过构造器、静态工厂方法或实例工厂方法等方式来创建...

    spring-data-neo4j-tx-2.3.4.RELEASE.zip

    4. **事件监听**:允许在对象持久化生命周期的各个阶段添加自定义逻辑,例如在节点创建或更新时触发操作。 5. **关系类型和方向的注解**:使用`@RelationshipEntity`,`@StartNode`和`@EndNode`等注解,可以清晰地...

    spring 3.1中文文档

    3. **bean的实例化与管理**:Spring 3.1支持通过构造方法、静态工厂方法和实例工厂方法等方式实例化bean,同时提供了bean的生命周期管理、作用域设置等功能。 4. **自定义范围的实现**:除了默认提供的单例、原型、...

    spring3.0帮助文档

    IoC(Inversion of Control)容器是Spring框架的核心组件之一,负责管理对象的生命周期和依赖关系注入。 ##### 4.2 基础概念:容器与Bean - **容器**: Spring框架提供的容器,负责实例化、配置和组装Bean。 - **...

    bean-validator-cdi-2.2.0-b23.zip

    而CDI,全称为Context and Dependency Injection,是Java EE中用于管理对象生命周期和依赖关系的规范。CDI允许开发者声明性地注入依赖,减少了代码中的硬编码,提高了代码的可测试性和可维护性。在2.2.0-b23版本中,...

    spring3.1中文参考文档

    - 介绍了如何使用初始化和销毁回调来管理bean的生命周期。 - **4.6.2 ApplicationContextAware和BeanNameAware** - 介绍了如何让bean实现这两个接口以获得额外的信息。 - **4.6.3 其它Aware接口** - 介绍了Spring...

    camunda-bpm-platform:使用BPMN和DMN进行工作流和决策自动化的灵活框架。 与Spring,Spring Boot,CDI集成

    Camunda BPM-开源BPM平台 Camunda BPM平台... 网站: : 入门: : 用户论坛: : 问题追踪器: : 贡献准则: : 组件Camunda BPM平台提供了围绕BPM生命周期的丰富组件集。流程实施与执行Camunda Engine-负责执行BPMN 2

    JSF2.2.6+Spring + Hibernate整合可运行

    5. **DAO接口和实现**:定义了与数据库交互的方法,Spring通常会自动管理这些bean的生命周期。 6. **服务接口和实现**:封装了业务逻辑,依赖于DAO来完成数据操作。 7. **JSF页面**:使用JSF组件创建的JSP或XHTML...

    spring-osgi 入门手册和代码

    Spring OSGi 是一个将 Spring 框架与 OSGi(Open Service Gateway Initiative)容器相结合的开源项目,旨在提供一种在 OSGi 环境下使用 Spring 的方式。OSGi 是一种模块化系统,它允许开发人员创建可热部署、可升级...

    jsf-spring-boot-autoconfigure-2.2.0.zip

    1. **JavaServer Faces (JSF)**:理解JSF的基本原理,包括UI组件模型、生命周期、事件处理和数据绑定,以及如何在JSF应用中整合其他技术如CDI和PrimeFaces。 2. **Spring Boot**:熟悉Spring Boot的核心特性,如...

    spring-3.2.8.jar

    1. IoC(Inversion of Control)容器:IoC是Spring的核心,通过配置文件或注解实现对象的创建和管理,使得开发者可以专注于业务逻辑,而非对象的生命周期管理。 2. AOP:Spring的AOP模块允许开发者定义“切面”...

    spring-framework-reference-4.0.1

    - **使用容器**:解释了如何在应用程序中利用 Spring 容器管理 bean 的生命周期。 #### Bean 概览 - **命名 Bean**:如何为 Bean 分配唯一名称。 - **别名**:允许为同一个 Bean 分配多个别名,方便在不同上下文中...

    jsf2(primefaces3)+spring+hibernate案例下载

    此外,JSF2还支持自定义标签、CDI集成以及增强的生命周期管理,提高了开发效率。 **PrimeFaces 3** 是一个流行的JSF组件库,提供了大量的UI组件,如数据网格、图表、对话框等,使得开发者可以快速创建美观且功能...

    工作流和过程自动化框架CamundaBPM.zip

    Camunda BPM平台还提供了一套丰富的、围绕BPM生命周期的组件: 流程实现和执行组件:camunda engine(负责执行BPMN 2.0流程)、REST API、Spring/CDI集成 流程设计组件:camunda modeler、camunda cycle ...

    cdi-tech:使用 CDI 功能

    CDI可以与JSF(JavaServer Faces)、EJB(Enterprise JavaBeans)等Java EE组件无缝集成,也可以通过Weld或OpenWebBeans等实现与Spring框架的协同工作。 五、实战演练 在“cdi-tech-master”项目中,你可以找到...

    JSF2.0+Spring+Hibernate实例代码.zip.zip

    Spring的核心是IoC(Inversion of Control)容器,它管理对象的生命周期和依赖关系。Spring MVC是Spring框架的一部分,专门用于Web应用开发,它提供了一个清晰的分层架构,使开发者可以将视图、控制逻辑和模型分离。...

Global site tag (gtag.js) - Google Analytics