티스토리 뷰

Spring Container 스프링 컨테이너

 

ApplicationContext를 스프링 컨테이너라 한다. 이전까지는 개발자가 AppConfig를 사용해서 직접 객체를 생성하고 의존관계 주입하는 순수 자바코드만을 사용했다. 

 

지금부터는 스프링 컨테이너를 사용해 개발해보자 !


스프링 컨테이너란?

스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공하는 역할을 한다. 여기서 말하는 자바 객체를 스프링에서는 빈(Bean)이라고 부릅니다. 그리고 IoC와 DI의 원리가 이 스프링 컨테이너에 적용됩니다.

 

스프링 컨테이너는 Class 상단에 @Configuration이 붙은 AppConfig를 구성 정보로 사용한다.

Class 내부에 함수들을 선언하기 전에 @Bean으로 선언하면, 해당 함수들을 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈(Spring Bean)이라고 한다.

 

스프링 빈은 @Bean이 붙은 메서드 명을 스프링 빈의 이름으로 사용한다.

getBean의 첫 번째 인자는 AppConfig 클래스 내부에 있는 함수명, 두 번째 인자는 해당 함수 클래스이다.

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
applicationContext.getBean("memberService", MemberService.Class);

이제부터는 스프링 컨테이너를 통해서 필요한 스프링 빈(객체)를 찾는다.

스프링 빈(객체)은 application.getBean() 메서드를 사용해서 찾을 수 있다.

 

스프링 빈이 자동으로 객체를 찾아준다

 

순수 자바코드를 사용하는 것에 비해 스프링 컨테이너를 사용하면 얻을 수 있는 장점이 무엇일까?

 


스프링 컨테이너 생성 과정

우선 스프링 컨테이너를 생성하는 과정부터 알아보자

 

1. 스프링 컨테이너 생성

new AnnotationConfigApplicationContext(Appconfig.class) 를 이용해 컨테이너를 생성한다.

AppConfig.Class를 구성 정보로 지정한다.

 

 

2. 스프링 빈 등록

스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다.

AppConfig 클래스에서 Bean으로 annotation이 등록되어 있는 메소드를 찾는다.

각각의 메소드의 이름을 Bean 이름으로 지정하고 해당 메소드의 리턴 객체를 Bean 객체로 지정한다.

빈 이름은 메소드의 이름을 사용하는 것이 디폴트 이며, 직접 @Bean(name="beanName") 으로 지정할 수 있다.

빈 이름은 반드시 다른 이름으로 설정해야 된다 -> 서로 다른 이름으로 구분할 수 있어야 한다.

 

 

3. 스프링 빈 의존관계 설정

스프링 컨테이너가 스프링 빈을 등록하는 과정에서 자동으로 빈 의존관계를 매핑한다.

예를 들어 memberService Bean을 등록하는 과정에서 memberRepository를 의존하고 있는 것을 알 수 있다.

다른 메소드들도 동일하게 빈을 등록하는 과정에서 스프링 컨테이너 내부에 자동으로 빈 의존관계를 매핑한다.

댓글