ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • @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
Designed by Tistory.