为什么要继承ApplicationContextAware实现ApplicationContext的这些相关方法,感觉这些方法都在spring中有提供的啊,写这个SpringUtil.java工具类有什么用啊?在代码中也没有看到别的地方有对这个工具类的引用??
代码如下:
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext; //Spring应用上下文环境
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static Object getBean(String name) throws BeansException {
return applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> requiredType) {
return applicationContext.getBean(requiredType);
}
public static <T> T getBean(String name, Class<T> requiredType) throws BeansException {
return applicationContext.getBean(name, requiredType);
}
public static boolean containsBean(String name) {
return applicationContext.containsBean(name);
}
public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException {
return applicationContext.isSingleton(name);
}
@SuppressWarnings("rawtypes")
public static Class getType(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
}
public static String[] getAliases(String name) throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
}
}
Bean
인스턴스를 얻기 위한 툴 클래스이며 특별한 의미는 없습니다.Spring
컨테이너가 시작되면 자동으로 모든ApplicationContextAware
구현을 찾아ApplicationContext
속성을 삽입하므로SpringContextUtil
는 해당 이름을 기준으로Bean
인스턴스를 자유롭게 얻을 수 있습니다.Bean
인스턴스를 수동으로 가져와야 하는 경우SpringContextUtil
클래스를 직접 사용할 수 있습니다.귀하의 코드에서 한 번도 사용된 적이 없다면 누군가가 너무 기뻐서 이 단락을 인터넷에서 복사하여 그것이 무엇인지 신경쓰지 않고 프로젝트에 던졌을 가능성이 있습니까?
(마지막은 순전히 추측입니다. 틀린 부분이 있다면 죄송합니다)