WeeklyStudy / spring

Spring Core Principles Study
0 stars 0 forks source link

ApplicationContext 의 부가기능은 어떠한 기능을 제공할까? #3

Open ddackkeun opened 1 year ago

ddackkeun commented 1 year ago

문제

해당 섹션에서 스프링 컨테이너의 종류인 BeanFactory 와 ApplicationContext 을 설명하며 BeanFactory를 확장하여 만든 ApplicationContext 가 가진 부가기능에 대해 간단하게 설명하였다. 따라서 강의에서 설명하지 않았던 ApplicationFactory의 부가기능에 대해서 알아보려고 한다.

관련 섹션

ddackkeun commented 1 year ago

스프링 빈(Bean)

스프링에서 제어권을 가지고 관리되는 객체로 스프링 프레임워크로부터 생성 및 의존관계를 부여받음

1. BeanFactory vs ApplicationContext

2. ApplicationContext 부가기능

2-1. EnvironmentCapable

  1. 프로파일 활성화 및 설정

    profile value 설정하여 빈을 등록하면 profile value로 빈들이 묶이게 되고, 활성화할 프로파일을 Environment 에서 선택하면 해당 프로파일을 가진 빈 묶음을 가져올 수 있음

    • @Profile 어노테이션 이용한 Bean 등록

      @Configuration
      @Profile("test")
      public class TestConfiguration {
      
              @Bean
          public BookRepository bookRepository() {
              return new TestBookRepository();
          }
      
      }
    • ConfigurableApplicationContext 등 ApplicationContext 에서 얻은 Environment 이용해 환경 설정

      @Component
      public class ProfileTestRunner implements ApplicationRunner {
          @Autowired
          ConfigurableApplicationContext ctx;       
      
          @Override
          public void run(ApplicationArguments args) throws Exception {
              ConfigurableEnvironment environment = ctx.getEnvironment();
              environment.setActiveProfiles("dev");       
              System.out.println(Arrays.toString(environment.getActiveProfiles()));
      }
    • @ActiveProfiles 어노테이션 이용한 프로파일 활성화

      @SpringBootTest
      @ActiveProfiles("test")
      class TestConfigurationTest { ...   }
  2. 프로퍼티 소스 설정 및 프로퍼티 값을 가져옴

    • 애플리케이션에 등록된 key-value 쌍의 프로퍼티들을 접근할 수 있도록 도움

      • getProperty() 메소드를 통해 프로퍼티 가져올 수 있음

        Environment environment = ctx.getEnvironment();
        environment.getProperty();
      • 프로퍼티의 종류는 구성파일(application.properties) 또는 운영체제나 JVM에서 넘겨 받는 프로퍼티 등

        -Dspring.profiles.active="test"

2-2. MessageSource

국제화 및 메시지 처리를 위한 인터페이스

2-3. ApplicationEventPublisher

스프링에서 이벤트 프로그래밍에 필요한 인터페이스 제공

2-4. ResourceLoader

자원(파일, 클래스 경로 등)을 로드하고 읽는 메서드를 제공

참고 자료