列出由 SpringMVC 创建的请求范围和会话范围的 beans
List the request- and session-scoped beans that are created by SpringMVC
如果网络上已有这些列表,请 link 列出。我无法使用 Google 找到任何此类内容。
请求范围的 beans:
javax.servlet.http.HttpServletRequest
会话范围的 bean:
javax.servlet.http.HttpSession
您可以自动装配 Spring 可以构建的任何内容。你是否应该是另一回事。
例如,将具有 Step 范围(从批处理)的 bean 自动装配到请求范围的 bean 是完全没有意义的。
自动装配发生一次,在对象创建之后,这是在推理自动装配和不同作用域时要牢记的主要事项。
关于您的问题,在将寿命较长的 bean 注入到寿命较短的 bean 中时,实际上没有任何问题。唯一重要的是你意识到它并且它符合你的语义。
其他方法有点棘手。因此,将寿命较短的豆注入寿命较长的豆中。这样做的正确方法是依靠代理。如果您在会话范围的 bean 中注入请求范围的 bean,并且如果请求范围的 bean 被代理,那么代理将只创建一次,但会在每个请求上创建一个请求 bean。
它是对文档中描述的内容的简化,可在 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection
嗯,这实际上取决于您告诉 Spring 创建什么,但您会在默认设置中看到它。
请求:
for(String key : Collections.list(request.getAttributeNames())) {
System.out.println( key );
}
结果:
org.springframework.web.context.request.async.WebAsyncManager.WEB_ASYNC_MANAGER
org.springframework.web.servlet.DispatcherServlet.CONTEXT
org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER
org.springframework.web.servlet.HandlerMapping.bestMatchingPattern
org.springframework.web.servlet.DispatcherServlet.OUTPUT_FLASH_MAP
org.springframework.web.servlet.DispatcherServlet.FLASH_MAP_MANAGER
org.springframework.core.convert.ConversionService
org.springframework.web.servlet.DispatcherServlet.THEME_SOURCE
org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMapping
org.springframework.web.servlet.HandlerMapping.uriTemplateVariables
org.springframework.web.servlet.DispatcherServlet.THEME_RESOLVER
会话:
for(String key : Collections.list(session.getAttributeNames())) {
System.out.println( key );
}
结果:
(empty)
如果网络上已有这些列表,请 link 列出。我无法使用 Google 找到任何此类内容。
请求范围的 beans:
javax.servlet.http.HttpServletRequest
会话范围的 bean:
javax.servlet.http.HttpSession
您可以自动装配 Spring 可以构建的任何内容。你是否应该是另一回事。
例如,将具有 Step 范围(从批处理)的 bean 自动装配到请求范围的 bean 是完全没有意义的。
自动装配发生一次,在对象创建之后,这是在推理自动装配和不同作用域时要牢记的主要事项。
关于您的问题,在将寿命较长的 bean 注入到寿命较短的 bean 中时,实际上没有任何问题。唯一重要的是你意识到它并且它符合你的语义。
其他方法有点棘手。因此,将寿命较短的豆注入寿命较长的豆中。这样做的正确方法是依靠代理。如果您在会话范围的 bean 中注入请求范围的 bean,并且如果请求范围的 bean 被代理,那么代理将只创建一次,但会在每个请求上创建一个请求 bean。
它是对文档中描述的内容的简化,可在 http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection
嗯,这实际上取决于您告诉 Spring 创建什么,但您会在默认设置中看到它。
请求:
for(String key : Collections.list(request.getAttributeNames())) {
System.out.println( key );
}
结果:
org.springframework.web.context.request.async.WebAsyncManager.WEB_ASYNC_MANAGER
org.springframework.web.servlet.DispatcherServlet.CONTEXT
org.springframework.web.servlet.DispatcherServlet.LOCALE_RESOLVER
org.springframework.web.servlet.HandlerMapping.bestMatchingPattern
org.springframework.web.servlet.DispatcherServlet.OUTPUT_FLASH_MAP
org.springframework.web.servlet.DispatcherServlet.FLASH_MAP_MANAGER
org.springframework.core.convert.ConversionService
org.springframework.web.servlet.DispatcherServlet.THEME_SOURCE
org.springframework.web.servlet.HandlerMapping.pathWithinHandlerMapping
org.springframework.web.servlet.HandlerMapping.uriTemplateVariables
org.springframework.web.servlet.DispatcherServlet.THEME_RESOLVER
会话:
for(String key : Collections.list(session.getAttributeNames())) {
System.out.println( key );
}
结果:
(empty)