会话Bean的类型
会话bean有三种类型:有状态,无状态和单例。
有状态会话Bean
对象的状态由其实例变量的值组成。在有状态会话bean中,实例变量表示唯一客户/ bean会话的状态。由于客户端与bean交互(“对话”),这个状态通常被称为会话状态。
顾名思义,会话bean类似于交互式会话。会话bean不共享; 它只能有一个客户端,就像一个交互式会话只能有一个用户一样。当客户端终止时,其会话bean似乎终止,不再与客户端关联。
该状态在客户端/ bean会话期间被保留。如果客户端删除了这个bean,这个会话就结束了,这个状态就消失了。然而,这种状态的暂时性不是问题,因为当客户端和bean之间的对话结束时,不需要保持状态。
无状态会话Bean
无状态会话bean不会与客户端保持对话状态。当客户端调用无状态bean的方法时,bean的实例变量可能包含特定于该客户端的状态,但仅在调用期间。该方法完成后,客户端特定状态不应保留。但是,客户端可能会更改共用无状态bean中的实例变量的状态,并且此状态将被保留到下一次对共用无状态bean的调用中。除了在方法调用期间,无状态bean的所有实例都是等价的,允许EJB容器将实例分配给任何客户端。也就是说,无状态会话bean的状态应该适用于所有客户端。
因为它们可以支持多个客户端,所以无状态会话bean可以为需要大量客户端的应用程序提供更好的可伸缩性。通常情况下,应用程序需要比有状态会话bean更少的无状态会话bean来支持相同数量的客户端。
无状态会话bean可以实现Web服务,但是有状态会话bean不能。
单例会话Bean
单例会话****bean在每个应用程序中实例化一次,并存在于应用程序的生命周期中。单例会话bean是为单个企业bean实例在客户端之间共享和并发访问的环境而设计的。
单例会话Bean提供了与无状态会话Bean相似的功能,但与它们不同,因为每个应用程序只有一个单一会话Bean,而不是无状态会话Bean池,其中任何一个都可以响应客户端请求。像无状态会话bean一样,单例会话bean可以实现Web服务端点。
单例会话bean在客户端调用之间保持其状态,但不需要在服务器崩溃或关闭时保持其状态。
使用单例会话bean的应用程序可能会指定应用程序启动时单例应该被实例化,这允许单例程序为应用程序执行初始化任务。单例也可以在应用程序关闭时执行清理任务,因为单例将在应用程序的整个生命周期中运行
何时使用会话Bean
1、如果满足以下任何一个条件,则有状态会话Bean是合适的。
(1)bean的状态表示bean和特定客户端之间的交互。
(2)bean需要在方法调用中保存有关客户端的信息。
(3)该bean在客户端和应用程序的其他组件之间进行调解,为客户端提供了一个简化的视图。
(4)在幕后,这个bean管理着几个企业bean的工作流程。
2、为了提高性能,如果具有这些特性中的任何一个,你可以选择一个无状态会话bean。
(1)bean的状态没有特定客户端的数据。
(2)在单个方法调用中,bean为所有客户端执行一个通用任务。例如,您可以使用无状态会话bean发送确认在线订单的电子邮件。
(3)这个bean实现了一个web服务。
3、在以下情况下,单例会话bean是合适的。
(1)状态需要在整个应用程序中共享。
(2)一个企业bean需要被多个线程同时访问。
(3)应用程序需要一个企业bean在应用程序启动和关闭时执行任务。
(4)这个bean实现了一个web服务。
代码实现
有状态会话Bean
//通过使用@Stateful定义一个简单的有状态会话Bean
import java.util.ArrayList;
import java.util.List;
//package org.sample;
//这个一个标有@Stateful注解的POJO
@Stateful
public class Cart {
List items;
public Cart(){
items=new ArrayList<>();
}
public void addItem(String item){
items.add(item);
}
public void removeItem(String item){
items.remove(item);
}
public void purchase(){
}
//remove方法标有@Remove注解。客户端可以通过调用remove方法删除有状态会话Bean。
//调用这个方法将导致容器调用标有@PreDestroy注解的方法。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://img-blog.csdnimg.cn/img_convert/6a9189991b4211e94f2732864212d64c.jpeg)
最后
我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习
已经将知识体系整理好(源码,笔记,PPT,学习视频)
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
中…(img-Va0hBqMh-1713523411393)]
[外链图片转存中…(img-EXVtdZvg-1713523411393)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!