기록과 정리

@Autowire 어노테이션 정리 본문

IT/Spring

@Autowire 어노테이션 정리

zepetto 2021. 1. 22. 11:08

이 글은 인프런 백기선님 강의 스프링 프레임워크 핵심기술에 대한 강의 정리입니다.

 

IoC 컨테이너에 Bean이 등록이 되고 해당 빈에 대해서 주입받을 때 , @Autowired 어노테이션을 사용한다.

@Autowired

Autowired를 사용하는 위치

@Autowired를 사용할 수 위치는 3가지다.

1. 생성자

2. Setter

3. Field

 

1. 생성자 

BookService.class

생성자에 Autowired를 하여 사용할 수 있다. 위에서 보이는 BookReposiory에 @Repository로 컴포넌트 생성을 한 후, 빈 주입을 해줄 수 있다. 

 

2. Setter

Setter

Setter를 이용한 방법, 위처럼 @Autowired만 붙이고 Bean생성을 안하더라도 인스턴스는 만들 수 있겠지만, Setter로 인 해 Autowired가 빈을 찾으려하는 과정에서 에러가 발생할 수 있다. 

 

만약에 BookRepository에서 Return 받는 객체가 Optional 하면 @Autowired(required = false)로 해주면 경우에 따라 빈주입이 가능하다. 

 

Field

가장 일반적인 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