2012-08-29 3 views
3

안녕하세요, Spring을 3.0.7에서 3.1.2로 업그레이드하려고합니다. 3.0.7에서는 모든 것이 잘 작동하지만, pom에서 값을 늘리면 서버를 시작할 때 오류가 발생합니다. 나는 봄에 새로운 사람이다. 내가 봄에 새로운 오전하지만, 그것이 문제 네이티브 봄 클래스에 autowiring에를 보내고 것처럼 나타납니다 말했듯이3.0.7에서 3.1.2로 Spring을 업그레이드하면 NoSuchBeanDefinitionException이 발생합니다.

내가 오류가

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'my.name.space.security.handler.AnnotationMethodHandlerAdapterConfigurer#0': Injection of autowired dependencies failed; 
nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter my.name.space.security.handler.AnnotationMethodHandlerAdapterConfigurer.adapter; 
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 

입니다. 나는 3.0.7을 달리고 있었는데,이 모든 것이 잘 돌아갔다. 여기에 내 스택 트레이스가있다.

package com.ns.web.security.handler; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter; 

/** 
* This class is a bean post-processor for AnnotationMethodHandlerAdapter. This required to set the property values 
* in the instance of AnnotationMethodHandlerAdapter created by the spring framework when using the tag 
* <annotation-driven/> 
*/ 
public class AnnotationMethodHandlerAdapterConfigurer { 
    @Autowired 
    private AnnotationMethodHandlerAdapter adapter; 
    private int cacheSeconds = -1; 

    public void init() { 
     if(cacheSeconds > -1) { 
      adapter.setCacheSeconds(cacheSeconds); 
     } 
    } 

    public int getCacheSeconds() { 
     return cacheSeconds; 
    } 

    public void setCacheSeconds(int cacheSeconds) { 
     this.cacheSeconds = cacheSeconds; 
    } 
} 

이 봄의 행동이

<!-- Handles Spring requests --> 
<servlet> 
    <servlet-name>clovrpatch</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring/nsWebMVCConfig.xml</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

를 요청하고 여기에 nsWebMVCConfig입니다 지시 XML 선언은 다음과 같습니다

2012-08-29 11:50:24,364 [localhost-startStop-1] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.ns.web.security.handler.AnnotationMethodHandlerAdapterConfigurer#0': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter com.clovrmedia.web.security.handler.AnnotationMethodHandlerAdapterConfigurer.adapter; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:609) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:469) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1266) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1185) 
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1080) 
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5027) 
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5314) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901) 
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:618) 
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:650) 
    at org.apache.catalina.startup.HostConfig$DeployDescriptor.run(HostConfig.java:1582) 
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter com.clovrmedia.web.security.handler.AnnotationMethodHandlerAdapterConfigurer.adapter; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:506) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:284) 
    ... 34 more 
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)} 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:952) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:821) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:735) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:478) 
    ... 36 more 

여기 내가이 예외를 발생 믿습니다 클래스입니다. 위의 xml 클래스에서 참조되는 xml 파일 여기에는 예외를 발생시키는 클래스에 대한 빈 선언이 포함됩니다.
<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xmlns:p="http://www.springframework.org/schema/p" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:util="http://www.springframework.org/schema/util" 
     xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
      http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd 
      http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

     <import resource="classpath:META-INF/spring/nsPropertyConfig.xml"/> 

     <!-- The controllers are autodetected POJOs labeled with the @Controller annotation. --> 
     <context:component-scan base-package="com.ns.web" use-default-filters="false"> 
      <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/> 
     </context:component-scan> 

     <!-- Turns on support for mapping requests to Spring MVC @Controller methods 
      Also registers default Formatters and Validators for use across all @Controllers --> 
     <mvc:annotation-driven /> 

    <!-- This is a bean post-processor for AnnotationMethodHandlerAdapter--> 
    <bean class="com.ns.web.security.handler.AnnotationMethodHandlerAdapterConfigurer" init-method="init"> 
     <property name="cacheSeconds" value="0" /> 
    </bean> 

     <!-- register "global" interceptor beans to apply to all registered HandlerMappings --> 
     <mvc:interceptors> 
      <bean class="org.springframework.web.servlet.theme.ThemeChangeInterceptor"/> 
      <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor" p:paramName="lang"/> 

     <bean class="org.springframework.mobile.device.DeviceResolverHandlerInterceptor" /> 

    </mvc:interceptors> 

     <mvc:view-controller path="/scrubbedout"/> 
     <mvc:view-controller path="/scrubbedout"/> 
     <mvc:view-controller path="/scrubbedout"/> 
     <mvc:view-controller path="/scrubbedout" /> 
    <mvc:view-controller path="/scrubbedout" /> 
    <mvc:view-controller path="/scrubbedout" /> 

     <!-- store preferred language configuration in a cookie --> 
     <bean class="org.springframework.web.servlet.i18n.CookieLocaleResolver" id="localeResolver" p:cookieName="locale"/>  

     <!-- resolves localized <theme_name>.properties files in the classpath to allow for theme support --> 
     <bean class="org.springframework.ui.context.support.ResourceBundleThemeSource" id="themeSource"/> 

     <!-- store preferred theme configuration in a cookie --> 
     <bean class="org.springframework.web.servlet.theme.CookieThemeResolver" id="themeResolver" p:cookieName="theme" p:defaultThemeName="standard"/> 

     <!-- allows for integration of file upload functionality --> 
     <bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver"/> 

    <!-- Enable @Annotation-drive bean configuration --> 
    <context:annotation-config /> 

    <!-- Configures Spring Social --> 
    <bean class="com.ns.web.social.SocialConfig" /> 

    <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
      <property name="mediaTypes"> 
        <map> 
         <entry key="html" value="text/html" /> 
         <entry key="json" value="application/json" /> 
        </map> 
      </property> 
      <property name="viewResolvers"> 
        <list> 
         <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
           <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" /> 
         </bean> 
        </list> 
      </property> 
      <property name="defaultViews"> 
        <list> 
         <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
           <property name="prefixJson" value="true" /> 
         </bean> 
        </list> 
      </property> 
     <property name="defaultContentType" value="text/html"/> 
     </bean> 

    <bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer" id="tilesConfigurer"> 
     <property name="definitions"> 
      <list> 
       <value>/WEB-INF/layouts/nsMainLayouts.xml</value> 
      </list> 
     </property> 
     <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.tiles2.SpringBeanPreparerFactory"/> 
    </bean> 

    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"/> 

    <!-- Default route --> 
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="/">welcomeController</prop> 
      </props> 
     </property> 
     <property name="rootHandler" ref="welcomeController" /> 
    </bean> 
    <!-- these are static resources. By specifing them here, they will not go through the DispatcherServlet --> 

    <mvc:resources mapping="/css/**"    location="/css/"/> 
    <mvc:resources mapping="/images/**"   location="/images/"/> 
    <mvc:resources mapping="/js/**"    location="/js/"/> 
</beans> 

난 그냥 스택 추적 및 파일의 몇 가지를 넣고 그냥 말을 꽤 절름발이 느낌 '나를 위해 그것을 알아.' 그러나 나는 완전히 나의 깊이를 넘어서서 지난 3 일 동안 인터넷 검색을 해왔다. 어떤 도움을 주시면 감사하겠습니다.

답변

6

스프링 보안에 익숙하지 않지만 AnnotationMethodHandlerAdapter은 스프링 3.1부터 RequestMappingHandlerAdapter으로 바뀌 었습니다. 아마도 그 이유 중 하나 일 것입니다. link을 살펴볼 수 있습니다. 희망이 당신을 위해 도움이됩니다.

+1

당신은 절대적으로 옳습니다. Spring 3.0.x는''주석을 사용하여 AnnotationMethodHandlerAdapter를 생성하는데 사용되며, Spring 3.1에서는 기본 HandlerAdapter로서'RequestMappingHandlerAdapter'를 생성합니다. 픽스는'AnnotationMethodHandlerAdapter' 대신'RequestMappingHandlerAdapter'에 삽입 될 것입니다. –

+1

간단히 변경을 할 수 있습니까? 아니면이 설정이 작동하기 전에 다른 설정이 필요합니까? 나는 이것이 다른 재미있는 행동을 일으키는 오류를 제거하는 동안 그것을 처리하고 있기 때문에 내가 묻고있다. – aamiri

관련 문제