Spring/Spring JPA
[JPA] ApplicationContextAware 간단하게
개발자잡
2024. 11. 16. 02:23
ApplicationContextAware는 스프링 프레임워크에서 제공하는 인터페이스로, 스프링 컨텍스트에 접근할 수 있도록 해주는 기능을 제공합니다. 이 인터페이스를 구현하면 스프링 컨테이너가 관리하는 ApplicationContext 객체를 직접 사용할 수 있게 됩니다. 이를 통해 애플리케이션 전반에서 스프링 컨텍스트의 구성 요소에 접근하거나 필요한 빈을 동적으로 가져오는 등의 작업이 가능해집니다.
주요 특징
- ApplicationContextAware 인터페이스를 구현한 클래스는 setApplicationContext(ApplicationContext applicationContext) 메서드를 오버라이딩해야 합니다.
- 이 메서드는 스프링이 해당 클래스를 컨테이너에 등록할 때 자동으로 호출되며, 스프링 컨텍스트의 참조가 전달됩니다.
- 이를 통해 특정 빈에 대한 접근, 환경 설정을 조회하거나, 빈의 동적 생성과 같은 작업을 수행할 수 있습니다.
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class MyBean implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
public void displayBeanInfo() {
// 특정 빈을 컨텍스트에서 가져오기
MyOtherBean myOtherBean = applicationContext.getBean(MyOtherBean.class);
System.out.println("Bean Name: " + myOtherBean.getName());
}
}
사용 사례
- 동적 빈 접근: ApplicationContextAware를 사용하면 빈을 런타임에 직접 가져올 수 있어 유연하게 빈 관리가 가능합니다.
- 컨텍스트 정보 활용: 스프링 환경 설정, 프로파일 정보 등 컨텍스트 전반에 대한 정보를 얻어 애플리케이션 전반에서 활용할 수 있습니다.
- 커스텀 로직 구현: ApplicationContext를 활용해 스프링의 기본 빈 관리 외에도 맞춤형 빈 생성을 구현할 때 유용합니다.
주의사항
- ApplicationContextAware는 스프링 컨텍스트에 직접 의존하므로, 스프링이 제공하는 DI(의존성 주입) 방식을 벗어난 특수한 접근이 필요할 때만 사용해야 합니다. 일반적으로는 필요 이상으로 의존성을 복잡하게 만들 수 있으므로 주의가 필요합니다.
- 빈의 직접 접근보다는 가능하면 의존성 주입(DI)을 통해 관리하는 방식이 권장됩니다. ApplicationContextAware는 특정 상황에서 컨텍스트 전체에 접근이 필요한 경우에만 선택적으로 사용되는 것이 좋습니다.