java ee cdi_Java EE CDI bean范围
java ee cdi
Java EE平台的上下文和依赖注入(CDI)是一项功能,有助于将Java EE平台的Web层和事务层绑定在一起。 CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web应用程序中使用企业bean和JavaServer Faces技术。
在CDI中,bean是定义应用程序状态和/或逻辑的上下文对象的源。 如果容器可以根据CDI规范中定义的生命周期上下文模型来管理其实例的生命周期,则Java EE组件就是Bean。
托管bean是由Java类(称为其bean类)实现的。 如果任何其他Java EE技术规范(例如JavaServer Faces技术规范)将顶级Java类定义为托管bean,则该顶级Java类为托管bean。
当我们需要使用在Web应用程序中注入另一个bean类的bean时,该bean需要能够在用户与应用程序交互期间保持状态。 定义此状态的方法是给Bean一个范围。 范围为对象提供了明确定义的生命周期上下文。 有作用域的对象可以在需要时自动创建,并在创建对象的上下文结束时自动销毁。 而且,其状态由在相同上下文中执行的所有客户端自动共享。
当我们创建作为托管bean的Java EE组件时,它将成为有作用域的对象,该对象存在于定义良好的生命周期上下文中。 下表列出了CDI提供的范围:
1.请求– @RequestScoped
此范围描述了单个HTTP请求中用户与Web应用程序的交互。 @RequestScoped
注释的bean的实例具有HTTP请求生命周期。
2.会话– @SessionScoped
此范围表示用户跨多个HTTP请求与Web应用程序的交互。
3.应用程序– @ApplicationScoped
在这种情况下,状态在所有用户与Web应用程序的交互中共享。 容器为所有客户端请求提供了@ApplicationScoped
注释的Bean的相同实例。
4.对话– @ConversationScoped
此范围描述了用户与JavaServer Faces应用程序之间的交互,该交互在显式的开发人员控制的边界内进行,该边界将范围扩展到JavaServer Faces生命周期的多次调用。 所有长时间运行的对话都限于特定的HTTP Servlet会话,并且可能不会跨越会话边界。
注意,使用ConversationScoped
Bean,我们可以从ViewScoped
JSF Bean中获得所需的相同功能。 此外,借助ConversationScoped
Bean,我们可以在不同的页面请求之间维护相同的对话(或状态)。 但是,当我们不进行对话时,托管Bean将保持活动状态直到超时。
需要注意的是,使用会话或会话范围的bean必须可序列化。 这是因为容器会不时地钝化HTTP会话,因此当再次激活该会话时,必须检索Bean的状态。
5. Singleton – @Singleton伪作用域
这是一个伪作用域。 它定义了一次实例化bean。 当将CDI托管bean注入另一个bean中时,CDI容器将使用代理。 代理是处理对bean的调用的代理。 但是,@ @Singleton
注释的bean没有代理对象。 客户端直接引用单例实例。 那么,当客户端被序列化时会发生什么? 我们必须确保单例bean保持单例。 为此,有几种方法,例如,让单例bean实现writeResolve()
和readReplace()
(由Java序列化规范定义),确保客户端仅保留对单例bean的临时引用,或者给出客户端对Instance<X>
类型的引用,其中X
是单例bean的bean类型。
6. Dependent – @Dependent伪作用域
该伪作用域意味着存在一个对象,该对象恰好服务于一个客户端(bean),并且具有与该客户端(bean)相同的生命周期。 这是未显式声明作用域类型的bean的默认作用域。 从属bean的实例永远不会在不同客户端或不同注入点之间共享。 严格来说,它是某些其他对象的从属对象。 它在创建属于它的对象时被实例化,而在它属于它的对象被破坏时被实例化。
除@Dependent
外,所有预定义范围都是上下文范围。 CDI将上下文范围的bean放置在其生命周期由Java EE规范定义的上下文中。 例如,会话上下文及其bean在HTTP会话的生存期内存在。 对bean的注入引用是上下文相关的。 引用始终适用于与进行引用的线程的上下文相关联的Bean。 CDI容器确保在为这些对象指定的范围所确定的正确时间创建和注入对象。
您还可以定义和实现自定义范围。 实施和扩展CDI规范的人员可以使用它们。
这是CDI提供的所有bean范围的教程。 参考文献:
- Seam框架参考文档
- Java EE 6教程
翻译自: https://www.javacodegeeks.com/2013/04/java-ee-cdi-bean-scopes.html
java ee cdi
java ee cdi_Java EE CDI bean范围相关推荐
- java ee cdi_Java EE CDI依赖关系消歧示例
java ee cdi 在本教程中,我们将向您展示如何避免CDI bean中的依赖关系消除歧义. 在CDI中,我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入. 依赖性消除歧义的问题是客户 ...
- java ee cdi_Java EE CDI依赖注入(@Inject)教程
java ee cdi 在本教程中,我们将向您展示如何在CDI管理的Bean中实现依赖注入. 特别是,我们将利用CDI API提供的@Inject批注将CDI bean注入另一个bean. 通过这种方 ...
- java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查
java ee cdi 在本教程中,我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义. 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关 ...
- java ee cdi_Java EE CDI ConversationScoped示例
java ee cdi 在本教程中,我们将向您展示如何在Web应用程序中创建和使用ConversationScoped Bean. 在CDI中,bean是定义应用程序状态和/或逻辑的上下文对象的源. ...
- java ee cdi_Java EE CDI限定词:快速浏览
java ee cdi 在上下文和依赖注入(CDI)中, 限定符是类型安全和松散耦合的主体. 为什么? 没有CDI,我们将以类似于下面的方式注入Java EE组件 注意:这实际上不会编译,只是假设的代 ...
- java ee cdi_Java EE CDI处理程序方法示例
java ee cdi 这是CDI Disposer方法的教程. 在CDI中,由于Producer方法生成的对象随后可以注入到应用程序中,因此使用Disposer方法,以便在其工作完成时将其删除. D ...
- java ee cdi_Java EE CDI Producer方法教程
java ee cdi 这是CDI Producer方法的教程. 在CDI中,生产者方法生成一个对象,然后可以将其注入. 当我们要注入本身不是bean的对象,要注入的对象的具体类型在运行时可能有所不同 ...
- java ee cdi_Java EE6 CDI,命名组件和限定符
java ee cdi Java EE6的最大承诺之一就是简化了依赖注入的使用. 他们做到了,使用CDI . CDI代表Java EE的上下文和依赖注入,它提供了一个基础集,用于在企业应用程序中应用依 ...
- Java EE CDI bean范围
Java EE平台的上下文和依赖注入(CDI)是一项功能,可帮助将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web应用程序中使用企业bea ...
最新文章
- 未经任何测试的源代码开放
- jquery json 判断用户是否已注册
- ACM 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 B. Train Seats Reservation
- python 多条件 选择 算法_python部署python算法 - 快速寻找满足条件的两个数
- java 图片不能正常移动_Java,我的图像不会更新/移动
- IEEE 802.1x 硬件参加的过程
- 实例练习----电影天堂抓取下载链接
- 【持久化框架】SpringMVC+Spring4+Mybatis3集成,开发简单Web项目+源码下载 【转】...
- 计算机网络复习-物理层
- 【43】学习处理模版化基类内的名称
- 逆水寒 各个服务器位置,2019年3月28日首个“超级大服”服务器合并命名结果公告...
- 三种命名规则之-----骆驼命名法
- 金融初学者的感受:兴趣的魔力
- 世界上最著名的24句哲理
- shell脚本——sql连接及其查询结果重定向到txt
- 现货期货价格关系(现货期货价格关系分析)
- discuz的php7版本
- 点击密码框显示密码(点击密码框小眼睛可显示输入密码)
- 版图匹配之差分电流镜
- 网站要怎么样进行站外优化才会提升关键词排名?
热门文章
- IntegerCache的妙用和陷阱
- CSS3的几个变形案例……
- java实现遍历树形菜单方法——TreeAction实现
- openfire log4j:ERROR setFile(null,true) call failed.
- intro to JNDI
- spring 配置只读事务_只读副本和Spring Data第1部分:配置数据库
- 构造函数调用默认构造函数_显式无参数构造函数与默认构造函数
- commons cli_从Commons CLI迁移到picocli
- 如何将网页部署到maven_如何通过Rultor将Maven工件部署到CloudRepo
- apache pulsar_Apache Pulsar:分布式Pub-Sub消息系统