首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >已映射了bean方法

已映射了bean方法
EN

Stack Overflow用户
提问于 2014-05-13 23:17:56
回答 1查看 18.3K关注 0票数 4

我得到了以下异常:

代码语言:javascript
复制
</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&lt;java.lang.String&gt; 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&lt;java.lang.String&gt; 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&lt;java.lang.String&gt; 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&lt;java.lang.String&gt; com.sas.hls.clc.clinicalstandards.sdtm.SDTM_Controller.getVersions() mapped.

我的控制器类只有一个名为getVersions()的方法。当我在控制器上使用AutoWired时,我的应用程序工作得很好,并且没有显式地将任何bean连接在一起。但是后来我切换到定义一些bean,这样我就可以连接到项目中其他人编写的bean中。我开始得到重复的bean异常,所以我注释掉了@Autowired注解。为什么我会得到这个。我的部署环境中是否仍有自动装配的残留物?

代码语言:javascript
复制
@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包括以下内容:

代码语言:javascript
复制
<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的文件,其中包含以下内容:

代码语言:javascript
复制
    <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文件。

代码语言:javascript
复制
   <bean id="sdtmService" class="com.sas.hls.clc.clinicalstandards.sdtm.SDTM_ServiceImpl" >
        <property name="clinicalStandardsInterface" ref="clinicalStandardsInterface" />
   </bean>
EN

回答 1

Stack Overflow用户

发布于 2014-05-14 03:52:26

您的<mvc:annotation-driven/>标记告诉spring遍历您的类,查找注释并创建带注释的类的实例。您的<bean id="sdtm-controller .../>还会创建控制器的一个实例。所以第二个创建的是一个错误,因为已经创建了一个。正如M.Deum所指出的,您只需要其中一个,并且由于您使用的是注释,因此只需删除bean配置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23635244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档