CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

스프링 SPRING/[SPRING] 스프링 핵심원리

[Spring] 스프링 컨테이너 생성과정

2023. 1. 25. 13:32

스프링 컨테이너 생성 스프링 컨테이너가 생성되는 과정을 알아보자.

 

//스프링 컨테이너 생성
ApplicationContext applicationContext =
 new
AnnotationConfigApplicationContext(AppConfig.class);

ApplicationContext 를 스프링 컨테이너라 한다. ApplicationContext 는 인터페이스이다.

 

스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다. 직전에 AppConfig 를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.

 

자바 설정 클래스를 기반으로 스프링 컨테이너( ApplicationContext )를 만들어보자.

 

new AnnotationConfigApplicationContext(AppConfig.class);

 

이 클래스는 ApplicationContext 인터페이스의 구현체이다. > 참고: 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory , ApplicationContext 로 구분해서 이야기한다.

 

BeanFactory 를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext 를 스프링 컨테이너라 한다.

 

스프링 컨테이너 생성 과정

 

1. 스프링 컨테이너로 전환

1) AppConfig

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public DiscountPolicy discountPolicy(){
        return new RateDiscountPolicy();
    }
}

2) OrderApp

public class OrderApp {
    public static void main(String[] args) {

//        AppConfig appConfig = new AppConfig();
//        MemberService memberService = appConfig.memberService();
//        OrderService orderService = appConfig.orderService();

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

설명

  • new ApplicationContext(AppConfig.class)
    • ApplicationContext을 스프링 컨테이너라고 한다.
    • 기존에는 DI컨테이너를 사용해 직접 객체를 생성하고 DI를 했지만 이제는 스프링 컨테이너를 사용
  • 스프링 컨테이너는 @Configuation이 붙은 클래스를 설정 정보로 사용
    • @Bean이 적힌 메서드를 모두 호출해 반환된 객체를 스프링 컨테이너에 등록한다.
    • 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.
  • 스프링 빈은 applicationContext.getBean(”이름”, <타입>)을 이용해 찾을수있다.
    • 기존에는 주석부분 처럼 DI 컨테이너를 사용해 직접 조회했지만 이제는 스프링 컨테이너를 통해서 스프링빈 조회한다.

2. 스프링 컨테이너 생성 과정

1. 스프링 컨테이너 생성

 new AnnotationConfigApplicationContext(AppConfig.class)
  • 스프링 컨테이너 생성시 설정 클래스 지정해야한다. (AppConfig.class)

2. 스프링 빈 등록

설정 클래스 AppConfig

@Configuration
public class AppConfig {

    @Bean
    public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
    }

    @Bean
    public MemberRepository memberRepository() {
        return new MemoryMemberRepository();
    }

    @Bean
    public OrderService orderService() {
        return new OrderServiceImpl(memberRepository(), discountPolicy());
    }

    @Bean
    public DiscountPolicy discountPolicy(){
        return new RateDiscountPolicy();
    }
}
  • 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈 등록
  • @Bean이 스프링 빈
    • 빈 이름은 메서드 이름으로 한다.
    • @Bean(name="") 으로 빈 이름 지정 가능하다.

3. 스프링 빈 의존관계 주입

  • 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 참고해 의존관계를 주입한다.
  • 생성자를 호출하면서 의존관계 주입이 한번에 된다.
저작자표시

'스프링 SPRING > [SPRING] 스프링 핵심원리' 카테고리의 다른 글

[SPRING 기본] 스프링 공부 시작 전 자바의 확실한 이해는 필수...  (0) 2023.02.03
[SPRING] 스프링 컨테이너에 등록된 빈을 조회해보자! | Bean 조회 및 출력하기  (0) 2023.01.25
[Spring] 스프링 컨테이너 ApplicationContext  (0) 2023.01.25
[Spring] IoC, DI, 그리고 컨테이너 제어의 역전 IoC(Inversion of Control)  (0) 2023.01.25
[SPRING] 스프링 핵심원리 | 객체지향과 스프링  (0) 2023.01.25
    '스프링 SPRING/[SPRING] 스프링 핵심원리' 카테고리의 다른 글
    • [SPRING 기본] 스프링 공부 시작 전 자바의 확실한 이해는 필수...
    • [SPRING] 스프링 컨테이너에 등록된 빈을 조회해보자! | Bean 조회 및 출력하기
    • [Spring] 스프링 컨테이너 ApplicationContext
    • [Spring] IoC, DI, 그리고 컨테이너 제어의 역전 IoC(Inversion of Control)
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바