@SessionScoped
CDI bean中如何定义会话?
这个注释是否仅在从Servlet容器调用时才有效,其中会话以HttpSession
的形式定义?
如果没有,那么@Inject @SessionScoped MyBean myBean
的EJB如何知道会话的真正含义?我的意思是,这个EJB的方法可以由独立客户端,RESTful WS或其他视图调用
在这种情况下会发生什么?如果注释没有意义,它是否应该为每个请求注入新的MyBean
实例,或者它应该在所有请求中保留相同的实例?
答案 0 :(得分:3)
取自@SessionScoped specification
会话范围处于活动状态:
在Web应用程序中任何servlet的service()方法期间, 在任何servlet过滤器的doFilter()方法期间和 容器调用任何HttpSessionListener,AsyncListener或 ServletRequestListener。
所以简而言之,是的。它与HttpSession绑定在一起。也:
会话上下文在发生的所有servlet请求之间共享 在同一个HTTP会话中。当会话上下文被破坏时 在所有HttpSessionListener之后,HTTPSession超时 调用,并在invalidate()的任何请求的最后 在所有过滤器和ServletRequestListener之后调用 调用。