最近做项目用到定时任务,在设计的时候,考虑到每条job对应一个jobClass和jobMethod,会需要用到反射技术。
通过反射技术获取指定的方法,然后去执行。但是!!!在执行invoke方法的时候,一直报空指针异常,百度了一下午才找到解决方案。现在把解决方法分享给大家。
先看下代码:
首先是一个测试类:
@Test
public void test() {
String classBeanName = "com.bandweaver.tunnel.service.mam.measobj.MeasObjModuleCenter";
String targetMethod = "saveSOSchedule";
try {
Class> clazz = Class.forName(classBeanName);
Method method = clazz.getDeclaredMethod(targetMethod);
LogUtil.info("Get method : " + method);
method.setAccessible(true);
method.invoke(clazz.newInstance());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我的目的是要执行下面这个方法,代码不需要细看,你只需要知道我这个方法里需要用到@autowired注解去获取我需要的bean,这就是为什么报空指针的原因了。
/**SO
*
* @author shaosen
* @throws Exception
* @Date 2018年9月10日
*/
public void saveSOSchedule(){
//从缓存中获取数据,然后定时向对象表中更新数据,并同时保存到value表中
ListmeasObjSOs = getMeasObjSOs();
LogUtil.info("*******************************************************************");
LogUtil.info(&#