본문 바로가기
개발공부/Spring

[SpringBoot] IoC 컨테이너와 Bean

by dding-g 2020. 5. 1.

Spring - IoC 컨테이너와 Bean

이전 포스팅에서는 IoC 가 어떤 것인지 알아보았다. 이번 포스팅에서는 IoC 컨테이너 가 무엇인지 알아보도록 하겠다.

IoC(Inversion of Control) 컨테이너

빈(Bean) 을 만들고 엮어주며 제공해준다. 기본적으로 Bean들은 Singleton 으로 이루어져 있다.

멀티 스레드 상황에서 Singleton을 만드는것은 번거롭고 조심스러운 일이다. 하지만 IoC 컨테이너는 이를 관리해주기 때문에 손쉽게 Bean을 관리할 수 있다.

Singleton scope의 객체는 사용할때마다 계속 생성해 주는것이 아닌 하나의 인스턴스를 Application 전반에 걸쳐 사용할 수 있다. ApplicationContext 를 이용해 모든 Bean들을 조회할 수 있다.

Bean

IoC 컨테이너가 관리하는 일반적인 객체. ApplicationContext 가 담고있는 객체이다. new 키워드를 사용해 객체를 만드는것은 Bean에 포함되지 않는다.

IntelliJ 에서 해당 클래스가 Bean에 등록이 되어 있는지 아닌지는 해당 클래스 옆에 초록생 콩 image아이콘의 유무로 판단할 수 있다.

🤔 어떻게 Bean을 등록하지?

Bean을 등록하는데는 Component Scanning 과 직접 등록하는 방법이 있다.

  • Compoenet Scanning
    • @Controller
    • @Repository
    • @Component
    • 등등..

@SpringBootApplication내부의 Annotaion중 하나인 @ComponentScan이 어디부터 Component를 찾아보라고 알려준다. Component를 찾아보는 행위를 Component Scanning 이라고 한다.

image

  • 직접 등록

    • Bean설정 파일이 Java 설정파일인지 xml인지에 따라 다르다.

    • Java 설정 파일인 경우, @Configuration 이라는 annotaion이 붙어있는데, 그 안에 @Bean을 사용해 직접 정의할 수 있다. 해당 JavaConfiguration 파일이 Component Scanining에 의해 읽힐 때, IoC 컨테이너 에 들어간다.

      • @Configuration
        public class JavaConfigurationExample {
            @Bean
            public TestRespository testRespository(){
                return new TestRespository(); //return한 객체가 @Bean에 의해 등록 된다.
            }
        }

🤔 Bean을 꺼내 쓰는 방법?

@Autowired Annotaion을 사용하여 손쉽게 사용할 수 있다.

🤔 Life Cycle CallBack 이란?

Annocation Process중에 IoC 컨테이너가 Bean을 등록하고 사용할때 쓰는 Interface 들을 말함