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 bean范围相关推荐

  1. Java EE CDI程序化依赖关系消歧示例–注入点检查

    在本教程中,我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义. 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关系歧义消除. 在这里,我 ...

  2. java ee cdi_Java EE CDI bean范围

    java ee cdi Java EE平台的上下文和依赖注入(CDI)是一项功能,有助于将Java EE平台的Web层和事务层绑定在一起. CDI是一组服务,可以一起使用,使开发人员可以轻松地在Web ...

  3. Java EE CDI依赖关系消歧示例

    在本教程中,我们将向您展示如何避免CDI bean中的依赖关系消除歧义. 在CDI中,我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入. 依赖关系消除歧义的问题是客户端如何在不同的实现中调 ...

  4. Java EE CDI处理程序方法示例

    这是CDI Disposer方法的教程. 在CDI中,由于Producer方法生成的对象随后可以注入到应用程序中,因此使用Disposer方法,以便在其工作完成时将其删除. Disposer方法始终与 ...

  5. Java EE CDI Producer方法教程

    这是CDI Producer方法的教程. 在CDI中,生产者方法生成一个可以注入的对象. 当我们要注入本身不是bean的对象,要注入的对象的具体类型在运行时可能有所不同,或者当对象需要一些bean构造 ...

  6. Java EE CDI ConversationScoped示例

    在本教程中,我们将向您展示如何在Web应用程序中创建和使用ConversationScoped Bean. 在CDI中,bean是定义应用程序状态和/或逻辑的上下文对象的源. 如果容器可以根据CDI规 ...

  7. Java EE CDI限定词:快速浏览

    在上下文和依赖注入(CDI)中, 限定符是类型安全和松散耦合的主体. 为什么? 没有CDI,我们将以类似于下面的方式注入Java EE组件 注意:这实际上不会编译,只是假设的代码片段 例子1 例子2 ...

  8. Java EE CDI依赖注入(@Inject)教程

    在本教程中,我们将向您展示如何在CDI管理的Bean中实现依赖注入. 特别是,我们将利用CDI API提供的@Inject批注将CDI bean注入另一个bean. 这样,可以在应用程序(例如Java ...

  9. java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查

    java ee cdi 在本教程中,我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义. 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关 ...

最新文章

  1. luvit 被忽视的lua 高性能框架(仿nodejs)
  2. 批处理命令学习笔记——Start命令
  3. 苹果降价背后的代工厂之殇
  4. Acwing第 7 场周赛【未完结】
  5. java sortedset_Java类集-SortedSet接口 | 学步园
  6. 科普漫画 | 沙子如何变成芯片?
  7. 微信(QQ)截图时,无法保留鼠标右键菜单选项内容
  8. 《团队激励与沟通》第 8 讲——团队合作技巧 重点部分总结
  9. 值得收藏的8个Web端组件库
  10. oracle存储过程导出查询结果,ORACLE如何实现函数、包、存储过程的导入和导出
  11. Liferay Portal使用MySQL数据库配置
  12. python generator类型_python生成器(Generator)
  13. jenkins 管理员账号丢失
  14. HCIE-Routing Switching实验考试延期至2022年12月31日
  15. GIT - 安装、设置和帮助
  16. greenplum数据库的使用
  17. Lambda表达式_Stream流_File类
  18. 【ffmpeg】——批量合并视频
  19. 使用teensy 2.0++ 开发板模拟U盘
  20. 详细讲解网络协议:TCP和UDP什么区别?

热门文章

  1. basemap安装_Python画地图逃不过的basemap「完全安装手册」 | 附下载
  2. es6 dsl与sql对比
  3. Quartz定时任务的基本搭建
  4. drools 执行函数_Drools可执行模型还活着
  5. platform_SpringOne Platform 2016回顾
  6. netbeans连接数据库_NetBeans Java EE技巧3:数据库中的RESTful Web服务
  7. Java十六进制浮点文字
  8. mock测试使用断言_使用自定义断言丰富测试代码
  9. spring和spring_Spring交易可见性
  10. Java命令行界面(第9部分):parse-cmd