Spring 의 주해 @ Qualifier 소결

다음으로 이동:https://www.cnblogs.com/smileLuckBoy/p/5801678.html
최근 스프링 의 주 해 를 정리 하고 있 습 니 다. 현재 발생 한 문 제 를 기록 하여 같은 문제 에 부 딪 힌 어린이 신발 로 해결 할 수 있 도록 하 겠 습 니 다 ~
먼저 장면 을 설명 하고 코드 는 다음 과 같다.
다음 과 같은 인터페이스 가 있 습 니 다.
public interface EmployeeService {
    public EmployeeDto getEmployeeById(Long id);
}

다음 과 같은 두 가지 실현 유형 이 있 습 니 다. Employee ServiceImpl 과 Employee ServiceImpl 1:
@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 에서 두 가지 유형 이 EmployeService 인 터 페 이 스 를 실현 하기 때문에 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) {
        # 
    }
}

문제 해결!

좋은 웹페이지 즐겨찾기