@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 |