티스토리 뷰

Spring

[Spring] 빈 설정 메타정보(BeanDefinition)와 다양한 종류의 Spring Application Context(스프링 애플리케이션 컨텍스트)

망나니개발자 2021. 11. 25. 10:00
반응형

우리가 알고있는 스프링의 애플리케이션 컨텍스트에는 다양한 구현체들이 존재하는데, 이번에는 어떠한 구현체들이 있는지 살펴보도록 하겠습니다. 아래의 내용은 토비의 스프링을 참고하여 정리한 내용입니다.

 

 

 

1. 빈 설정 메타정보(BeanDefinition)와 다양한 종류의 Spring Application Context(스프링 애플리케이션 컨텍스트)


[ 빈 설정 메타정보(BeanDefinition) ]

Spring과 관련된 설정을 하기 위한 방법으로는 XML과 Java로 하는 2가지 방법이 있고, 두 가지 방식을 혼용하여 사용하는 것 역시 가능하다. 그러한 이유는 Spring이 설정 메타정보를 BeanDefinition 인터페이스를 통해 관리하기 때문이다.

Spring Application Context(스프링 애플리케이션 컨텍스트)는 애플리케이션이 시작되면 BeanDefinitionReader라는 인터페이스의 구현체들을 통해 XML이나 Java, 프로퍼티 등으로 된 설정 정보들을 읽어 BeanDefinition 인터페이스의 객체로 설정 정보들을 관리한다. XML을 위해서는 XmlBeanDefinitionReader, Java 설정을 위해서는 AnnotationClassBeanDefinitionReader, Properties 설정을 위해서는 PropertiesBeanDefinitionReader 등이 각각 사용된다.

애플리케이션 컨텍스트는 이 객체들을 바탕으로 빈의 생성과 의존성 주입 등을 진행한다. 그래서 Spring의 메타정보는 특정 파일 포캣이나 형식에 제한되거나 종속되지 않는 것이다. 심지어는 RootBeanDefinition과 같은 BeanDefinition의 구현체를 직접 생성해서 등록해줄수도 있는데, 이러한 코드를 작성하면 다음과 같다.

    @Test
    public void registerBeanByBeanDefinition() {
        final StaticApplicationContext applicationContext = new StaticApplicationContext();
        final BeanDefinition beanDefinition = new RootBeanDefinition(MailRepository.class);
        applicationContext.registerBeanDefinition("mailRepository", beanDefinition);

        final MailRepository mailRepository = (MailRepository) applicationContext.getBean("mailRepository");
        assertThat(mailRepository).isNotNull();
        assertThat(mailRepository.existsByEmail("email")).isTrue();
    }

 

우리가 직접 ApplicationContext를 구현할 일은 없을 것이다. 하지만 그래도 어떠한 종류의 ApplicationContext 구현 클래스들이 있는지 살펴보고 넘어가도록 하자.

 

 

[ 다양한 종류의 Spring Application Context(스프링 애플리케이션 컨텍스트)]

StaticApplicationContext

빈 설정 메타정보를 담은 BeanDefinition 객체를 직접 만들고, 코드를 통해 IoC에 등록하기 위해 사용되는 구현체이다. StaticApplicationContext는 Spring의 기능에 대한 학습 테스트를 진행할 때를 제외하고 실제로 사용되지는 않는다. 나중에 스프링의 웹과 관련된 기능에 대해 학습 테스트를 작성하고 공부를 할 때에는 서브 클래스인 StaticWebApplicationContext를 사용할 수 있다.

 

GenericApplicationContext

가장 일반적인 구현 클래스로써 실무에서 사용될 모든 기능을 갖추고 있다. StaticApplicationContext와 달리 XML과 같이 외부에 있는 빈 설정 메타정보를 BeanDefinitionReader를 통해 읽어들여 BeanDefinition을 정의하기 위해 사용된다. BeanDefinitionReader의 대표적인 구현체로는 XmlBeanDefinitionReader, PropertiesBeanDefinitionReader 등이 있는데, GenericApplicationContext는 이러한 Reader들을 이용해 빈을 등록한다.

 

GenericXMLApplicationContext

코드 상에서 GenericApplicationContext를 사용하는 경우라면 XmlBeanDefinitionReader를 내장하고 있는 GenericXMLApplicationContext를 사용하면 편리하다. XML 파일로 설정을 만들고 애플리케이션 컨텍스트에서 XML을 읽어 사용하는 코드를 작성할 때 적당할 것 이다.

 

WebApplicationContext

Spring에서 가장 많이 사용되는 ApplicationContext로써 ApplicationContext를 확장한 인터페이스이다. WebApplicationContext는 웹 환경에서 사용할 때 필요한 기능이 추가되었다. 다른 컨텍스트와 마찬가지로 WebApplicationContext도 XML 설정을 사용하도록 구현된 WebXMLApplicationContext가 있다. 추가로 Java 애노테이션 설정을 이용하도록 구현된 AnnotationConfigWebApplicationContext도 있다.

 

 

 

 

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG more
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함