스프링(Spring)에서 Error creating bean with name 에러 발생시

    스프링에서 발생하는 에러중 단연 으뜸 중 하나가, Error creating bean with name 일 것이다.  이 에러는 문장 그대로, Bean 생성시 에러가 나는 것이다. Bean 생성 시 에러는 너무나도 많은 원인을 가지고 있지만, 여기서는 "org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type" 이 문제에 대해서만 적어보도록 한다.



      에러문구


    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ramiController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private co.kr.test.wednesday.api.WednesDayAPI co.kr.test.rami.controller.RamiController.wednesDay; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [co.kr.test.wednesday.api.WednesDayAPI] 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)}

    org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:287)

    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)

    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)

    org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)

    org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)

    org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)

    org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)

    org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)

    org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)

    org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)

    org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)

    org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631)

    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588)

    org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645)

    org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508)

    org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449)

    org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133)

    javax.servlet.GenericServlet.init(GenericServlet.java:160)

    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)

    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

    org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)

    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)

    org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)

    org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)

    org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)

    java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

    java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

    java.lang.Thread.run(Thread.java:745)


    위 에러는, 빈(Bean)을 만들려고 하는데 매칭된 Bean이 없다는 의미이다. 대부분에 이런 경우는 패키지명을 scan 설정과 다르게 하여 생기는 문제가 많으며 이럴 경우 두가지 방법으로 처리 할 수 있다.



      처리방법


    1. 패키지명을 다른 양식과 비슷하게 생성한다
    2. servlet-context.xml 파일을에 scan 문구를 생성한다



      servlet-context.xml에 처리방법



    기존의 패키지가 test만 있을 때, test2의 패키지를 새로 하고 싶을 경우 아래와 같이 컴포넌트를 추가한다


    <context:component-scan base-package="co.kr.test" />

    <context:component-scan base-package="co.kr.test2" />


    반응형

    댓글

    Designed by JB FACTORY