当一个类实现了这个接口(ApplicationContextAware)之后,这个类就可以方便获得 ApplicationContext 中的所有bean。换句话说,就是这个类可以直接获取spring配置文件中,所有有引用到的bean对象
实现ApplicationContextAware方式
@Component
public class SpringContextUtils implements ApplicationContextAware {
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextService.applicationContext = (SpringContextService.applicationContext == null) ?
applicationContext : SpringContextService.applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name)
throws BeansException {
return (T) applicationContext.getBean(name);
}
public static <T> T getBean(Class<T> requiredType)
throws BeansException {
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);
}
public static Class getType(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.getType(name);
}
public static String[] getAliases(String name)
throws NoSuchBeanDefinitionException {
return applicationContext.getAliases(name);
}
}
在启动类中直接赋值
@SpringBootApplication
public class Application {
public static void main(String[] args) {
ApplicationContext applicationContext = SpringApplication.run(Application.class);
SpringContextUtils.setApplicationContext(applicationContext);
}
}
通过实现BeanFactoryAware接口实现