Spring利用反射調用接口

首先在項目中使用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"),則傳入時和註解中內容對應便可接口

相關文章
相關標籤/搜索