把容器中的对象绑定到某个范围(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
分享到:
相关推荐
IoC容器是Spring框架的基础,它负责管理对象的生命周期和依赖关系。在Spring3.2.5中,IoC容器的性能得到优化,配置方式也更加灵活,支持XML、注解以及Java配置三种方式,使得代码更加简洁和可读。 其次,AOP模块...
- **Bean的作用范围与验证**:Spring允许定义Bean的作用范围,如singleton、prototype等,这有助于控制对象的生命周期和内存消耗。此外,Spring还提供了BeanValidation集成支持,便于进行数据验证。 #### 三、面向...
通过XML配置或基于注解的配置,开发者可以定义Bean的生命周期和行为。 3. **AOP**:Spring的AOP模块支持面向切面编程,可以将关注点分离,如日志、事务管理等,使核心业务逻辑更为清晰。 4. **数据访问**:Spring...
在书中,读者将了解到Spring的核心组件,如IoC(Inversion of Control)容器,它通过管理对象的生命周期和依赖关系,使得代码更加松耦合和易于测试。此外,作者详细讲解了AOP(Aspect-Oriented Programming)面向切...
Spring容器负责创建bean、装配它们的依赖关系并管理它们的生命周期。 - **命名bean**:为bean指定一个唯一的名字,方便后续的引用。 - **实例化bean**:可以通过构造器、静态工厂方法或实例工厂方法等方式来创建...
4. **事件监听**:允许在对象持久化生命周期的各个阶段添加自定义逻辑,例如在节点创建或更新时触发操作。 5. **关系类型和方向的注解**:使用`@RelationshipEntity`,`@StartNode`和`@EndNode`等注解,可以清晰地...
3. **bean的实例化与管理**:Spring 3.1支持通过构造方法、静态工厂方法和实例工厂方法等方式实例化bean,同时提供了bean的生命周期管理、作用域设置等功能。 4. **自定义范围的实现**:除了默认提供的单例、原型、...
IoC(Inversion of Control)容器是Spring框架的核心组件之一,负责管理对象的生命周期和依赖关系注入。 ##### 4.2 基础概念:容器与Bean - **容器**: Spring框架提供的容器,负责实例化、配置和组装Bean。 - **...
而CDI,全称为Context and Dependency Injection,是Java EE中用于管理对象生命周期和依赖关系的规范。CDI允许开发者声明性地注入依赖,减少了代码中的硬编码,提高了代码的可测试性和可维护性。在2.2.0-b23版本中,...
- 介绍了如何使用初始化和销毁回调来管理bean的生命周期。 - **4.6.2 ApplicationContextAware和BeanNameAware** - 介绍了如何让bean实现这两个接口以获得额外的信息。 - **4.6.3 其它Aware接口** - 介绍了Spring...
Camunda BPM-开源BPM平台 Camunda BPM平台... 网站: : 入门: : 用户论坛: : 问题追踪器: : 贡献准则: : 组件Camunda BPM平台提供了围绕BPM生命周期的丰富组件集。流程实施与执行Camunda Engine-负责执行BPMN 2
5. **DAO接口和实现**:定义了与数据库交互的方法,Spring通常会自动管理这些bean的生命周期。 6. **服务接口和实现**:封装了业务逻辑,依赖于DAO来完成数据操作。 7. **JSF页面**:使用JSF组件创建的JSP或XHTML...
Spring OSGi 是一个将 Spring 框架与 OSGi(Open Service Gateway Initiative)容器相结合的开源项目,旨在提供一种在 OSGi 环境下使用 Spring 的方式。OSGi 是一种模块化系统,它允许开发人员创建可热部署、可升级...
1. **JavaServer Faces (JSF)**:理解JSF的基本原理,包括UI组件模型、生命周期、事件处理和数据绑定,以及如何在JSF应用中整合其他技术如CDI和PrimeFaces。 2. **Spring Boot**:熟悉Spring Boot的核心特性,如...
1. IoC(Inversion of Control)容器:IoC是Spring的核心,通过配置文件或注解实现对象的创建和管理,使得开发者可以专注于业务逻辑,而非对象的生命周期管理。 2. AOP:Spring的AOP模块允许开发者定义“切面”...
- **使用容器**:解释了如何在应用程序中利用 Spring 容器管理 bean 的生命周期。 #### Bean 概览 - **命名 Bean**:如何为 Bean 分配唯一名称。 - **别名**:允许为同一个 Bean 分配多个别名,方便在不同上下文中...
此外,JSF2还支持自定义标签、CDI集成以及增强的生命周期管理,提高了开发效率。 **PrimeFaces 3** 是一个流行的JSF组件库,提供了大量的UI组件,如数据网格、图表、对话框等,使得开发者可以快速创建美观且功能...
Camunda BPM平台还提供了一套丰富的、围绕BPM生命周期的组件: 流程实现和执行组件:camunda engine(负责执行BPMN 2.0流程)、REST API、Spring/CDI集成 流程设计组件:camunda modeler、camunda cycle ...
CDI可以与JSF(JavaServer Faces)、EJB(Enterprise JavaBeans)等Java EE组件无缝集成,也可以通过Weld或OpenWebBeans等实现与Spring框架的协同工作。 五、实战演练 在“cdi-tech-master”项目中,你可以找到...
Spring的核心是IoC(Inversion of Control)容器,它管理对象的生命周期和依赖关系。Spring MVC是Spring框架的一部分,专门用于Web应用开发,它提供了一个清晰的分层架构,使开发者可以将视图、控制逻辑和模型分离。...