使用场景
- 在某些工具类中需要使用Spring的ApplicationContext来获取相关的Bean来实现
- 静态方法需要使用静态成员变量,而如果是静态的ApplicationContext没法通过@Autowired等注解注入进来
通过ApplicationContextAware获取ApplicationContext
ApplicationContextAware
Spring中提供的接口,实现该接口的类Spring将会把ApplicationContext
通过setApplicationContext
方法注入该类。
@Component
public class CxtDemo implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
在静态方法中使用
通过上述方法我们已经拿到ApplicationContext
,这样的话我们我们只需把类成员声明为static
就可以
@Component
public class CxtDemo implements ApplicationContextAware {
private static ApplicationContext applicationContext;
//静态方法
public static Object doSomethings(){
// you can use applicationContext here
...
}
// 提供获取方法
public static ApplicationContext applicationContext(){
return applicationContext;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}