규턴의 개발블로그
article thumbnail

이번에 Spring에서 다루어볼 주제는 스프링 빈과 컨테이너입니다.

 

 

컨테이너와 빈(Bean)

 

정확히는 Ioc컨테이너 혹은 DI컨테이너라고 불립니다.

컨테이너는 DI(의존관계 주입)과 IoC(의존관계 연결)의 기능을 해줍니다.

 

우선 구처적인 설명을 드리기 위해 간단한 예제 코드를 알려드리겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
public class AppConfig {
 
    @Bean
    public MemberService memberService() {
        return new MemberService(memberRepository());
    }
 
    @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }
 
}
cs

@Configuration: 구성정보를 담당할 때 @Configuration annotation을 붙여줍니다.

@Bean: 각 생성자에 @Bean을 붙여주면 컨테이너에 등록됩니다. Bean에 대해선 컨테이너 설명 후 자세히 적어보겠습니다.

위의 코드를 그림으로 나타나면 다음과 같습니다.

 

 

위의 코드를 자세히 뜯어보면

1
2
3
4
 @Bean
    public MemberRepository memberRepository(){
        return new MemoryMemberRepository();
    }


cs
@Bean을 통해 memberRepository가 컨테이너에 등록되었습니다.
1
2
3
4
@Bean
 public MemberService memberService() {
        return new MemberService(memberRepository());
    }
cs

이후 @Bean으로 등록된 memberService는 이미 등록된 memberRepository를 자동으로 주입되게 됩니다.

이때 DI(주입)+IoC(제어의 역전-> 컨테이너가 주입시켜 줌)이 일어나게 됩니다.

 

 

BeanFactory와 ApplicationContext

 

BeanFactory

스프링 컨테이너의 촤상위 인터페이스입니다.스프링 빈을 조회 및 관리하는 역할을 합니다.

 

ApplicationContext

BeanFactory 기능을 상속받아서 제공합니다.

빈을 관리 및 조회할 뿐만 아니라 상속받아서 구현되기에 추가적인 기능을 할 수 있습니다.

추가적인 기능은(국제화 기능, 환경변수 관련 처리, 애플리케이션 이벤트, 리소스 조회 등)이 있습니다.

 

우리가 사용할 때는 ApplicationContext를 사용한다고 생각하시면 됩니다.

BeanFactory의 기능을 모두 사용하면서 추가로 부가적인 기능을 사용할 수 있기 때문입니다.

이러한 코드를 통해 작성할 수 있고 실제로 빈을 꺼내올 수 도 있습니다.

1
2
3
4
5
//스프링 컨테이너 생성
ApplicationContext applicationContext =new AnnotationConfigApplicationContext(AppConfig.class);
 
//스프링 빈 조회
MemberRepository memberRepository=applicationContext.getBean("memberRepository",MemberRepository.class);
cs

 

이후 위의 내용과 관련된 싱글톤(Singleton)에 대해서 다루어 보겠습니다.

 

 

 

 

 

 

profile

규턴의 개발블로그

@규턴이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!