2

我的基于 Spring 的 Web 项目有以下代码:

控制器:

@Controller
@RequestMapping("mycontroller")
public class MyObjectController {

    @Autowired
    private MyService service;
// Code omitted
}

服务:

@Service
public class MyServiceImpl implements MyService {

    @Autowired
    @Qualifier("mydao")
    private MyDao mydao;

    @Autowired
    @Qualifier("mydao2")
    private MyDao2 mydao2;

// Code omitted
}

Context.xml(春天):

<annotation-driven />
<context:annotation-config /> 

<context:component-scan base-package="com.mycompany" />

<beans:bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" />
<beans:bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" />    

<beans:bean id="myService" class="com.mycompany.serviceimpl.MyServiceImpl" /> 

但是它会引发此错误:

NoSuchBeanDefinitionException:没有定义类型 [com.mycompany.service.MyService] 的唯一 bean:预期单个匹配 bean 但找到 2:[myService,myServiceImpl]

4

2 回答 2

4

您的 bean在这里定义了两次(@Service注释,导致注册myServiceImplbean):

@Service
public class MyServiceImpl implements MyService {

在这里(在,带有id的Context.xmlbean ):myService

<beans:bean id="myService" class="com.mycompany.serviceimpl.MyServiceImpl" /> 

从 XML 中删除定义或删除注释。

于 2012-05-19T17:11:05.043 回答
1

要么穿上@Service要么MyServiceImpl在.中声明 bean 。不要两者都做,否则你会得到两个豆子。 Context.xml

从 XML 文件中删除myServicebean 定义,您应该一切顺利。

此外,您不需要声明DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapterbean - 默认情况下这些是可用的。

于 2012-05-19T17:10:30.740 回答