Spring Framework의 핵심은 IoC Container이고 IoC Container는 Application Context로 칭할 수 있습니다. Spring Framework 자체인 Application Context는 org.springframework.context.ApplicationContextAware
인터페이스를 Bean이 구현함으로써 가져올 수 있습니다.
Spring Boot Application을 작성할 때 Autowire를 할 수 없는 상황에서 Bean을 호출해야 하는 경우 난감한 상태가 됩니다. 이를 위해서 Application Context를 Singleton Pattern을 적용하면 어느 위치에서든지 Application Context를 접근할 수 있다는 장점이 있습니다.
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * Application Context의 Singleton. */ @Component public class ApplicationContextHolder implements ApplicationContextAware { public static ApplicationContext applicationCont; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { ApplicationContextHolder.applicationCont = applicationContext; } public static ApplicationContext get() { return applicationCont; } }
IoC Container는 ApplicationContextHolder를 생성하게 되며, 이때 Application Context를 넘겨줍니다. 그러면 이 Application Context를 static으로 선언한 곳에 할당합니다. 이제 어느 위치에서든 다음과 같이 호출할 수 있습니다.
ApplicationContext context = ApplicationContextHolder.get(); UserRepository repository = context.getBean(UserRepository.class);