while(1) 작심삼일();

AppConfig와 스프링 컨테이너 본문

CS/spring

AppConfig와 스프링 컨테이너

hanjongho 2021. 1. 28. 23:38

직전 포스트에서는 순수한 JAVA 코드만으로 DI(의존관계 주입)을 해보았고, 이번에는 스프링 컨테이너를 통해서 사용해본다.

@Configuration
public class AppConfig {
    @Bean
    public OrderService orderService() {
          return new OrderServiceImpl(new FixDiscountPolicy());
    }
 }

main에서의 차이점

기존)

AppConfig appConfig = new AppConfig();
OrderService orderService = appConfig.orderService();

변경)

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);

 

스프링 컨테이너

  • ApplicationContext를 스프링 컨테이너라고 한다. (인터페이스)
  • @Configuration이 붙은 AppConfig를 설정정보로 사용한다. @Bean이라고 적힌 메서드를 전부 호출해서 반환된 객체를 스프링 컨테이너에 등록한다. 이렇게 등록된 객체를 스프링 빈이라고 한다.
  • 스프링 빈은 @Bean이 붙은 메서드 명을 스프링 빈의 이름으로 사용한다. 빈 이름은 항상 다른 이름을 부여해야한다. 같다면 다른 빈이 무시 혹은 기존 빈을 덮는 등과 같은 오류가 발생한다. (@Bean(name = "name")으로 변경도 가능하다.)
  • 직접 자바코드를 통해 등록했을 때는 직접 객체를 조회해서 사용했지만, 이제부터는 스프링 컨테이너를 통해 사용할 스프링 빈(객체)를 찾아야한다. 스프링 빈은 applicationContext.getBean() 메서드를 이용하여 찾을 수 있다.
  • XML, 애노테이션 기반의 자바 설정 클래스로 만들 수 있고, 직전에 AppConfig를 사용한 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.
  • 생성할 때 구성정보를 지정해주어야 한다. (ex. new AnnotationConfigApplicationContext(AppConfig.class))

ac.getBeanDefinitionNames() : 스프링 컨테이너에 등록된 모든 빈 이름을 조회한다.

ac.getBean("name") : 빈 이름으로 빈 객체(인스턴스)를 조회한다.

ac.getBeansOfType() : 해당 타입의 모든 빈을 조회한다.

 

스프링이 내부에서 사용하는 빈은 getRole()로 구분할 수 있다.

ROLE_APPLICATION : 사용자가 정의한 빈

ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈

 

BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스이다.
  • 스프링 빈을 관리하고 조회하는 역할을 하며 관련 대부분의 기능을 제공한다.

ApplicationContext가 제공하는 부가기능

ApplicationContext

  • BeanFactory 기능을 모두 상속받아서 제공한다.
  • 메시지소스를 활용한 국제화 기능 (ex. 한국 -> 한글, 영어권 -> 영어로 출력)
  • 환경변수 (로컬, 개발, 운영 등을 구분하여 처리)
  • 애플리케이션 이벤트 (이벤트를 발생하고 구독하는 모델을 편리하게 지원)
  • 편리한 리소스 조회 (파일, 클래스패스, 외부 등에서 리소스를 편리하게 지원)

BeanFactory를 직접 사용하는 경우보다는 부가기능이 포함된 ApplicationContext를 사용한다.

 

 

※ 스프링 핵심 원리 - 기본편(김영한)을 수강하고 정리한 글입니다. inf.run/2oxX

 

스프링 핵심 원리 - 기본편 - 인프런

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다. 초급 프레임워크 및 라이브러리 웹 개발 서버 개발 Back-End Spring 객체지향 온

www.inflearn.com

'CS > spring' 카테고리의 다른 글

컴포넌트 스캔  (0) 2021.01.29
싱글톤 패턴  (0) 2021.01.29
AppConfig, IoC, DI  (0) 2021.01.28
스프링 시작하기 - 환경설정  (0) 2021.01.28
좋은 객체 지향 프로그래밍이란?  (0) 2021.01.28
Comments