1.创建上下文工具类SpringContextUtil,具体内容如下:
private static ApplicationContext applicationContext;
//获取上下文
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
//设置上下文
public static void setApplicationContext(ApplicationContext applicationContext) {
SpringContextUtil.applicationContext = applicationContext;
}
//通过名字获取上下文中的bean
public static Object getBean(String name){
return applicationContext.getBean(name);
}
//通过类型获取上下文中的bean
public static Object getBean(Class<?> requiredType){
return applicationContext.getBean(requiredType);
}
2. 向applicationContext注入值
在springboot里的main方法中加入setApplicationContext即可。
public static void main(String[] args) {
ApplicationContext app = SpringApplication.run(XyeAgentApplication.class, args);
SpringContextUtil.setApplicationContext(app);
}
3. 测试
ApplicationContext atx = SpringContextUtil.getApplicationContext();
agentBillJobService = (IAgentBillJobService) atx.getBean("agentBillJobService");
通过getBean方法就可以获得接口对应的方法了。
4. 实现接口ApplicationContextAware获取上下文。
@Component public class SpringContextUtil implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { SpringContextUtil.applicationContext = applicationContext; } public static Object getBean(String name) { return applicationContext.getBean(name); } public static <T> T getBean(Class<T> clazz){ return applicationContext.getBean(clazz); } public static <T> T getBean(String name, Class<T> requiredType) { return applicationContext.getBean(name, requiredType); } public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static boolean isSingleton(String name) { return applicationContext.isSingleton(name); } public static Class<?> getType(String name) { return applicationContext.getType(name); } }