java 监控反射调用_Java之反射调用

反射调用方法:

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.lang.StringUtils;

/**

*

*反射基类

* @ClassName: Inject

* Copyright 2018 中国外汇交易中心 All Rights Reserved

* @Description: TODO

* @author liuhanlin

* @date 2019年4月18日 下午4:13:58

*

*/

public class Inject {

/**

*获取主机IP地址

* @Title: getAdress

* @Description: TODO

* @param @param ip

* @param @param hostName

* @param @return

* @return String

* @throws

*/

public static String getAdress(String ip, String hostName){

if(StringUtils.isNotEmpty(ip) && StringUtils.isNotEmpty(hostName)){

return "ip:" + ip + "hostName:" + hostName;

}

return null;

}

/**

*获取所有score之和

* @Title: getScoreAll

* @Description: TODO

* @param @param eng

* @param @param cn

* @param @param math

* @param @return

* @return List

* @throws

*/

private static  List getScoreAll(Integer eng, Integer cn, Integer math){

List list = new ArrayList();

list.add(eng);

list.add(cn);

list.add(math);

if(list.size() >= 0){

return list;

}

return null;

}

}

public static void main(String[] args) {

Class cla = Inject.class;

try {

//            Method method = cla.getMethod("getAdress", new Class[]{String.class, String.class});

//            Object result = method.invoke(null, new Object[]{"192.168.120.102", "langhing"});

//Method method = cla.getMethod("getScoreAll", new Class[]{Integer.class, Integer.class, Integer.class});

Method declaredMethod = cla.getDeclaredMethod("getScoreAll", new Class[]{Integer.class, Integer.class, Integer.class});

//如果方法mul是私有的private方法,按照上面的方法去调用则会产生异常NoSuchMethodException,这时必须改变其访问属性

declaredMethod.setAccessible(true);//私有的方法通过发射可以修改其访问权限

//invoke 方法的第一个参数是被调用的对象,这里是静态方法故为null 若为静态则需要new一个对象【因为实例方法必须在一个对象上执行】,第二个参数为给将被调用的方法传入的参数

Object result = declaredMethod.invoke(null, new Object[]{85, 96, 88});

System.err.println("【静态方法反射调用】" + result);

} catch (Exception e) {

e.printStackTrace();

}

}

--------------------------------------------------------------------------------反射之第二阶段:packagecom.cfets.ts.u.fxdeal.util;public classReflectUtils {public voidgetSelectAll(String name1, String name2){

System.out.println(name1+":"+name2);

}public voidgetAll(){

System.out.println("无参数");

}public int getTotal(int m, intn){

System.out.println(m+":"+n);return m +n ;

}

}packagecom.cfets.ts.u.fxdeal.util;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;//测试类

public classMyReflect {public static void main(String[] args) throwsNoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {

Class cla = ReflectUtils.class;

Method[] methods=cla.getMethods();for (int i = 0; i < methods.length; i++) {if("getSelectAll".equals(methods[i].getName())){

methods[i].invoke(cla.newInstance(),"参与xx项目改造工作量", "1800+");

}if("getAll".equals(methods[i].getName())){

methods[i].invoke(cla.newInstance());

}if("getTotal".equals(methods[i].getName())){

Object obj= methods[i].invoke(cla.newInstance(), 500, 1000);

System.out.println((Integer)obj+"----------------");

}

}

}

}--------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值