使用范圍

對於Web應用程序來使用注入另一個bean類的bean,bean需要能夠在用戶與應用程序交互的持續時間內保持狀態。 定義這個狀態的方法是給bean一個范圍。 您可以給對象表23-1中描述的任何范圍,具體取決於您如何使用它。

表23-1 范圍

范圍

注釋

持續時間

Request

@RequestScoped

用戶在單個HTTP請求中與Web應用程序的交互。

Session

@SessionScoped

用戶通過多個HTTP請求與Web應用程序進行交互。

Application

@ApplicationScoped

所有用戶與Web應用程序的交互共享狀態。

Dependent

@Dependent

默認范圍如果沒有指定; 這意味着存在一個對象,僅僅服務於一個客戶端(bean),並且具有與該客戶機(bean)相同的生命周期。

Conversation

@ConversationScoped

用戶與servlet的交互,包括JavaServer Faces應用程序。 會話范圍存在於開發人員控制的邊界內,將跨越多個請求延伸到長時間運行的會話中。 所有長時間運行的會話都被限定到特定的HTTP servlet會話,並且可能不會跨越會話邊界。

前三個范圍由JSR 346和JavaServer Faces規范定義。最后兩個由JSR 346定義。

除@Dependent之外的所有預定義范圍都是上下文范圍。 CDI將上下文范圍的bean放置在其生命周期由Java EE規范定義的上下文中。例如,會話上下文及其bean在HTTP會話的生存期內存在。注入bean的引用是上下文感知的。引用始終適用於與正在引用的線程的上下文相關聯的bean。 CDI容器確保在由為這些對象指定的范圍確定的正確時間創建和注入對象。

您還可以定義和實現自定義作用域,但這是一個高級主題。自定義范圍可能被那些實現和擴展CDI規范的用戶使用。

范圍為對象提供了明確定義的生命周期環境。范圍對象可以在需要時自動創建,並在其創建的上下文結束時自動銷毀。此外,其狀態由在相同上下文中執行的任何客戶端自動共享。

Java EE組件(如servlet和企業bean)以及JavaBeans組件不具有明確定義的范圍。這些組件是以下之一:

單例,如Enterprise JavaBeans單例Bean,其狀態在所有客戶端之間共享

無狀態對象,如servlet和無狀態會話bean,不包含客戶機可見狀態

必須由其客戶端明確創建和銷毀的對象,例如JavaBeans組件和有狀態會話bean,其狀態由客戶端之間的顯式引用傳遞共享

但是,如果您創建一個受管Bean的Java EE組件,則它將成為一個作用域對象,該對象存在於一個定義明確的生命周期環境中。

Printer bean的Web應用程序將使用一個簡單的請求和響應機制,因此可以如下注釋受管Bean:import javax.enterprise.context.RequestScoped;

import javax.inject.Inject;

@RequestScoped

public class Printer {

@Inject @Informal Greeting greeting;

...

}

使用會話,應用程序或會話范圍的Bean必須是可序列化的,但是使用請求范圍的bean不必是可序列化的。

java依赖注入上下文_【Java EE】--Contexts and Dependency Injection (上下文與依賴注入)04...相关推荐

  1. java依赖倒转原则_设计原则之--依赖倒转原则

    [各位博友晚上好,又到了晚上的这个时间,感谢大家一直对Darren博客的支持,希望这篇文章对你有所帮助: 这几天一直在看设计模式:简单工厂模式,策略模式,单一职责原则,开放 [依赖倒转原则又称依赖倒置 ...

  2. java 基础面试 英文_[Java面试] 面试java基础总结大全

    原标题:[Java面试] 面试java基础总结大全 基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. ...

  3. java语言金山打字_[Java教程]java实现 swing模仿金山打字 案例源码

    [Java教程]java实现 swing模仿金山打字 案例源码 0 2014-11-17 12:00:21 java实现 swing模仿金山打字 案例源码,更多Java技术就去Java教程网.http ...

  4. java 内存泄露 书籍_[Java教程]一次艰难的内存泄露排查,BeanUtils 的锅

    [Java教程]一次艰难的内存泄露排查,BeanUtils 的锅 0 2020-10-29 18:24:42 现象 通过jstat -gcutil pid 5000 ,发现fgc次数很多而且频繁,此时 ...

  5. java privatekey输出字符串_[Java教程]根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象_星空网...

    根据字符串(String)生成公钥(PublicKey)和私钥(PrivateKey)对象 2012-05-29 0 1.字符串生成公钥对象 PublicKey /** * 实例化公钥 * * @re ...

  6. java视、频_[java视频]感人故 事视 频网 站上那找~~~

    感人故 事视 频网 站上那找~~~ 问题补充:感人故 事视 频网 站上那找~~~ ●呵呵,你问对人了,感人故事就去"新浪show",现在是新浪期下的网站,运行稳定,观看流畅,上传简 ...

  7. java 历遍 类_[Java] 遍历指定包名下所有的类(支持jar) | 学步园

    项目需要,仅做记录. 支持包名下的子包名遍历,并使用Annotation(内注)来过滤一些不必要的内部类,提高命中精度. 通过Thread.currentThread().getContextClas ...

  8. java 图片宽高_[Java]获取图片高和宽

    通过javax.imageio.ImageIO类中的read()函数读取的图片,存放在类java.awt.image.BufferedImage类中.调用BufferedImage类中的getWidt ...

  9. java实现计算器框架_[Java小程序] 实现简单计算器

    这学期没事学了一点点Java,想写个程序练手,因为只学了一点点,所以暂时只能先写个实现简单功能的计算器练练.感觉写完后不是很好,如果路过的哪位高手给点建议,小弟万分感激啊. 由于期末来了,没太多时间, ...

最新文章

  1. 第十五届全国大学生智能汽车竞赛赛道拼装图
  2. 03系统多界面_【part two】操作说明——系统管理、公司管理、客户管理
  3. Algorithm之MC:基于Matlab实现通过蒙特卡洛方法模拟二维布朗运动
  4. openstack搭建之-nova配置(10)
  5. Python实现im2col和col2im函数
  6. Tkinter的Radiobutton组件
  7. 「 每日一练,快乐水题 」191. 位1的个数
  8. 限时领取!CSDN夏日惊喜礼包上线啦~
  9. matlab中solve和resolve,resolve和solve的区别
  10. haskell程序设计语言
  11. 注解的原理又是怎么一回事
  12. (造轮子)C 创建队列和图实现广度优先算法(BFS)和深度优先算法(DFS)(数据结构)
  13. Java集合源码解析之ArrayList
  14. 知乎500w关注:转行数据分析的真实案例!
  15. powershell快捷键_关于powershell的知识你知道多少呢
  16. 区分三个概念:Epoch, Batch, Iteration
  17. 时间控件-Jedate
  18. Mugeda (木疙瘩)H5案例课—交互动画类H5制作-岑远科-专题视频课程
  19. 用word快速将数字字体换成新罗马详细简单方法
  20. ESXi6.0.0 新建win7虚拟机打开电源后鼠标失灵

热门文章

  1. Programming Pearls: Chatper3 Problem5 [Hyphenation Words]
  2. SQL--(MyBatis 实战)
  3. 删除vsftp虚拟用户脚本
  4. 智能家居正是扎根好时节 蓄积且待春雨
  5. 浅谈2D游戏设计模式--游戏剧情设计(1)
  6. Linux无盘教程,如何无盘启动Linux
  7. reeten lock java_Java多线程分析(八)----Syschronized VS ReentrankLock
  8. 把表格的一列生成数组
  9. 公司内部将多国语言key转换成中文javaScript
  10. 233网校java_java辅导:使用java模拟登陆考试大