-
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