package com.jackrain.nea.dm.common;
import com.jackrain.nea.web.query.QuerySession;
import lombok.extern.slf4j.Slf4j;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author wangQiang
* @date 2019/8/1 11:20
* @Description 根据具体类的路径调用实现类的方法
*/
@Slf4j
public class InvokeUtils {
/**
* 根据具体类路径 调用实现的方法
* #####注:现在只支持实现类内只能有一个方法
*
* @param classPath 类具体路径
* @param session
* @return
*/
public static Object invokeMethod(String classPath, QuerySession session) {
Object invoke = null;
try {
log.debug("调用**InvokeUtils.invokeMethod**反射方法 ----类路径为:{},参数为:{}", classPath, session);
//获取class 实例
Object object = Class.forName(classPath).newInstance();
//获取方法
Method[] declaredMethods = Class.forName(classPath).getDeclaredMethods();
Method method = null;
for (int i = 0; i < declaredMethods.length; i++) {
method = declaredMethods[i];
}
log.debug("反射的方法为--{}", method);
//传入实例和参数
invoke = method.invoke(object, session);
log.debug("执行**{}**方法入参为:{},{},返回结果为---{}", method.getName(), object, session, invoke);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return invoke;
}
}