当一个类实现了这个接口(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接口​​实现