본문 바로가기
Spring

[Spring] 스프링 컨테이너와 스프링 빈

by 당코 2022. 12. 26.

 

스프링에는 자바 객체를 관리해주는 공간인 스프링 컨테이너가 있다.

여기서 말하는 자바 객체란 빈(Bean)을 의미하는데, 스프링 컨테이너는 등록된 빈을 생성부터 소멸까지 관리해 준다.

스프링 컨테이너에 관한 인터페이스는 BeanFactory, ApplicationContext가 있다.

최상위 인터페이스인 BeanFactory를 상속받는 ApplicationContext 인터페이스가 있고 그 구현체 중 하나로 AnnotationConfigApplicationContext가 있다.

BeanFactory는 스프링 빈을 관리하고 조회하는 역할을 담당한다.

ApplicationContext는 BeanFactory의 모든 기능을 상속받을 뿐만 아니라 국제화 기능, 환경변수, 애플리케이션 이벤트, 리소스조회 같은 여러 부가기능을 다른 인터페이스로부터 상속받아 제공한다. 실제 개발에서는 다양한 기능을 가진 ApplicationContext를 주로 사용한다.

 

스프링 컨테이너에 스프링 빈 등록

이전 포스팅에서 본 AppConfig의 설정정보를 스프링 컨테이너에 스프링 빈으로 등록해 보겠다.

@Configuration
public class AppConfig {
	@Bean
 	public MemberService memberService() {
 		return new MemberServiceImpl(memberRepository());
 	}
   	@Bean
 	public OrderService orderService() {
 		return new OrderServiceImpl(memberRepository(), discountPolicy());
 	}
   	@Bean
 	public MemberRepository memberRepository() {
 		return new MemoryMemberRepository();
 	}
   	@Bean
 	public DiscountPolicy discountPolicy() {
 		return new FixDiscountPolicy();
 	}
}

스프링 컨테이너는 @Configuration이 붙은 클래스를 설정 정보로 사용한다.

그중 @Bean이 적힌 메서드를 자동으로 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.

다음과 같이 @Bean이 적힌 메서드의 이름을 빈 이름으로, 반환된 객체를 빈 객체로 스프링 컨테이너에 저장한다.

 

스프링 컨테이너 사용 방법

ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

AnnotationConfigApplicationContext 구현체에 구성정보의 class를 이용해 새로운 객체를 생성하면 스프링 컨테이너를 이용할 수 있다.

MemberService memberService = ac.getBean("memberService", MemberService.class);

다음과 같이 getBean 함수를 이용하여 스프링 컨테이너에 저장된 빈 객체를 가져올 수 있다.

 

스프링 컨테이너의 큰 장점 중 하나는 빈 객체를 싱글톤 패턴으로 관리해준다는 것이다.

다음 포스팅에서 싱글톤 패턴이 무엇인지 대해 알아보도록 하겠다.

 

출처 : https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8