[Spring][IoC] @Autowired 어노테이션
2022. 8. 29. 23:01ㆍJAVA/Spring
1. @Autowired 어노테이션은 무엇인가?
- 필요한 의존 객체의 "타입"에 해당하는 빈을 IoC 컨테이너에서 탐색하여 주입하는 어노테이션
- 옵션 required : 기본값 true, false로 설정하게 되면 빈을 탐색하지 못할시 주입하지 않고 넘어갑니다.
2. @Autowired 어노테이션 사용 위치
- 생성자
- 세터(setter)
- 필드
// 주입 방법 1
@Autowired
public BookService(BookRepository bookRepository){
this.bookRepository = bookRepository;
}
// 주입 방법 2
@Autowired
public void setBookRepository(BookRepository bookRepository){
this.bookRepository = bookRepository;
}
// 주입 방법 3
@Autowired
BookRepository bookRepository;
3. 의존성 주입 경우의 수
- 해당 타입의 빈이 없는 경우
- 해당 타입의 빈이 한개인 경우
- 해당 타입의 빈이 여러개인 경우
- 빈 이름으로 시도,
- 같은 이름의 빈 찾으면 해당 빈 사용
- 같은 이름 못 찾으면 실패
- 빈 이름으로 시도,
위 경우의 수에서 빨간색은 주입이 실패하는 경우이고 초록색은 주입이 성공하는 경우입니다. 여기서 주목할 점은 동일한 타입의 빈이 여러개인 경우입니다. 이 경우는 동일한 타입의 인터페이스를 구현하는 2개 이상의 클래스도 동일한 타입의 빈으로 간주하기 때문에 스프링부트 입장에서 의존 객체에 주입할때 어떤 클래스를 선택하여 주입해야 할지 결정을 해주어야 합니다.
4. 동일한 타입의 빈이 여러개인 경우 방법
- @Primary
- @Qualifier (빈 이름으로 주입)
- 해당 타입의 빈 모두 주입 받기
@Service
@Getter
public class BookService {
// 주입 경우의 수 1 : @Primary 어노테이션
// 주입 경우의 수 2 : 특정 빈이름으로 주입
@Autowired
@Qualifier("yongHwanBookRepository")
BookRepository bookRepository;
// 주입 경우의 수 3 : 해당 타입의 빈 모두 주입받기
@Autowired
List<BookRepository> bookRepositories;
// 주입 방법 중 하나 : 이름을 맞춰서 주입
@Autowired
BookRepository myBookRepository;
}
@Repository
@Primary // 동일한 타입(BookRepository)의 빈이 여러개인 경우 해당 빈 사용
public class YongHwanBookRepository implements BookRepository{
}
References
source code : https://github.com/yonghwankim-dev/spring_study/tree/master
[인프런] 스프링 프레임워크 핵심 기술
'JAVA > Spring' 카테고리의 다른 글
[Spring][IoC] Environment, 프로파일 및 프로퍼티 (0) | 2022.09.01 |
---|---|
빈(Bean)의 스코프 (0) | 2022.08.31 |
[springboot][Gradle] 자동 설정 만들기 #2 @ConfigurationProperties (0) | 2022.08.17 |
컴포넌트 스캔(ComponentScan)과 빈(Bean) 설정 (0) | 2022.08.15 |
[springboot][Gradle] 자동 설정 만들기 #1 Starter와 Auto-Configure (0) | 2022.08.15 |