-
@Autowired를 이용한 의존성 주입SPRING/스프링프레임워크 핵심개념 2021. 5. 9. 02:09
@Autowired를 이용하여 의존성을 주입하는 방법은 아래와 같은 방법들이 존재한다.
Field Injection
@Service public class BookService { @Autowired BookRepository bookRepository; }
Constructor Injection
@Service public class BookService { BookRepository bookRepository; @Autowired public BookService(BookRepository bookRepository) { this.bookRepository = bookRepository; } }
Set Injection
@Service public class BookService { BookRepository bookRepository; @Autowired public void setBookRepository(BookRepository bookRepository) { this.bookRepository = bookRepository; } }
같은 TYPE의 빈이 여러 개일 경우
- @Primary
- 해당 타입의 빈 모두 주입받기
- @Qualifier (빈 이름으로 주입받기)
아래와 같이 BookRepository Interface와 Repository들은 구현했을 경우에는 에러가 발생한다.
-> Could not autowire. There is more than one bean of 'BookRepository' type.
위에서 언급한 3개의 방법 중 하나로 해결해야한다.
public interface BookRepository { } @Repository public class MyBookRepository implements BookRepository{ } @Repository public class JumpBookRepository implements BookRepository { } @Service public class BookService { @Autowired BookRepository bookRepository; }
1. Primary 사용
해당 어노테이션이 붙은 bean을 등록한다.
@Repository @Primary public class JumpBookRepository implements BookRepository { }
2. Qualifier 사용
@Service public class BookService { @Autowired @Qualifier("jumpBookRepository") BookRepository bookRepository; }
3. 해당 타입의 빈 모두 주입받기
@Service public class BookService { @Autowired List<BookRepository> bookRepositories; }
Primary를 사용하는 방법이 Qualifier를 사용하는 방법보다 Type-Safe하다.
@Resource는 Name으로 Bean을 찾고, 만약 없으면 Type으로 다시 Bean을 찾는다.
@Autowired는 Type으로 Bean을 찾는다.
'SPRING > 스프링프레임워크 핵심개념' 카테고리의 다른 글
Environment - 프로파일 (0) 2021.05.14 Bean의 스코프 (0) 2021.05.13 @Component와 컴포넌트 스캔 (1) 2021.05.09 다양한 Bean 주입 방법 (0) 2021.05.08 IOC컨테이너/ 빈 / DI 관련 개념정리 (0) 2021.05.08