轉(zhuǎn)自:https://www.cnblogs.com/smileLuckBoy/p/5801678.html
近期在捯飭spring的注解,現(xiàn)將遇到的問題記錄下來果善,以供遇到同樣問題的童鞋解決~
先說明下場景,代碼如下:
有如下接口
public interface EmployeeService {
public EmployeeDto getEmployeeById(Long id);
}
同時有下述兩個實(shí)現(xiàn)類 EmployeeServiceImpl和EmployeeServiceImpl1:
@Service("service")
public class EmployeeServiceImpl implements EmployeeService {
public EmployeeDto getEmployeeById(Long id) {
return new EmployeeDto();
}
}
@Service("service1")
public class EmployeeServiceImpl1 implements EmployeeService {
public EmployeeDto getEmployeeById(Long id) {
return new EmployeeDto();
}
}
調(diào)用代碼如下:
@Controller
@RequestMapping("/emplayee.do")
public class EmployeeInfoControl {
@Autowired
EmployeeService employeeService;
@RequestMapping(params = "method=showEmplayeeInfo")
public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {
#略
}
}
在啟動tomcat時報(bào)如下錯誤:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'employeeInfoControl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: com.test.service.EmployeeService com.test.controller.EmployeeInfoControl.employeeService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [com.test.service.EmployeeService] is defined: expected single matching bean but found 2: [service1, service2]
其實(shí)報(bào)錯信息已經(jīng)說得很明確了,在autoware時细诸,由于有兩個類實(shí)現(xiàn)了EmployeeService接口,所以Spring不知道應(yīng)該綁定哪個實(shí)現(xiàn)類,所以拋出了如上錯誤油昂。
這個時候就要用到@Qualifier注解了,qualifier的意思是合格者咖为,通過這個標(biāo)示秕狰,表明了哪個實(shí)現(xiàn)類才是我們所需要的,我們修改調(diào)用代碼躁染,添加@Qualifier注解鸣哀,需要注意的是@Qualifier的參數(shù)名稱必須為我們之前定義@Service注解的名稱之一!
@Controller
@RequestMapping("/emplayee.do")
public class EmployeeInfoControl {
@Autowired
@Qualifier("service")
EmployeeService employeeService;
@RequestMapping(params = "method=showEmplayeeInfo")
public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {
#略
}
}
問題解決吞彤!