有关 EJB3,无状态会话Bean 与 Spring 依赖注入 Singleton 的困惑!

最近我在学习 EJB3。关于它的无状态会话Bean,我有一些困惑。

按照 EJB3 规范,容器会为每一种无状态会话 Bean 创建一定数量的实例,然后将它们保存在一个缓冲池(pool) 里面,然后根据调用的情况,将它们在调用者之间分配。书上特别强调了,因为这些 bean 都是无状态的,所以自由度很高。比如说,一个对象调用了无状态会话 Bean 的方法A,执行了一段时间;然后,又调用了同一个 Bean 的方法B。但实际上,它调用的是实例 1 的方法A,和实例 2 的方法B。只不过这一切,对调用者来说都是透明的。

这就是我的困惑所在。我们都知道,可以用无状态的 Singleton 来封装一些领域服务。比如说,UserService,就可以是一个 Singleton class。在实际使用时,可以用 IoC 容器的依赖注入方法得到它的一个(全 JVM 唯一的)Singleton 实例,然后再调用它里面的方法,比如说:
[code]
public class ... {
private UserService userService;
public void setUserService(UserService v) {
// IoC 容器将会注入 UserService 的一个实现的实例,
// 这也将是整个 JVM 共享的一个实例。
userService = v;
}

...

public boolean isValidUser(String username, String password) {
User user = userService.processLogin(username, password);
return (user != null);
}

}
[/code]

一切都很基础。
[color=red]
我现在主要的问题就是,EJB 容器为无状态会话 Bean 创建[b]多个[/b]实例并缓冲,到底有什么特别的好处?既然他们是[b]无状态[/b]的,为什么不可以整个系统共享一个实例呢?难道说,多个实例的执行效率更高?这似乎颠覆了我个人的 JVM 基本概念.....
[/color]
请各位指教。谢谢。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值