ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring 핵심 원리 기본편 - 4. 스프링 컨테이너와 스프링 빈
    Spring-Boot/스프링핵심원리 - 기본편 2022. 5. 24. 13:43

    *스프링 컨테이너*

    - ApplicationContext를 스프링 컨테이너라 한다.

    - @Configuration : 애플리케이션의 구성(설정) 정보로 사용

    - @Bean : 해당 메서드들을 모두 호출해서 반환된 객체를 스프링 컨테이너에 등록

                  이렇게 스프링 컨테이너에 등록된 객체를 스프링 빈이라고 한다.

    // 스프링 컨테이너 생성
    ApplicationContext applicationContext = 
        new AnnotationConfigApplicationContext(AppConfig.class);
        
    // 스프링 컨테이너에서 빈 가져오기
    applicationContext.getBean("memberService", MemberService.class);

    - 스프링 컨테이너를 통해서 필요한 스프링 빈( 객체 )를 찾아야한다 .

       aplicationContext.getBean( ) 메서드를 사용해서 찾을 수 있다.

     

    - ApplicationContext는 인터페이스다

    - 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있다.

     

    - 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.

     

    *빈 이름*

    - 빈 이름은 메서드 이름을 사용한다.

    - 빈 이름을 직접 부여할 수 있다. @Bean(name="memberService2") > 빈 이름은 항상 다른 이름 부여

     

    스프링 컨테이너의 생성과정

    1. 스프링 컨테이너 생성

    2. 스프링 빈 등록

    3. 스프링 빈 의존관계 설정 - 준비

    4. 스프링 빈 의존관계 설정 - 완료


    스프링 빈 조회

    ac.getBean( 빈이름 , 타입 );
    ac.getBean( 타입 );

    - 조회 대상 스프링 빈이 없으면 예외 발생 : 'NoSuchBeanDefinitionException: No bean named 'xxxx' available'

     

    동일한 타입이 둘 이상

    ac.getBeansOfType()

     

    상속관계

    - 부모 타입으로 조회하면, 자식 타입도 함께 조회한다.

    - 그래서 모든 자바 객체의 최고 부모인 'object' 타입으로 조회하면, 모든 스프링 빈을 조회
    -  getbean을 사용하여 부모 타입으로 조회 시 , 자식이 둘 이상 있으면, 중복 오류가 발생한다. -> 빈 이름 지정

     


    BeanFactory와 ApplicationContext

    - BeanFactory > ApplicationContext > AnnotationConfig, ApplicationContext

     

    * Bean Factory *

    - 스프링 컨테이너의 최상위 인터페이스다.

    - 스프링 빈을 관리하고 조회하는 역할을 담당

    - getBean( ) 을 제공

     

    * ApplicationContext *

    - BeanFactory 기능을 모두 상속받아서 제공한다.

    - 애플리케이션을 개발할 때는 빈은 관리하고 조회하는 기능은 물론이고, 수 많은 부가기능이 필요하다.

    - ApplicationContext가 제공하는 부가기능

      1. 메세지 소스를 활용한 국제화 기능 - 한국이면 한국어, 영어권이면 영어로 출력

      2. 환경 변수 - 로컬, 개발, 운영 등을 구분해서 처리

      3. 애플리케이션 이벤트 - 이벤트를 발행하고 구독하는 모델을 편리하게 지원

      4. 편리한 리소스 조회 - 파일, 클래스패스, 외부 등에서 리소스를 편리하게 조회

     

    - BeanFactory나 ApplicationContext를 스프링 컨테이너라 한다.


    스프링 빈 설정 메타 정보 - BeanDefinition

    - 스프링은 BeanDefinition이라는 추상화로 다양한 설정 형식 지원

    - BeanDefinition을 빈 설정 메타 정보라 한다. @Bean당 하나씩 메타정보 생성

    - 스프링 컨테이너는 이 메타정보를 기반으로 스프링 빈을 생성

     

    - BeanDefinition을 직접 생성해서 스프링 컨테이너에 등록할 수 있다. 하지만 실무에서 BeanDefinition을 직접 정의하거나 사용할 일은 거의 없다

     

     

    스프핑이 빈을 등록하는 방법 중 2가지

    1. xml 파일로 직접 스프링 빈을 스프링 컨테이너에 등록

    <bean id="" class="">
    	<constructor-arg name="" ref="" />
    </bean>

    - class는 존재하지만 factory메서드는 null임

     

    2. factory 메서드를 사용 - java코드 이용

    @Configuration
    public class AppConfig {
        @Bean
        public ~ ~() {
            return ~;
        }
    }

    - factory메서드는 존재하지만 class가 null임

     

     

    출처 :

    인프런 김영한님의 스프링 핵심 원리 - 기본편

    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/

    댓글

Designed by Tistory.