把容器中的对象绑定到某个范围(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
分享到:
相关推荐
我的玩具DLC 在 EUDAT CDI 中演示数据生命周期的 Web 界面
为了让 Dreamcast 从 CD-R 备份中完美读取任何游戏,值得将 CDI 文件从音频/数据转换为数据/数据格式。此外,还可以创建包含多个游戏的编辑光盘来保存 CD-R 光盘。为了能够创建编辑光盘,初始 CDI 必须是音频数据...
You'll learn about the standard dependency injection specification for Java contexts and CDI and how the Spring Framework supports it. You'll gain an understanding of how application architectures ...
j2ee cdi 例子,对CDI 的应用范围,实例的创建都做了示例
生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的MongoDB支持 10.1。入门 10.2。使用Spring和Reactive Streams ...
CDI 接口规范,个系统之间通信C1规范,通过soap传输,通信规范约束
cdi-api-1.1 <name>CDI APIs <description>APIs for CDI (Contexts and Dependency Injection for Java EE) <url>http://www.seamframework.org/Weld</url>
详细介绍了德力西cdi9200变频器的安装使用及参数设置。
In Pro CDI 2 in Java EE 8, use CDI and the CDI 2.0 to automatically manage the life cycle of your enterprise Java, Java EE, or Jakarta EE application’s beans using predefined scopes and define custom...
德力西CDI9200变频器说明书(英文)pdf,德力西CDI9200变频器说明书(英文)
JSF+JPA+CDI 框架 最老的WEB开发是Servlet 之后是火热的SSH组合框架 现在用基于JavaEE6标准示范而进行的开发框架,组合为JSF + JPA + CDI JSF用于界面,JPA用于数据库、持久化,CDI太猛了,不多介绍。
德力西CDI9200说明书(第四版)pdf
德力西CDI9000英文说明书pdf,德力西CDI9000英文说明书
921单片机制作的CDI点火器.rar921 single-chip microcomputer making CDI ignition. Rar
德力西CDI-E100G0R75T4B 变频器使用手册,包括变频器安装与接线,键盘操作与运行,功能参数表等。
CDI+JSF2.0项目成功部署在 websphere8.5下, 兼容性问题总结.
德力西CDI9100-S变频器说明书(英文)pdf,德力西CDI9100-S变频器说明书(英文)
分享CDI硬件信息检测工具,绿色免安装免注册!
CDI (以前称为JSR 299)是一种尝试描述依赖注入的真实标准的尝试。 乍一看,CDI的吸引力在于SpringSource和Google都参与了规范团队。 CDI是Java EE 6堆栈的一部分,这意味着在Java EE 6兼容容器中运行的应用程序...