2015-02-11 118 views

回答

1

那么这真的取决于你告诉什么春天创造,但你会看到这个默认设置。

请求:

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) 
0

可以自动装配任何Spring能够建立。你是否应该是另一回事。

例如,自动装载Step范围的bean(从批处理)到请求范围的bean是毫无意义的。

+0

这个答案是在重大修改之前发布。请不要为了内容而下调它。 – Andy 2015-02-11 15:19:55

1

对象创建后自动装配会发生一次,在推理自动装配和不同范围时,这是一个需要注意的主要问题。

关于你的问题,事实上,在短寿命的豆子里注入更长的活豆是没有问题的。它唯一重要的是你意识到它,它适合你的语义。

其他解决方法有点棘手。因此,注射较短的活的豆,在较长的活的豆内。这样做的正确方法是靠代理。如果要在会话范围的bean中注入一个请求范围的bean,并且请求范围的bean被代理了,那么代理将只创建一次,但会为每个请求创建一个请求bean。

它是什么在文档中描述的简化和提供http://docs.spring.io/spring/docs/current/spring-framework-reference/html/beans.html#beans-factory-scopes-other-injection

+0

考虑到答案中的信息,将列表更改为Spring MVC“给定”的请求范围和会话范围的bean可能更合适? – Andy 2015-02-11 15:05:57

+0

这个答案在主要编辑之前发布。请不要为了内容而下调它。 – Andy 2015-02-11 15:20:23

+0

好了,在编辑之前,您的问题的答案是可以将bean注入其他bean,而不管范围如何。 Spring MVC“给予”bean的概念并不是人们会理解的。 HttpServletRequest和HttpSession不是spring bean,所以你不能自动装载它们 – 2015-02-11 15:21:16