SpringBoot获取ApplicationContext

有两种方法:

  • 创建Component实现ApplicationContextAware接口,SpringBoot会自动调用这个类的setApplicationConext()方法。鼓励使用这种方式。
  • SpringApplication.run(MyApplication.class, args)这句话的返回值就是一个ConfigurableApplicationContext对象,直接用静态变量把这个对象保存下来就可以了。

需要注意的是,SpringBoot只会扫描MyApplication.java所在包及其子包下的Component注解、Controller注解等。为了避免不必要的麻烦,一定要遵循“约定大于配置”原则,把MyApplication.java放在根包下。

使用ApplicationContextAware的方式代码如下:

@Component  
public class SpringUtil implements ApplicationContextAware {  
  
    private static ApplicationContext applicationContext = null;  
// 非@import显式注入,@Component是必须的,且该类必须与main同包或子包  
    // 若非同包或子包,则需手动import 注入,有没有@Component都一样  
    // 可复制到Test同包测试  
  
    @Override  
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {  
        if(SpringUtil.applicationContext == null){  
            SpringUtil.applicationContext  = applicationContext;  
        }  
        System.out.println("---------------com.ilex.jiutou.util.Test.Main.SubPackage.SpringUtil---------------");  
    }  
  
    //获取applicationContext  
    public static ApplicationContext getApplicationContext() {  
        return applicationContext;  
    }  
  
    //通过name获取 Bean.  
    public static Object getBean(String name){  
        return getApplicationContext().getBean(name);  
  
    }  
  
    //通过class获取Bean.  
    public static <T> T getBean(Class<T> clazz){  
        return getApplicationContext().getBean(clazz);  
    }  
  
    //通过name,以及Clazz返回指定的Bean  
    public static <T> T getBean(String name,Class<T> clazz){  
        return getApplicationContext().getBean(name, clazz);  
    }  
  
}  
原文地址:https://www.cnblogs.com/weiyinfu/p/7502039.html