在静态方法中使用Spring上下文

使用场景

  • 在某些工具类中需要使用Spring的ApplicationContext来获取相关的Bean来实现
  • 静态方法需要使用静态成员变量,而如果是静态的ApplicationContext没法通过@Autowired等注解注入进来

通过ApplicationContextAware获取ApplicationContext

ApplicationContextAwareSpring中提供的接口,实现该接口的类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;
    }
}

你可能感兴趣的:(在静态方法中使用Spring上下文)