Java EE CDI bean范围

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提供的范围:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/368855.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用shell脚本进行代码备份和数据库备份

1、实际并不是进行代码备份&#xff0c;而是对上传的附件备份&#xff0c; 毕竟代码在我这边主要是通过svn管控的&#xff0c;不需要进行备份了&#xff0c;但是为了偷懒&#xff0c;还是将整个文件夹直接打包了。 name"your code file name" #你代码文件夹的名称# t…

php强类型 vscode,VSCode + WSL 2 + Ruby环境搭建图文详解

vscode配置ruby开发环境vscode近年来发展迅速&#xff0c;几乎在3年之间就抢占了原来vim、sublime text的很多份额&#xff0c;犹记得在2015-2016年的时候&#xff0c;ruby推荐的开发环境基本上都是vim和sublime text&#xff0c;然而&#xff0c;随着vscode的发展&#xff0c;…

关于网页导航栏制作的几种方法与常见问题解决(新人向)

无序列表是html页面排版经常用到的非常实用的标签&#xff0c;但是新手在使用无序列表时&#xff0c;经常会在横向排版上出现问题&#xff0c;笔者在这里提供了笔者在使用无序列表制作网页导航栏时的几种方法与常见问题的解决问题。&#xff08;以css内部样式为例&#xff09; …

JPA – Querydsl投影

在我的上一篇文章中&#xff1a; JPA –基本投影 –我已经提到了构建JPA投影的两种基本可能性。 这篇文章为您带来了更多示例&#xff0c;这次基于Querydsl框架。 注意&#xff0c;这里我指的是Querydsl版本3.1.1。 重塑构造函数表达式 看下面的代码&#xff1a; ... import …

3n+1问题中的几个小的注意点

3038 3n1问题 时间限制: 1 s空间限制: 32000 KB题目等级 : 白银 Silver题解题目描述 Description3n1问题是一个简单有趣而又没有解决的数学问题。这个问题是由L. Collatz在1937年提出的。克拉兹问题&#xff08;Collatz problem&#xff09;也被叫做hailstone问题、3n1问题、Ha…

Mysql函数访问oracle,Oracle与MySql函数

Oracle:1. 截取字符串中字符前的字符串(不包括字符)select Substr(P.SCHEDULE_CODE, 1, Instr(P.SCHEDULE_CODE, (, 1)-1) from M_SUB_TASK_SCHEDULE_LOG P;2. 截取字符串中字符前的字符串(包括字符)select Substr(P.SCHEDULE_CODE, 1, Instr(P.SCHEDULE_CODE, (ret, 1)) fr…

html 语义化标签拾遗

1、del和ins标签 兼容性&#xff1a;浏览器全部支持 del&#xff1a;定义文档中已被删除的文本。 ins&#xff1a;定义已经被插入文档中的文本。 <!DOCTYPE html><html lang"zh"><head><meta charset"UTF-8" /><title>ht…

Spring MVC表单教程

本教程将展示如何在Spring MVC中处理表单提交。 我们将定义一个控制器来处理页面加载和表单提交。 您可以在GitHub上获取代码。 先决条件&#xff1a; 您应该有一个运行中的Spring MVC应用程序。 如果尚未设置正常的Spring MVC应用程序&#xff0c;请按照本教程进行操作 。 对…

一个跳转提示页面---JS

//一个跳转提示页面 <script type"text/javascript"> var s5; function go(){ document.getElementById("chan").innerHTMLs; ss-1; if (s0){ window.location.href"http://www.imooc.com/"; …

理解Flexbox弹性盒子

http://www.w3cplus.com/css3/understanding-flexbox-everything-you-need-to-know.html参考文档 1&#xff1a;要开始使用Flexbox&#xff0c;必须先让父元素变成一个Flex容器。 你可以在父元素中显式的设置 display:flex或者 display:inline-flex。就这么的简单&#xff0c…

php安装dat,PHP Parsing a .dat file

问题I have a .dat file that is essentially ; delimited file and Im trying to convert it to a tab delimited .txt. The problem that I am not sure about is that each row of the new file will be a combination of 3 of the original files rows, each original row …

[转]Bing Maps Tile System 学习

原文链接&#xff1a;Bing Maps Tile System 学习 转载于:https://www.cnblogs.com/rainbow70626/p/8992322.html

Spring休眠3

1.概述 本文将重点介绍通过Spring设置Hibernate 3 –我们将研究如何同时使用XML和Java配置通过Hibernate 3和MySQL设置Spring 3。 2. Hibernate 3的Java Spring配置 使用Spring和Java配置来设置Hibernate 3很简单&#xff1a; import java.util.Properties; import javax.sql…

我们十组的cantool装置的使用

十组的cantool装置的使用 下图是连接好的示意图&#xff0c;灯亮。 如果在串口关闭的时候输入C&#xff0c;cantool装置就会报错&#xff0c;因为串口是关闭的。正如需求文档里写的&#xff0c;当串口关闭&#xff0c;输入C要有返回\BEL的,关闭串口的前提是串口打开。 正确发送…

php查询功能突然没有用,php – 为什么搜索查询没有在PHRETS中显示任何结果?

我正在使用这个PHP脚本从一个简单的搜索查询获得结果here我已经下载了属性here的元数据excel文件$rets_login_url "http://sef.rets.interealty.com/Login.asmx/Login";$rets_username "xxxxxxxx";$rets_password "xxxxxxxx";$rets_user_agen…

es6入门

现在我们来学习一下es6,它现在是一门比较火的语言但是并不是所有的浏览器都兼容E6说的全部特性&#xff0c; 但是我们依旧应该学习一下ES6的语法。 因为兼容性我们得学习一下Babel,它是一个广泛使用的ES6转换器&#xff0c;可以将ES6代码转化为ES5代码&#xff0c;从而在现有环…

2018-05-05(在小程序中使用图标)

项目中常常需要使用到字体图标&#xff0c;微信小程序中使用字体图标与在平常的web前端中类似但是又有区别。下面以使用阿里图标为例子讲解如何在微信小程序中使用字体图标。 第一步&#xff1a;下载需要的字体图标 进入阿里图标官网http://iconfont.cn/搜索自己想要的图标&…

Spring休眠4

1.概述 本文将重点介绍如何使用Spring设置Hibernate 4 –我们将研究如何使用Java和XML配置来使用Hibernate 4配置Spring 3。 当然&#xff0c;该过程的某些部分对于Hibernate 3文章是通用的 。 2. Maven 要将Spring Persistence依赖项添加到项目pom.xml中 &#xff0c;请参阅专…

php 水平测试,测试您的 PHP 水平的题目_PHP教程

在 Unix Review 上看到这个很有意思的测试&#xff0c;和大家共享。UnixReview.comMay 2007Test Your Knowledge of PHPby Emmett DulaneyFrom: http://www.unixreview.com/documents/s10130/ur0705d/Increasingly, PHP seems to be the tool/language that is used to make We…

Django的模板系统

一、模板的组成 html代码和逻辑控制代码 二、逻辑控制代码的形式 1、变量&#xff08;使用双大括号引用变量&#xff09; a、template和context 语法 : {{ var_name }} 模板系统不仅可以传字符串&#xff0c;它可以传递任意对象&#xff0c;对于向列表、字典、元组等对象&…