이번에 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 |
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)에 대해서 다루어 보겠습니다.
'backend > spring' 카테고리의 다른 글
[Spring] IOC(Inversion Of Control) 제어의 역전? (0) | 2022.03.16 |
---|---|
[Spring] DI(Dependency Injection) 의존성주입이란? (0) | 2022.03.07 |
[Spring] POJO(Plain Old Java Object)란 무엇인가? (0) | 2022.02.24 |
그래서 Spring이 뭔데? (0) | 2022.02.13 |