[Spring] Spring Container와 Spring Bean

GWANSU SHIN·2022년 7월 25일
0

spring

목록 보기
3/7

Spring Bean

  • Spring IoC Container가 관리하는 Java 객체
  • Spring에 의해 생성되고 관리되는 Java 객체
  • ApplicationContext.getBean()와 같은 메소드를 이용하여 Spring Container로부터 Bean 객체를 얻어옴

Spring Container

  • 객체들을 관리하는 공간
  • Bean의 생성부터 소멸까지 관리
  • Spring Container는 Bean을 정의한 Annotation 기반의 Java 파일 또는 XML을 기반으로 생성할 수 있음

클래스 설정 구성 정보

AppConfig.java

  @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 FixDiscountPolicy();
          return new RateDiscountPolicy();
      }
  }
  • @Configutation: AppConfig에 설정을 구성.
  • @Bean: Spring Container에 Spring Bean으로 등록. @Bean 이라 적힌 메서드를 모두 호출해서 반환된 객체를 Spring Container에 등록

    위 예제처럼 Annotation을 사용하는 방법에는 여러 가지가 존재한다.

appConfig.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

        <bean id="memberService" class="gwshin.core.member.MemberServiceImpl">
            <constructor-arg name="memberRepository" ref="memberRepository" />
        </bean>

        <bean id="memberRepository" class="gwshin.core.member.MemoryMemberRepository" />

        <bean id="orderService" class="gwshin.core.order.OrderServiceImpl">
            <constructor-arg name="memberRepository" ref="memberRepository" />
            <constructor-arg name="discountPolicy" ref="discountPolicy" />
        </bean>

        <bean id="discountPolicy" class="gwshin.core.discount.RateDiscountPolicy" />

    </beans>
  • 컴파일 없이 Bean 설정 정보를 변경할 수 있음
  • 최근 잘 사용하지 않는 추세

Spring Container의 생성 과정

  1. Spring Container 생성
  2. Spring Bean 등록
    • Spring Container는 매개 변수로 넘어온 AppConfig를 사용해서 Spring Bean을 등록한다.
    • Bean 이름은 기본적으로 메소드 이름을 사용하며, 아래와 같이 직접 지정할 수도 있다.
      @Bean(name="memberService2")
  3. Spring Bean 의존 관계
    • Spring Container는 AppConfig를 사용하여 의존관계를 주입(DI)한다.

Bean Factory와 Application Context

Bean Factory

  • Spring Container의 최상위 인터페이스
  • Spring Bean을 관리하고 조회
  • getBean() 메소드 제공

ApplicationContext

  • Bean Factory의 관리하고 조회하는 기능 + 부가 기능들 제공
ApplicationContext applicationContext = 
                    new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext: 스프링 컨테이너(interface)
  • AnnotationConfigApplicationContext: ApplicationContext의 구현체
  • AppConfig.class: 클래스 설정 구성 정보

Reference

[인프런] 스프링 핵심 원리 - 기본편 (김영한)

0개의 댓글