Spring SimpleThreadScope已注册,但在调用AbstractBeanFactory.doGetBean()时未找到

Spring SimpleThreadScope已注册,但在调用AbstractBeanFactory.doGetBean()时未找到,spring,spring-3,Spring,Spring 3,更新:通过进一步调试,我现在可以看到当调用AbstractBeanFactory.doGetBean()时,线程存在于parentBeanFactory.scopes中,但不存在于这个bean工厂的作用域中(可能是WebApplicationContext) 我有一个相当简单的SpringMVCwebapp,它的配置非常类似于SpringPetClinic应用程序。我正在尝试使用SimpleThreadScope(是的,我知道这些警告,我不想使用请求范围),但它没有按预期工作 首先,我尝试使用我

更新:通过进一步调试,我现在可以看到当调用
AbstractBeanFactory.doGetBean()
时,
线程
存在于
parentBeanFactory.scopes中,但不存在于这个bean工厂的作用域中(可能是
WebApplicationContext

我有一个相当简单的SpringMVCwebapp,它的配置非常类似于SpringPetClinic应用程序。我正在尝试使用
SimpleThreadScope
(是的,我知道这些警告,我不想使用请求范围),但它没有按预期工作

首先,我尝试使用我的控制器将使用的线程范围的bean。但是我发现不同的线程总是共享同一个bean实例。因此,我尝试使用注释
@Scope(value=“thread”)
将我的控制器声明为线程范围

使用Eclipse/STS调试器,我可以看到我的
CustomScopeConfigurer
工作正常,并在
键下注册
SimpleThreadScope
。但随后在为web请求提供服务时,会引发一个异常,说明没有为作用域“线程”注册作用域:


经过一点调试后,我发现当调用
AbstractBeanFactory.doGetBean()
时,“线程”
存在于
parentBeanFactory.scopes中,但不存在于这个bean工厂的作用域中(可能是
WebApplicationContext

因此,解决方案似乎是为WebApplicationContext及其父上下文配置
CustomScopeConfigurer
。e、 g.在
DispatcherServlet
应用程序上下文配置和
ContextLoaderListener
指定的上下文中。这样做将确保为两个bean工厂注册范围

SEVERE: Servlet.service() for servlet audit threw exception
java.lang.IllegalStateException: No Scope registered for scope 'thread'
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:198)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:271)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1021)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:964)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:862)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:494)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:298)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1186)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:341)
at org.springframework.context.support.SimpleThreadScope.get(SimpleThreadScope.java:67)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:336)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:975)
at org.springframework.web.method.HandlerMethod.createWithResolvedBean(HandlerMethod.java:219)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:257)
at org.springframework.web.servlet.handler.AbstractHandlerMethodMapping.getHandlerInternal(AbstractHandlerMethodMapping.java:57)
at org.springframework.web.servlet.handler.AbstractHandlerMapping.getHandler(AbstractHandlerMapping.java:299)
at org.springframework.web.servlet.DispatcherServlet.getHandler(DispatcherServlet.java:1098)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:910)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:724)