Study/Spring

[스프링] org.springframework.beans.factory.BeanCreationException

minulbora 2024. 3. 4. 15:30

bean이 생성되지 않는 문제

이 오류에 대한 원인은 다양한데, 검색해 보니 가장 흔한 것이 annotation 오류.

적절한 어노테이션을 추가하고 clean 하면 구동된다.

그 다음으로 해본 게 외부jar 파일을 인식하지 못하는 경우

나의 경우도 smtp를 사용하느라고 외부 jar 파일을 maven 에 넣어 뒀는데, tomcat 에서 인식하지 못하는 듯 해서 WEB_INF 아래 lib 폴더에도 jar 파일을 넣었다. 

그래도.. 해결이 안됨.  

[2024-03-04 15:08:16.194] [main] WARN org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method com.sist.web.controller.UserController#findPwd1(HttpServletRequest, HttpServletResponse) to { [/user/findPwd]}: There is already 'userController' bean method com.sist.web.controller.UserController#findPwdPage(HttpServletRequest, HttpServletResponse) mapped. [2024-03-04 15:08:16.195] [main] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method com.sist.web.controller.UserController#findPwd1(HttpServletRequest, HttpServletResponse) to { [/user/findPwd]}: There is already 'userController' bean method com.sist.web.controller.UserController#findPwdPage(HttpServletRequest, HttpServletResponse) mapped. at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1788) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:609) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:531) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:944) ~[spring-beans-5.3.3.jar:5.3.3] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:923) ~[spring-context-5.3.3.jar:5.3.3] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:588) ~[spring-context-5.3.3.jar:5.3.3] at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:702) ~[spring-webmvc-5.3.3.jar:5.3.3] at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:668) ~[spring-webmvc-5.3.3.jar:5.3.3] at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:716) ~[spring-webmvc-5.3.3.jar:5.3.3] at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:591) ~[spring-webmvc-5.3.3.jar:5.3.3] at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:530) [spring-webmvc-5.3.3.jar:5.3.3] at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:170) [spring-webmvc-5.3.3.jar:5.3.3] at javax.servlet.GenericServlet.init(GenericServlet.java:143) [servlet-api.jar:4.0.FR] at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1106) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1063) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:960) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4641) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4948) [catalina.jar:9.0.84] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:9.0.84] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) [catalina.jar:9.0.84] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) [catalina.jar:9.0.84] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_332] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.84] at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) [?:1.8.0_332] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794) [catalina.jar:9.0.84] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:9.0.84] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332) [catalina.jar:9.0.84] at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322) [catalina.jar:9.0.84] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_332] at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75) [tomcat-util.jar:9.0.84] at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134) [?:1.8.0_332] at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248) [catalina.jar:9.0.84] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433) [catalina.jar:9.0.84] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:9.0.84] at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:921) [catalina.jar:9.0.84] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171) [catalina.jar:9.0.84] at org.apache.catalina.startup.Catalina.start(Catalina.java:772) [catalina.jar:9.0.84] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_332] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_332] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_332] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_332] at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347) [bootstrap.jar:9.0.84] at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478) [bootstrap.jar:9.0.84]

여기서 가장 위 파일을 띁어보자.

[2024-03-04 15:08:16.194] [main] WARN  org.springframework.web.context.support.XmlWebApplicationContext - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method 
cohttp://m.sist.web.controller.UserController#findPwd1(HttpServletRequest, HttpServletResponse)
to { [/user/findPwd]}: There is already 'userController' bean method
cohttp://m.sist.web.controller.UserController#findPwdPage(HttpServletRequest, HttpServletResponse) mapped.
[2024-03-04 15:08:16.195] [main] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method 
cohttp://m.sist.web.controller.UserController#findPwd1(HttpServletRequest, HttpServletResponse)
to { [/user/findPwd]}: There is already 'userController' bean method

 

음... Controller 안에 /user/findPwd 가 중복된다고 한다. 컨트롤러 안에는 /user/findPwd 와 /user/findPwd2 가있는데 이 둘을 중복 매핑으로 간주하는 오류가 있는 것 같다. 

고쳐봐도 오류발생...

 [2024-03-04 15:24:05.515] [main] ERROR org.springframework.web.servlet.DispatcherServlet - Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping': Invocation of init method failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping. Cannot map 'userController' method com.sist.web.controller.UserController#findPwd1(HttpServletRequest, HttpServletResponse) to { [/user/findPwd]}: There is already 'userController' bean method com.sist.web.controller.UserController#findPwdPage(HttpServletRequest, HttpServletResponse) mapped.

아까랑은 또 다른 에러인 것 같은데...

findPwd 를 중복 매핑한다고 함.. 

오류 발견!

내 잘못이 맞았다. 

지금은 수정했지만, 이 두 메서드가 같은 value를 가지고 있었음 !

다시는 이런 실수 하지 말아야지... 목이 탄다.