我知道 Application-Scope 在多个用户之间持续存在,所以很明显我们应该确保所有 ApplicationScoped ManagedBeans 都是线程安全的。
我也明白我们不需要关心 RequestScoped ManagedBean 的线程安全。这是因为它只持续一个 HTTP 请求,并且如果它被引用,则为每个请求新实例化。
但是我不太确定为什么我们应该担心 SessionScoped ManangedBean 的线程安全。即使它在多个请求中持续存在,每个用户都会得到他/她自己的实例,对吗?
那么,为什么我们需要担心 SessionScoped ManagedBeand 的线程安全性,这是否也适用于 ViewScoped ManagedBean? ViewScope 在同一 View 的 2 个连续请求中持续存在,对吗?
最佳答案
如果您已经担心某个范围内数据的线程安全性,那么该数据很可能属于更窄的范围(即高层设计存在缺陷)。如果数据放在正确的范围内,那么完全没有理由担心线程安全。我假设您的 bean 的设计方式是正确的,它们在 getters 中没有执行任何业务逻辑。 .
将应用范围用于应用范围的数据/常量,例如对每个人都相同的下拉列表。将 session 范围用于客户端特定数据,例如登录用户和用户首选项(语言等)。将 View 范围用于支持丰富的 ajax 动态 View (基于 ajax 的验证、渲染等)。将请求范围用于简单和非 ajax 表单/演示文稿。
关于jsf - 为什么我们应该在 JSF 中使 SessionScoped ManagedBean 线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6010164/