Spring 에서는 다수의 빈(Bean) 객체중 의존 객체의 대상이 되는 객체를 선택 해주어야 한다.
대상을 명시 해주지 않을시 익셉션 오류가 발생하게 된다
WordDao 에 대한 의존 객체(Bean)을 여러개 생성했다고 가정하게 된 후
서비스 클래스에서 @Autowired를 사용하여 의존객체 자동 주입을 사용하게 되면
생성한 빈 객체에 대해 매칭이 제대로 되지 않았다는 wordDao1, wordDao2, wordDao3에 대한 익셉션이 발생하게 된다.
이경우 동일한 객체가 2개 이상인 경우 스프링 컨테이너는 자동 주입 대상 객체를 판단하지 못하여 익셉션이 발생된다.
이러한 오류를 해결 하기 위해서는
applicationContext.xml 파일 내에서 qualifier 속성을 지정 해주어야 한다.
qualifier 속성을 생성 한후 value 값에 구분 할 수 있는 속성값을 지정해준다.
그 후 서비스 클래스내에서
@Qualifier("지정한 value 명칭") 어노테이션을 사용하여 동일한 객체에 대한 명칭을 지정 해주면 스프링 컨테이너는 해당 명칭에 맞는 Bean을 자동 주입을 진행하게된다.
의존 대상 겍체를 xml 파일내 생성 하지 않고 @Autowired 어노테이션을 사용 하게 될경우 익셉션 에러를 발생 하게 한다.
실무 내에서는 사용하지 않는 방법이지만 의존 대상 객체를 지정 하지 않고 익셉션을 피하는 방법은 아래와 같다.
@Autowired의 속성값중 required를 false로 지정 해줄경우 의존 대상 객체를 생성하지 않아도 익셉션 에러를 피할수있다.
- @Inject 어노테이션 -
@Autowired와 비슷하게 의존 객체를 자동으로 주입 할수 있으나 @Autowired와 @Inject의 차이점은
@Autowired는 의존 대상 객체를 지정 하지 않을경우 required 속성을 사용하여 익셉션을 피할수 있지만 @Inject 어노테이션의 경우 required 속성을 지원하지 않는다.
사용방법
프로퍼티 또는 생성자에 대하여 @Inject 어노테이션을 선언한다.
동일한 2개 이상에 대해 익셉션이 발생하지 않게 @Inject 어노테이션 설정 방법은 xml 파일내 bean 생성시 사용한 id를 @Named("빈id")어노테이션을 사용 하여 익셉션 방지 처리를 진행 해줄시 스프링 컨테이너 내에서 익셉션 오류를 발생하지 않는다.
'Spring' 카테고리의 다른 글
스프링 - 웹 프로그래밍 구축 하기 위한 설계 모델 (0) | 2021.11.11 |
---|---|
어노테이션을 이용한 의존성 주입 세팅방법 (0) | 2021.11.07 |
의존 객체 자동 주입 (0) | 2021.11.01 |
Spring 의존성 주입 실습 (0) | 2021.10.26 |
Intellij Spring 환경 세팅 (0) | 2021.10.18 |