Java反射调用Service导致Spring注入Dao失效的解决方案

问题发生背景:

原本打算做一个xml配置文件,写一个公用类然后根据读取配置反射动态调用方法。执行过程中,发现service中的dao为null,经过调查由于使用反射,导致dao注入失败。

//1.错误方法:通过反射执行service的方法
String serviceClass = templateInfo.getService();//service执行类的名称
String method = templateInfo.getMethod();//调用方法名
//根据反射执行保存操作
Class<?> classType = Class.forName(serviceClass);
Method m = classType.getDeclaredMethod(method,new Class[]{PageData.class});
m.invoke(classType.newInstance(),pd);


//2.解决方法:通过获取Spring容器取得对象:
WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); 
DivStattisTabService service = (DivStattisTabService) 
Class<?>  cls = wac.getBean("divstattistabService").getClass(); 
Method m = classType.getDeclaredMethod(method,new Class[]{PageData.class});
m.invoke(wac.getBean("divstattistabService"),pd);
//注:m.invoke方法第一个参数不能使用newInstance方法,否则Service中dao的注入失败,dao为null
收藏 (0)
评论列表
正在载入评论列表...
我是有底线的
为您推荐
    暂时没有数据