7

我知道 Application-Scope 跨多个用户持续存在,所以很明显我们应该确保所有 ApplicationScoped ManagedBeans 都是线程安全的。

我也明白我们不需要关心 RequestScoped ManagedBean 的线程安全。那是因为它只持续一个 HTTP 请求,并且如果它被引用,就会为每个请求重新实例化。

但我不太清楚为什么我们应该担心 SessionScoped ManangedBean 的线程安全。即使它在多个请求中持续存在,每个单独的用户都会获得他/她自己的实例,对吗?

那么,为什么我们需要担心 SessionScoped ManagedBeand 的线程安全,这是否也适用于 ViewScoped ManagedBean?ViewScope 在同一视图的 2 个连续请求中持续存在,对吗?

4

1 回答 1

8

如果您已经担心某个范围内的数据的线程安全,那么数据很可能属于更窄的范围(即高层设计存在缺陷)。如果数据被放在正确的范围内,那么完全没有理由担心线程安全。我假设您的 bean 以正确的方式设计,它们没有在getters中执行任何业务逻辑。

对应用程序范围的数据/常量使用应用程序范围,例如对每个人都相同的下拉列表。将会话范围用于客户端特定数据,例如登录用户和用户首选项(语言等)。将视图范围用于支持 ajax 的丰富动态视图(基于 ajax 的验证、渲染等)。将请求范围用于简单和非 ajax 表单/演示文稿。

于 2011-05-16T00:23:52.057 回答