前言
在springboot工程中,如果要在非spring管理的controller或者service中使用注入的bean时,是获取不了的。这时候就需要在bean加载的时候注入上下文路径,代码如下:
/**
* @author zzd
*/
@Component
@Lazy(false)
public class SpringContext implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
*/
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
/**
* 取得存储在静态变量中的ApplicationContext.
*/
public static ApplicationContext getApplicationContext() {
checkApplicationContext();
return applicationContext;
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
public static Object getBean(String name) {
checkApplicationContext();
return getApplicationContext().getBean(name);
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
public static <T> T getBean(Class<T> clazz) {
checkApplicationContext();
return getApplicationContext().getBean(clazz);
}
/**
* 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
*/
public static <T> T getBean(String name, Class<T> clazz) {
checkApplicationContext();
return getApplicationContext().getBean(name, clazz);
}
private static void checkApplicationContext() {
if (applicationContext == null) {
throw new RuntimeException("applicationContext注入失败");
}
}
}
使用方式不能使用autowried,使用方式如下:
RaqReportConfigMapper raqReportConfigMapper = SpringContext.getBean(RaqReportConfigMapper.class);
RaqReportConfig rconfig = raqReportConfigMapper.getInfoByFilename(filename);