짱아의 개발 기록장

6강. IoC 컨테이너 본문

반응형

IoC 컨테이너는 주로 BeanFactory나 ApplicationContext를 사용한다.

ApplicationContext는 BeanFactory를 상속받고 더 많은 기능을 제공하고 있기 때문에

이 프로젝트에서는 주로 ApplicationContext를 사용할 예정이다.

 

IoC컨테이너는 Bean을 만들고 Bean사이의 의존성을 엮어주고 최종적으로 Bean을 제공해준다.

 

pet-clinic프로젝트에서는 OwnerController, OwnerRepository, PetController, PetRepository가 IoC컨테이너에 Bean으로 등록되어 있다. 모든 클래스가 Bean으로 등록된 것은 아니다!!

녹색 콩 모양이 나오면, Bean으로 등록된 것

위 사진처럼 녹생 콩 모양이 클래스 옆에 표시된다면, Bean으로 등록된 것이다.

📌의존성 주입은 Bean끼리만 가능하다! => 즉, Spring IoC컨테이너에 들어있는 객체들끼리만 의존성 주입 가능,, (물론 외부에 있는 것으로 의존성 주입을 하기도 하지만 거의 그렇게 하지않고 권장하지도 않는다.)

[대략적인 흐름]

IoC컨테이너 중에서도 ApplicationContext로 부터 같은 Type의 Bean을 제공받는다.

즉, ApplicationContext에는 모든 Bean들이 다 담겨있다.

ex) OwnerController는 ApplicationContext로 부터 OwnerRepository와 VisitRepository Bean을 제공받는다.(의존성 주입)

 

위 사진에서 보면, Constructor Injection으로 DI를 하고 있는데

OwnerRepository Bean을 제공받아서 출력한 -> this.owners의 해시값과

ApplicationContext Bean을 제공받아서 출력한 -> applicationContext.getBean(OwnerRepository.class)의 해시값이

동일하다..!!

Singleton Scope의 객체

매번 새로 만드는 것이 아니라 계속해서 재사용하는 것,,,

멀티스레드 상황에서 Singleton Scope을 계속 구현하는 것은 매우 번거로운 일인데

IoC컨테이너를 사용하면 편리하고 손 쉽게 Bean을 가져다 쓰면서 Singleton Scope을 달성할 수 있다.

반응형
Comments