Spring Container

이성준·2022년 8월 11일
0

Spring

목록 보기
3/11
post-thumbnail

스프링 컨테이너

ApplicationContext는 스프링 컨테이너 -> 인터페이스
애노테이션으로도 만들수도 있고, XML 기반으로 만들수도 있음(
근데 잘 안씀)
일반적으로 ApplicationContext를 스프링 컨테이너라고 한다.

대략적인 과정

  1. 스프링 컨테이너 생성
  1. @Bean 애노테이션이 붙은 메서드들은 리턴하는 객체들 스프링 컨테이너에 등록한다.

빈 이름은 항상 다르게 하자
3. 스프링 빈 의존관계 설정 - 준비

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

Bean조회

//1번
String[] beanDefinitionNames = ac.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
  //2번
  Object bean = ac.getBean(beanDefinitionName);
  //3번
  if(beanDefinition.getRole()==beanDefinition.ROLE_APPLICATION){
                ac.getBean(beanDefinitionName);
            }
        }
 

1번 : 스프링 내부 빈까지 싹다 조회

2번 : 특정 bean 조회

ac.getBean(이름,타입 정보)
ac.getBeansOfType(타입 정보) -> 그 타입의 모든 빈 조회

특징

  • 같은 타입의 빈이 여러개 일시, 컨테이너에서 어떤 빈을 꺼내줄지 모르니까 그럴땐 최대한 구체적으로 정보를 적어주자
  • 부모 타입으로 조회시, 자식 타입도 모두 조회가 된다.

3번 : ROLE_APPLICATION 내가 애플리케이션을 개발하기 위해 등록한 빈들 조회
3-1번 : ROLE_INFRASTRUCTURE : 스프링 내부에서 사용하는 빈

BeanFactory와 그 구현체들

BeanFactory
스프링 컨테이너의 최상위 인터페이스 -> 스프링 빈을 관리하고 조회하는 역할
ApplicationContext

Bean Definition이란

BeanFactory + 수많은 부가기능
예시) 메시지소스를 활용한 국제화 기능 -> 언어 설정
환경변수 -> 개발환경, 테스트환경, 운영환경 등등 설정 편하게
애플리케이션 이벤트 - 이벤트를 발행하고 구독하는 모델을 편리하게 지원한다.
편리한 리소스 조회 - 파일 등에서 리소스를 편리하게 조회


어노테이션기반의 자바 코드면 annotated BeanDefinitionReader가 자바코드를 설정정보로 읽어서 beanDefinition을 생성한다 xml으로 설정되어있으면 xml로 등록정보를 읽어서 beandefinition으로 만들고 즉 beanDefinition에 이제 bean의 메타데이터들을 추상화 한다.

  • BeanClassName: 생성할 빈의 클래스 명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음)
  • factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig
  • factoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예) memberService
  • Scope: 싱글톤(기본값)
  • lazyInit: 스프링 컨테이너를 생성할 때 빈을 생성하는 것이 아니라, 실제 빈을 사용할 때 까지 최대한 생성을 지연처리 하는지 여부
  • InitMethodName: 빈을 생성하고, 의존관계를 적용한 뒤에 호출되는 초기화 메서드 명
  • DestroyMethodName: 빈의 생명주기가 끝나서 제거하기 직전에 호출되는 메서드 명
  • Constructor arguments, Properties: 의존관계 주입에서 사용한다. (자바 설정 처럼 팩토리 역할의
    빈을 사용하면 없음)

스프링컨테이너는 beanDefinition에서 bean을 생성하는데 필요한 정보들을 바탕으로 bean을 생성하게 된다.

0개의 댓글