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

KJH·2023년 3월 2일
0
post-custom-banner

컨테이너 생성

ApplicationContext applicationContext = 
	new AnnotationConfigApplicationContext(AppConfig.class);

1. 스프링 컨테이너 생성

  • new AnnotationConfigApplicationContext(AppConfig.class)

2. 스프링 빈 등록

  • 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈 등록

빈 이름

  • 기본적으로 메서드 이름을 사용
  • 직접 부여 가능 @Bean(name= [...])
  • 빈 이름은 항상 고유해야함

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

  • 객체 생성

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

  • 설정 정보를 참고해서 의존관계 주입

컨테이너에 등록된 모든 빈 조회

  AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
	@Test
    @DisplayName("애플리케이션 빈 출력하기")
    void findApplicationBean(){
        String[]beanDefinitionNames = ac.getBeanDefinitionNames();
        for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);

            // ROLE_APPLICATION : 직접 등록한 애플리케이션 빈
            // ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈
            if (beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name = " + beanDefinitionName + "obejct = " + bean);
            }
        }
    }

빈 조회

가장 기본적인 조회 방법

  • ac.getBean(이름, 타입)
  • ac.getBean(타입)
  • 없으면 예외발생

동일한 타입 2개이상

  • 타입으로 조회시 오류 (이름지정필수)
  • ac.getBeanOfType()

상속관계

  • 부모 타입으로 조회하면, 자식 타입도 함께 끌려나옴

BeanFactory와 ApplicationContext

  • ApplicationContext는 BeanFactory 상속받음
  • 빈 관리기능 + 부가기능
  • 이것이 컨테이너!!

ApplicationContext 기능

  • BeanFactory 기능을 모두 상속받아 제공
  • ApplicationContext 부가기능
    • 메시지 소스를 활용한 국제화기능
    • 환경변수
    • 애플리케이션이벤트
    • 편리한 리소스 조회

다양한 설정 지원

스프링 컨테이너는 다양한 설정 정보를 받아들일 수 있음

어노테이션 기반

  • new AnnotationConfigApplicationContext(AppConfig.class)
  • 자바 코드로 된 설정정보를 넘기면 됨

XML

  • GenericXmlApplicationContext 사용
ApplicationContext ac = new GenericXmlApplicationContext("appConfig.xml");
MemberService memberService = ac.getBean("memberService", MemberService.class);

설정 메타 정보 -BeanDefinition

스프링은 자바 코드던, xml이던 상관없이읽어서 BeanDefinition을 민든다.

bean당 하나씩 메타 정보가 생성되고,스프링 컨테이너가 이를 기반으로 스프링 빈을 생성한다.

스프링이 다양한 형태의 설정 정보를 BeanDefinition으로 추상화해서 사용한다 정도만 이해하자.


post-custom-banner

0개의 댓글