2) @Autowired
Autowired : 필요한 의존 객체 '타입'에 해당하는 빈을 찾아 주입하는 것입니다.
- 기본적으로 (required=True) 이 들어가 있음.
사용 위치
가정: bookService 클래스와 bookRepository 라는 두개의 클래스가 있고 bookService 클래스 안에 bookRepository 주입 하려 합니다.
- 생성자
bookclass 에 @Repository 선언.
# Service Class.
@Autowired() // 의존성 주입 @Inject
BookRepository bookRepository;
public BookService(BookRepository bookRepository) {
this.bookRepository = bookRepository;
}
- setMethod
@Autowired
public void setBookRepository(BookRepository bookRepository)
{
this.bookRepository = bookRepository;
}
- 필드
//required = false
@Autowired() // 의존성 주입 @Inject
BookRepository bookRepository;
여러 경우의 수
- 해당 타입이 빈이 없는 경우 -> error bookRepository 에 @Repositoty 등록 안할시. (생성자 ,setter 모두)하지만 Autowired(required=false) 으로 할 경우 실행은 가능 하지만 의존성 주입은 이루어지 않는다.
- 해당 타입이 빈이 한개인 경우 -> @Repository 표시하고 Service 부분에서 Autowired를 사용하여 빈을 등록한다.
- 해당 타입의 빈이 여러 개인 경우
-우선순위 분류
BookRepository class 를 interface 로 변경한 후 A와 B에게 인터페이스를 상속받고
해당 bookRepository를 불러오면 Error가 발생한다. A와 B중 어떤 것을 선택할 지 결정을 해줘야 한다.
해당 빈들 중 우선순위를 분류하기 위해 @Primary 표기롤 덧 붙이거나 또는 @Qualifier( 해당 주입 빈 이름)
을 표기하도록 한다.
-모두 받을 경우 ArrayList 활용하여 List<BookRepository> bookRepositorylist; 선언후 forEach로 출력 가능하다.
this.bookRepositorylist.forEach(System.out::println);
-빈이름으로 시도 -> @Autowired() // 의존성 주입 @Inject
BookRepository 내가 만들 class ; <bookRepository 는 인터페이스 | A,B가 implements bookRepository 함.
@Autowired() // 의존성 주입 @Inject
BookRepository A 이렇게 선언할 시 A를 주입할 수 있다.
전체적인 동작원리
BeanPostProcessor (빈 등록된것을 찾는다.) : 새로 만든 빈 인스턴스 수정 하도록 하는 라이플 사이클 인터페이스.
AutowiredAnnotationBeanPostProcessor (빈으로 등록 되어 있으며 다른 일반적인 빈들에게 Annotaion의 로직을 처리합니다.) : Autowire , Value, inject 어노테이션 처리기.
--> 빈인스턴스를 만들고 빈 초기화라이플사이클 후에 콜백이 일어나게 됩니다.
--> 그러므로 앱이 실행 되고 나서가 아닌 실행 도중에 나타나는 것을 확인 할 수 있습니다.
'Spring > Spring_CoreTechnologies' 카테고리의 다른 글
SpringFrameWork CoreTechnition_section1_5부 (0) | 2020.11.18 |
---|---|
SpringFrameWork CoreTechnition_section1_4부 (0) | 2020.11.17 |
SpringFrameWork CoreTechnition_section1_3부 (0) | 2020.11.17 |
SpringFrameWork CoreTechnition_section1_1부 (0) | 2020.11.17 |
IOC 컨테이너_빈(BEAN)_의존성 주입(DI) 개념정리 (Spring) (0) | 2020.11.13 |
댓글