ApplicationContextAware接口用法小结
public class SpringApplicationContext implements ApplicationContextAware{
private static ApplicationContext CONTEXT= null;
/**
* 当ContextLoaderListener加载配置文件,创建Spring容器后,会将容器对象自动注入进来(就是自动调用下面的方法)
*/
@Override
public void setApplicationContext(ApplicationContext context) throws BeansException {
CONTEXT = context;
}
/**
* 检查ApplicationContext不为空.
*/
private static void assertContextInjected() {
Validate.isTrue(CONTEXT!=null,
"applicaitonContext属性未注入, 请在applicationContext.xml中定义SpringContextHolder.");
/**
* 相当于下面的用法
* if (CONTEXT == null) {
* throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
* }
*/
}
/**
* 获取ContextLoaderListener实例化的Spring容器对象
* @return
*/
public static ApplicationContext getApplicationContext() {
assertContextInjected();
return CONTEXT;
}
/**
* 根据Spring容器中bean的名称获取一个bean实例对象, 自动转型为所赋值对象的类型.
* @param name
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) {
assertContextInjected();
return (T) CONTEXT.getBean(name);
}
/**
* 根据Spring容器中bean的类型获取一个bean实例对象, 自动转型为所赋值对象的类型.
* @param requiredType
* @return
*/
public static <T> T getBean(Class<T> requiredType) {
assertContextInjected();
return (T) CONTEXT.getBeansOfType(requiredType);
}
/**
* 清除SpringContextHolder中的ApplicationContext为Null.
*/
public static void clearHolder() {
CONTEXT = null;
}
}