스프링 컨테이너와 스프링 빈

Yerim·2021년 8월 21일
0

Spring

목록 보기
4/9
post-thumbnail

✔ Inflearn 강의 수강 내용 정리글입니다!


스프링 컨테이너 생성

ApplicationContext applicationContext =
 new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext : 스프링 컨테이너 ➡ 인터페이스
  • AnnotationConfigApplicationContext : 인터페이스의 구현체
  • 스프링 컨테이너는 XML 기반 또는 어노테이션 기반의 자바 설정 클래스로 만들 수 있다
  • 이전의 AppConfig어노테이션 기반의 자바 설정 클래스

📍 스프링 컨테이너

new AnnotationConfigApplicationContext(AppConfig.class)
  • 스프링 컨테이너 생성 시에는 구성 정보를 지정해야 함
  • 여기서는 AppConfig.class 를 구성정보로 지정

스프링 빈 조회

💡 기본

  • 빈 이름으로 조회
MemberService memberService = ac.getBean("memberService", MemberService.class);
  • 이름 없이 타입으로만 조회
MemberService memberService = ac.getBean(MemberService.class);

같은 타입에 속하는 여러 빈이 존재할 경우 Exception 발생 주의

  • 구체 타입으로 조회
MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);

구체 타입으로 조회하면 변경 시 유연성이 떨어짐

💡 동일한 타입이 둘 이상

  • 빈 이름을 지정하여 조회
MemberService memberService = ac.getBean("memberService", MemberService.class);
  • 특정 타입 모두 조회
Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);

💡 상속 관계

  • 부모 타입으로 조회하면 자식 타입도 함께 조회

  • 모든 자바 객체의 최고 부모인 Object 로 타입으로 조회하면 모든 스프링 빈 조회

  • 부모 타입으로 조회 시 자식이 둘 이상 있으면 중복 오류 발생

  • 부모 타입으로 모두 조회하기

Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);

BeanFactory와 ApplicationContext

💡 BeanFactory

  • 스프링 컨테이너의 최상위 인터페이스
  • 스프링 빈을 관리하고 조회하는 역할 담당
  • getBean() 제공

💡 ApplicationContext

  • BeanFactory 기능을 모두 상속받아서 제공
  • BeanFactory가 제공하는 기능 외에 수많은 부가 기능 제공

XML

  • GenericXmlApplicationContext 사용
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
  • XML
 <bean id="memberService" class="hello.core.member.MemberServiceImpl">
 	<constructor-arg name="memberRepository" ref="memberRepository" />
 </bean>
  • Java
@Bean
public MemberService memberService() {
        return new MemberServiceImpl(memberRepository());
}

위 두개의 코드는 같은 의미!


스프링 빈 설정 메타 정보

💡 BeanDefinition

  • 추상화
  • 역할과 구현을 개념적으로 나눈 것
    • XML을 읽어서 BeanDefinition을 만들면 된다
    • 자바 코드를 읽어서 BeanDefinition을 만들면 된다
      ➡ 스프링 컨테이너는 자바 코드인지, XML 코드인지 몰라도 BeanDefinition 만 알면된다

  • Reader 를 사용해서 설정 정보를 읽고 BeanDefinition 을 생성

[출처 - Inflearn : 스프링 핵심 원리 - 기본편] 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/dashboard

profile
Backend-Developer

0개의 댓글