Spring - ApplicationContext

박민수·2023년 11월 14일
0

Spring

목록 보기
22/46
post-thumbnail

ApplicationContext

ApplicaiotnContext를 스프링 컨테이너라 한다. 스프링 컨테이너는 @Configuration이 붙은 클래스를 설정 정보로 사용하고, 해당 클래스 내에 @Bean 어노테이션이 붙은 메서드들을 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라 한다.

스프링 빈은 @Bean 애노테이션이 붙은 메서드의 명을 그대로 가져와 스프링 빈의 이름으로 등록한다. 스프링 빈은 applicationContext.getBean() 메서드를 사용해서 조회할 수 있다.

@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 RateDiscountPolicy();
    }
}
public class MemberApp {
    public static void main(String[] args) {
    	//스프링 컨테이너 생성
        ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
        
        //스프링 Bean 조회
        MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
        ...
    }
}

BeanFactory

BeanFactory는 스프링 컨테이너의 최상위 인터페이스이고, 스프링 빈을 관리하고 조회하는 역할을 담당한다.

ApplicationContext는 BeanFactory를 상속받아서 BeanFactory의 모든 기능을 제공함과 동시에 추가적으로 여러 부가기능 을 제공한다. (ex: 메시지소스를 활용한 국제화 기능, 환경변수, 애플리케이션 이벤트, 편리한 리소스 조회 등)


참조
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

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글