通过实现 ApplicationContextAware 接口获取 Spring 上下文
当一个类实现了 ApplicationContextAware 接口之后,这个类就可以方便地获得 ApplicationContext 对象(Spring 上下文)。
Spring 容器在创建 Bean 之后,发现 Bean 实现了 ApplicationContextAware 接口,会自动调用该 Bean 的 setApplicationContext 方法,调用该方法时,会将容器本身(ApplicationContext 对象)作为参数传递给该方法。
案例
封装一个 ApplicationContextUtil,方便从 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 ApplicationContextUtil implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static ApplicationContext getApplicationContext(){
return context;
}
/**
* 通过 name 获取 Bean
* @param name beanName
* @return Object
*/
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> requiredType) throws BeansException{
return getApplicationContext().getBean(requiredType);
}
}