No qualifying bean of type is defined: expected single matching bean but found 2

1900 단어 Spring주해
더 읽 기
최근 Spring 의 주석 에서 Bean 을 가 져 오 려 고 시도 하 는 중 문제 와 같은 오류 가 발생 했 습 니 다.
NoUniqueBeanDefinitionException: No qualifying bean of type is defined: expected single matching bean but found 2:sysRoleManage, sysRoleManageImpl 
 
나 는 두 가지 종류 가 있 는데, 하 나 는 인터페이스 이다.
 
public interface SysRoleManager{
  //............
}

 다른 하 나 는 이 인터페이스의 실현 클래스 입 니 다.
 
 
@Compnent
public class SysRoleManagerImpl implements SysRoleManager{
  //............      
}

 bean 을 가 져 오 려 고 시도 할 때:
 
 
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(ServletContext);

SysRoleManager manager = ctx.getBean(SysRoleManager.class);
System.out.println(manager);

 문제 와 같은 잘못 을 얻다.
 
 
해결 방법 은 실현 류 에 대한 주 해 를 좀 더 상세 하 게 하고 다음 과 같이 바 꿔 야 한다.
 
@Service("sysRoleManager")
public class SysRoleManagerImpl implements SysRoleManager{
  //............      
}

 이렇게 하면 문 제 를 해결 하고 인쇄 할 수 있 습 니 다.
 
com.xx.xxx.SysRoleManagerImpl@179e64
실현 류 를 얻 었 다 는 뜻 이다.
또는 Spring 컨 텍스트 를 통 해 얻 지 않 고 주 해 를 통 해 직접 얻 을 수 있 습 니 다.
@Autowire
@Qualifier("sysRoleManager ")
private SysRoleManager manager;

 
여러 개의 실현 클래스 가 같은 인 터 페 이 스 를 실현 하려 면 각 실현 클래스 에 서로 다른 @ Service ("name") 를 주석 해 야 합 니 다. name 은 서로 다른 값 입 니 다.
 
hibenate 의 이상 을 추가 합 니 다. 예 를 들 어...
org.hibernate.HibernateException: identifier of an instance 
 
of org.cometd.hibernate.User altered from 12 to null。
그것 은:
1) 주석 을 달 때 홈 키 가 아 닌 필드 에 @ NaturalId 등 홈 키 생 성 정책 을 설정 하 였 습 니까?
2) 메 인 키 를 한 트 랜 잭 션 에서 업데이트 하 였 는 지, 메 인 키 는 업데이트 할 수 없습니다.

좋은 웹페이지 즐겨찾기