我收到以下异常:
</pre></p><p><b>root cause</b> <pre>org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0':
Invocation of init method failed; nested exception is java.lang.IllegalStateException:
Ambiguous mapping found. Cannot map 'sdtm-controller' bean method
public java.util.List<java.lang.String> com.sas.hls.clc.clinicalstandards.sdtm.SDTM_Controller.getVersions()
to {[/getVersions],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}:
There is already 'SDTM_Controller' bean method
public java.util.List<java.lang.String> com.sas.hls.clc.clinicalstandards.sdtm.SDTM_Controller.getVersions() mapped.
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1486)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:524)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:461)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607)
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:647)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:598)
org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:661)
org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:517)
org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:458)
org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:138)
javax.servlet.GenericServlet.init(GenericServlet.java:212)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Thread.java:662)
</pre></p><p><b>root cause</b> <pre>java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'sdtm-controller' bean method
public java.util.List<java.lang.String> com.sas.hls.clc.clinicalstandards.sdtm.SDTM_Controller.getVersions()
to {[/getVersions],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'SDTM_Controller' bean method
public java.util.List<java.lang.String> com.sas.hls.clc.clinicalstandards.sdtm.SDTM_Controller.getVersions() mapped.
我的控制器类只有一个名为 getVersions() 的方法。当我在控制器上使用 AutoWired 时,我的应用程序工作正常,并且没有显式地将任何 bean 连接在一起。但后来我转而定义一些 bean,以便我可以连接到项目中其他人编写的 bean。我开始收到重复的 beans 异常,因此我注释掉了 @Autowired 注释。为什么我会得到这个。我的部署环境中是否仍然存在自动装配的残余?
@Controller
public class SDTM_Controller {
private SDTM_Service service;
// @Autowired
public SDTM_Controller(SDTM_Service service){
this.service = service;
}
public SDTM_Controller(){
}
public void setSDTM_Service(SDTM_Service service){
this.service = service;
}
// URL: sdtm/getVersions
@RequestMapping(value="/getVersions", method=RequestMethod.GET)
public @ResponseBody List<String> getVersions(){
return service.getVersions();
}
我的 web.xml 包含以下内容:
<servlet>
<servlet-name>sdtm</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/sdtm-servlet.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>sdtm</servlet-name>
<url-pattern>/sdtm/*</url-pattern>
</servlet-mapping>
我有一个名为 sdtm-servlet.xml 的文件,其中包含以下内容:
<context:component-scan base-package="com.sas.hls.clc.clinicalstandards.sdtm" />
<mvc:annotation-driven/>
<bean id="sdtm-controller" class="com.sas.hls.clc.clinicalstandards.sdtm.SDTM_Controller" >
<property name="SDTM_Service" ref="SDTM_Service" />
</bean>
最后,我有一个定义服务的 services-config.xml 文件。
<bean id="sdtmService" class="com.sas.hls.clc.clinicalstandards.sdtm.SDTM_ServiceImpl" >
<property name="clinicalStandardsInterface" ref="clinicalStandardsInterface" />
</bean>