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