zoukankan      html  css  js  c++  java
  • Spring的注解@Qualifier小结

      近期在捯饬spring的注解,现将遇到的问题记录下来,以供遇到同样问题的童鞋解决~

      先说明下场景,代码如下:

    有如下接口:

    public interface EmployeeService {
        public EmployeeDto getEmployeeById(Long id);
    }

    同时有下述两个实现类 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();
        }
    }

    调用代码如下:

    @Controller
    @RequestMapping("/emplayee.do")
    public class EmployeeInfoControl {
        
        @Autowired
        EmployeeService employeeService;
         
        @RequestMapping(params = "method=showEmplayeeInfo")
        public void showEmplayeeInfo(HttpServletRequest request, HttpServletResponse response, EmployeeDto dto) {
            #略
        }
    }

      在启动tomcat时报如下错误:

    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]

      其实报错信息已经说得很明确了,在autoware时,由于有两个类实现了EmployeeService接口,所以Spring不知道应该绑定哪个实现类,所以抛出了如上错误。

    这个时候就要用到@Qualifier注解了,qualifier的意思是合格者,通过这个标示,表明了哪个实现类才是我们所需要的,我们修改调用代码,添加@Qualifier注解,需要注意的是@Qualifier的参数名称必须为我们之前定义@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) {
            #略
        }
    }

     问题解决!

  • 相关阅读:
    python中的编码问题
    CVPR2018 Tutorial 之 Visual Recognition and Beyond
    hdu 1376 Octal Fractions
    hdu 1329 Hanoi Tower Troubles Again!
    hdu 1309 Loansome Car Buyer
    hdu 1333 Smith Numbers
    hdu 1288 Hat's Tea
    hdu 1284 钱币兑换问题
    hdu 1275 两车追及或相遇问题
    hdu 1270 小希的数表
  • 原文地址:https://www.cnblogs.com/smileLuckBoy/p/5801678.html
Copyright © 2011-2022 走看看