ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ApplicationContext와 ApplicationContextAware 이해하기
    Spring 2025. 8. 12. 18:44
    • ApplicationContext는 애플리케이션의 컴포넌트를 관리하고 제어하는데 핵심적인 역할을 한다.
    • ApplicationContext는 Spring 컨테이너의 인스턴스로, 애플리케이션의 빈 객체들을 생성, 관리, 제어하는 역할을 한다.
    • 빈(Bean)은 Spring에서 관리되는 객체로, IoC 컨테이너에 의해 생성되고 의존성 주입을 받을 수 있다.
    • ApplicationContext는 XML, Java 설정 클래스, 애노테이션 등을 통해 빈의 정의와 의존성을 설정할 수 있다.

    ApplicationContext 역할

    • 빈 객체의 생성과 소멸을 담당하며, 객체의 생명 주기를 제어할 수 있다. 객체의 초기화와 종료를 관리하여 애플리케이션의 안정성과 효율성을 증진시킨다.
    • 빈 객체 간의 의존성을 주입하여 객체 간의 결합도를 낮춘다.
    • 애플리케이션의 프로퍼티 설정과 환경 관리를 지원한다.
    • 애플리케이션의 리소스(파일, 데이터베이스 연결 등)를 관리하고 접근할 수 있는 기능을 제공한다.

    ApplicationContextAware

    Spring에서 ApplicationContextAware는 ApplicationContext를 직접 가져와서 Spring 컨테이너의 Bean을 동적으로 관리할 때 사용된다.

    • 스프링의 ApplicationContext를 주입받을 수 있는 인터페이스
    • ApplicationContext는 스프링의 모든 빈과 설정 정보를 관리하는 컨테이너
    • ApplicationContextAware를 구현한 클래스는 ApplicationContext를 직접 주입받을 수 있음

    빈이 ApplicationContextAware 인터페이스를 구현하면 빈 생성, 의존성 주입 후에 init() 메서드 실행 전 ApplicationContextAware.setApplicationContext() 메서드를 호출한다.

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;
    import org.springframework.stereotype.Component;
    
    @Component
    public class MyApplicationContextAware implements ApplicationContextAware {
        private static ApplicationContext context;
    
        @Override
        public void setApplicationContext(ApplicationContext applicationContext) {
            context = applicationContext;
        }
    
        public static Object getBean(String beanName) {
            return context.getBean(beanName);
        }
    }
    
    MyService myService = (MyService) MyApplicationContextAware.getBean("myService");

    위와 같이 ApplicationContext를 통해 특정 빈을 직접 가져올 수 있다.

    [번외]MessageSource

    Spring에서 MessageSource는 다국어 지원(국제화, i18n)을 위해 메시지를 관리하는 인터페이스이다.

    • 주로 message.properties 파일을 사용하여 다국어 지원을 할 때 활용된다.
    • ApplicationContext가 자동으로 MessageSource를 제공하기 때문에 직접 빈을 주입받아 사용할 수 있다.
    Spring Boot를 사용하는 경우에는 MessageSource가 자동으로 등록되기 때문에 등록하지 않아도 되고, Spring Boot를 사용하지 않는 경우에는 아래와 같이 설정파일에 MessageSource를 등록하라는 글이 많이 나온다.

     

    'Spring' 카테고리의 다른 글

    Jackson JSON ↔ DTO 직렬화·역직렬화  (0) 2025.08.12
    Spring Bean XML 설정 방법  (2) 2025.08.12
    @Component VS @Bean, @Component VS @Configuration  (0) 2022.10.04
    Tomcat 오류  (0) 2022.10.01
    IntellJ 에서 Github add 할 때 오류 처리  (0) 2022.09.30
Designed by Tistory.