首先在項目中使用java反射調用java
//根據實例及參數名得到方法A
Method method = event.getObj().getClass() .getMethod(event.getMethodName(), event.getParamTypes()); if (null == method) { return; }
//反射調用A方法 method.invoke(event.getObj(), event.getParams());
上述方法能夠調用到 A方法,可是在A方法中使用到類中@Resource注入的接口爲null 沒法調用。 緣由是使用java反射是須要New 一個實例,致使類中的注入爲nullspring
因此不該該New實例而是從spring容器中去拿。以下spa
//獲取當前上下文環境,spring容器 WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext(); //獲取類實例 Class<?> cls = wac.getBean(event.getClassName()).getClass(); //獲取執行方法 //Method method = BeanUtils.findMethod(cls,event.getMethodName(),event.getParamTypes()); Method method = cls.getMethod(event.getMethodName(),event.getParamTypes()); //反射調用方法, method.invoke(wac.getBean(event.getClassName()),event.getParams());
同時須要注意code
一、傳入的類名應爲接口的實現類(serviceImpl)blog
二、 spring容器加載時是將當前類名首字母小寫存入,故傳入類名也應首字母小寫,不然會找不到。 或者在類的@Service註解中添加@Service("TestServcieImpl"),則傳入時和註解中內容對應便可接口