java 反射调用Service导致Spring注入Dao失效

来源:互联网 发布:mac 下载ipython 编辑:程序博客网 时间:2024/05/18 03:02

问题发生背景:
原本打算做一个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 0