有兩種方法:java
SpringApplication.run(MyApplication.class, args)
這句話的返回值就是一個ConfigurableApplicationContext
對象,直接用靜態變量把這個對象保存下來就能夠了。須要注意的是,SpringBoot只會掃描MyApplication.java所在包及其子包下的Component註解、Controller註解等。爲了不沒必要要的麻煩,必定要遵循「約定大於配置」原則,把MyApplication.java放在根包下。app
使用ApplicationContextAware的方式代碼以下:ide
@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); } }