近期在编写自定义定时器代码时,发现当定时器执行到Job时,注入的mapper类总是为null,出现空指针异常,后期查看定时器代码看到:
Job类是经过反射生成的,所以类中Autowired的类为空,由此需要我们从spring容器中将已经生成mapper类取出直接使用。
编写BeanUtil类
@Component
public class BeanUtils implements ApplicationContextAware{
protected static Logger log = LoggerFactory.getLogger(BeanUtils.class);
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext){
if (BeanUtils.applicationContext == null){
BeanUtils.applicationContext = applicationContext;
}
}
/**
* 不使用注解和实现ApplicationContextAware时需要进行初始化
* @return
*/
// public static void initContext(ApplicationContext applicationContext){
// if (applicationContext == null){
// log.info("ApplicationContext is null");
// return;
// }
// BeanUtils.applicationContext = applicationContext;
// }
public static ApplicationContext getApplicationContext(){
return applicationContext;
}
public static Object getBean(String name){
return getApplicationContext().getBean(name);
}
public static <T> T getBean(Class<T> tClass){
return getApplicationContext().getBean(tClass);
}
public static <T> T getBean(String name, Class<T> tClass){
ApplicationContext applicationContext = getApplicationContext();
return applicationContext.getBean(name, tClass);
}
}
由此直接对要注入类进行getBean方法的调用即可;