소소한 팁
Generic Methods를 통해 Spring Bean을 casting 없이 처리하는 Utility 클래스
생계형 개발자!
2020. 10. 27. 13:24
Generics를 사용하면 여러 개별적인 데이터 타입들을 아우르는 공통 기능을 손쉽게 만들 수 있다. 그 중에서 잘 사용되진 않지만 static 메소드에 파라미터의 타입을 통해 리턴 타입을 처리할 수 있는 generic method를 사용하면 객체가 아닌 메소드 수준에서 generics를 손쉽게 적용할 수 있다.
이를 활용하여 casting 없이 지정한 타입을 통해 바로 Spring Bean 객체를 얻어오는 유틸리티 클래스를 만들 수 있다.
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
synchronized (this) {
if (ApplicationContextHolder.applicationContext == null) {
ApplicationContextHolder.applicationContext = applicationContext;
}
}
}
public static <T> T getBean(Class<T> clazz) {
return applicationContext.getBean(clazz);
}
public static <T> T getBean(String qualifier, Class<T> clazz) {
return applicationContext.getBean(qualifier, clazz);
}
}