본문 바로가기

개발/Spring

IoC - Autowire(오토와이어)

반응형

@Autowired 
 - 의존성 주입을 위한 어노테이션 
 - required : 기본값은 true 이다. 못 찾으면 애플리케이션이 안뜬다.
 - 사용하는 위치 : 생성자(스프링4.3부터는 생략 가능), Setter, Field

1. 생성자 

 ** 기본 : 어노테이션으로 각각 bean 설정

 생성자에 Autowired 어노테이션으로 의존성 주입을 한다.
 *** 여기에 BookRepository에 빈 설정이 되어 있지 않다면 안된다.

2. Setter 

3. 필드

 

Autowire 의 사용 될 경우의 수!

 1. 해당 타입의 빈이 없을 때 
  사용하던 BookRepository의 빈 설정을 해제 한후 해당 클래스를 의존성 주입을 해본다.

 ** 어노테이션 제거 

 ** 실행 
 해당 타입의 Bean 을 찾을 수 없다는 에러가 나온다. 

 

 2. 해당 타입의 빈이 여러개인 경우 

인터페이스 BookRepository 를 상쇽하는 BookRepository2, BookRepository3 을 만들어 bean으로 등록 한하여 의존성 주입하여 테스트 한다.  

의존성 주입!

실행 결과 
  스프링이 어느 것의 의존성을 주입해야하는지 몰라 에러나간다. 

@Primary 를 이용하여 어느것을 사용할지 선언하거나, 다 받거나, Qualitier을 이용해 어느 것을 이용할지 선언한다. 

일단! 어느 것이 선언되었는지 확인 하기 위해 ServiceRunner을 만든다. 

  BookService.printBookRepository() 에서 어느 것이 선언되었는지 보는 함수 만든다. 

 

 1) @Primary 어노테이션 선언  >>> 추천 방법 !

실행 결과 

BookRepository2 가 의존성 주입되었다. 

2) @Qualifer을 이용 

보통 해당 클래스의 소문자로 시작하는 클래스 명으로 Bean 이 생성된다.

실행 결과 

3) 해당하는 모든 빈을 받기 

실행결과 

 

>> BeanPostProcessor 에 의해서 생성됨

4. 빈 이름과 같은 명칭으로 변수명 선언

실행 결과 

반응형

'개발 > Spring' 카테고리의 다른 글

IoC - 빈의 스코프  (0) 2021.04.06
IoC - Component, 컴포넌트 스캔  (0) 2021.04.06
IoC - ComponentScan  (0) 2021.04.04
IoC - application.xml 로 빈 설정  (0) 2021.04.04
spring-boot-starter-web  (0) 2021.04.04