为什么要继承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
クラスを直接使用できます。それがあなたのコードで一度も使用されたことがない場合、誰かがインターネットからこの段落をコピーして、それが何に使用されたかを気にせずにプロジェクトに放り込んだことにとても満足している可能性はありますか?
(最後のものは完全に推測です。間違いがあればごめんなさい)