일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- zepettoworld.com
- 스프링 부트
- DispatcherServlet
- 1
- Component
- git #gitlab #github
- spring
- Bean
- layout #thymeleaf #화면분할
- 오토와이어드
- 스프링
- autowired
- Today
- Total
기록과 정리
@Autowire 어노테이션 정리 본문
이 글은 인프런 백기선님 강의 스프링 프레임워크 핵심기술에 대한 강의 정리입니다.
IoC 컨테이너에 Bean이 등록이 되고 해당 빈에 대해서 주입받을 때 , @Autowired 어노테이션을 사용한다.
Autowired를 사용하는 위치
@Autowired를 사용할 수 위치는 3가지다.
1. 생성자
2. Setter
3. Field
1. 생성자
생성자에 Autowired를 하여 사용할 수 있다. 위에서 보이는 BookReposiory에 @Repository로 컴포넌트 생성을 한 후, 빈 주입을 해줄 수 있다.
2. Setter
Setter를 이용한 방법, 위처럼 @Autowired만 붙이고 Bean생성을 안하더라도 인스턴스는 만들 수 있겠지만, Setter로 인 해 Autowired가 빈을 찾으려하는 과정에서 에러가 발생할 수 있다.
만약에 BookRepository에서 Return 받는 객체가 Optional 하면 @Autowired(required = false)로 해주면 경우에 따라 빈주입이 가능하다.
가장 일반적인 3. Field의 방법이다. 여기 역시 Optional 하게 null값이 나올 수 있는 경우에 대비하여 required 옵션을 줄 수 있다.
해당 Bean이 여러개인 경우
경우의 수는 3가지가 나온다.
1. 해당 타입의 빈이 없는 경우
2. 해당 타입의 빈이 한 개인 경우
3. 해당 타입의 빈이 여러개인 경우
1번은 빈을 찾지 못하는 에러가 나올 것이고 2번의 경우 에러 없이 정상 구동이 될 것이다. 우리는 3번에 대해 정리해보자.
3번은 같은 타입의 빈이 여러개일 경우, 이름이 같은지를 비교를 한다.
예를 들어 BookService에서 MyBookRepository와 YourBookRepository의 이름가진 두개의 컴포넌트가 있을 때,
@Autowired 사용시 이름으로 구별 가능하기도 하나...좋은 방법은 아니다.
단순히 이름만 바꾸기 보다 아래 방법을 추천한다.
같은 타입의 빈이 여러개일때
1. @Primary
@Primary 어노테이션은 이 repository를 우선적으로 사용하겠다는 방법이다. 가장 추천한다.
2. 해당 타입의 빈 모두 주입 받기
말 그대로 Service단에 모두 주입을 받는 방식이다.
3. @Qualifier(빈이름으로 주입 받기)
Autowire하고 싶은 Bean의 이름 , 단 small case로 넣어야한다. 직접 기입을 해야하는 방식에서 추천하지 않는다.
간단하게 @Autowire에 대해 알아보았습니다. Bean생성을 못해서 헤매는 오류에 대해 시간 절약은 조금은 할 수 있을 것 같습니다. 감사합니다.
'IT > Spring' 카테고리의 다른 글
DispatcherServlet이란? (0) | 2021.01.24 |
---|---|
Bean의 스코프 (0) | 2021.01.24 |
@Component와 컴포넌트 스캔이란? (0) | 2021.01.22 |
Spring IoC 컨테이너 & Bean (0) | 2021.01.21 |
스프링(Spring)에서 자주쓰는 어노테이션 정리 (0) | 2020.03.03 |