我知道Application-Scope在多个用户中都存在,因此我们应该确保所有ApplicationScoped ManagedBeans都是线程安全的。
我也理解我们不需要关心RequestScoped ManagedBean的线程安全性。那是因为它只持续一个HTTP请求,如果被引用,则会为每个请求重新实例化。
但我不太清楚为什么我们应该担心SessionScoped ManangedBean的线程安全性。即使它持续存在多个请求,每个用户都可以获得自己的实例,对吧?
那么,为什么我们需要在SessionScoped ManagedBeand的情况下担心线程安全,这是否也适用于ViewScoped ManagedBean? ViewScope在同一视图的两个连续请求中持续存在,对吗?
答案 0 :(得分:8)
如果您已经担心某个范围内数据的线程安全性,那么数据很可能属于更窄的范围(即高级设计存在缺陷)。如果数据放在合适的范围内,那么完全没有理由担心线程安全。我假设您的bean的设计正确,他们没有在getters中执行任何业务逻辑。
将应用程序范围用于应用程序范围的数据/常量,例如每个人都相同的下拉列表。将会话范围用于客户端特定数据,例如登录用户和用户首选项(语言等)。将视图范围用于富启用Ajax的动态视图(基于ajax的验证,渲染等)。将请求范围用于简单和非ajax表单/演示文稿。