创建动态类及查看代理方法列表信息

代理(Proxy),这个词并不陌生,在我们生活的无处不在,理解他来说不是一个很难的问题。

例如:我们要去买一本Java书,或者买一些生活用品,都需要经过代理商。也可见代理在程序中的实际应用。

以前刚学的时候,确实有点不是很明白,林林散散,似懂非懂。今天又重新把它过滤了一遍。

先结合反射的例子,进入一个代理的入门,通过反射查看代理方表的列表信息,代码如下:

public class TestProxy {

public static void main(String[] args) throws Exception {
//通常用这个接口相同的类加载器,可以随便指定
Class clazzProxy1=Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
System.out.println(clazzProxy1.getName());
System.out.println("---------构造方法------------");
//看看他身上有没有构造方法
Constructor[] constructors=clazzProxy1.getConstructors();
for(Constructor con:constructors){
String name=con.getName();
//往字符串动态的添加字符,不考虑安全StringBuilder比StringBuffer效率高
StringBuilder sBuilder = new StringBuilder(name);
sBuilder.append('(');
Class[] clazzParams=con.getParameterTypes();
for(Class clazzParam:clazzParams){
sBuilder.append(clazzParam.getName()).append(",");
}
//删除最后一个","符号。
sBuilder.deleteCharAt((sBuilder.length())-1);
sBuilder.append(')');
System.out.println(sBuilder);
}
System.out.println("--------方  法--------");
//看看他身上有没有构造方法
Method[] methods=clazzProxy1.getMethods();
for(Method method:methods){
String name=method.getName();
StringBuilder sBuilder=new StringBuilder(name);
sBuilder.append('(');
Class[] clazzParams=method.getParameterTypes();
for(Class clazzParam:clazzParams){
sBuilder.append(clazzParam.getName());
}
if(clazzParams!= null&&clazzParams.length!=0)
sBuilder.deleteCharAt(sBuilder.length()-1);
sBuilder.append(')');
System.out.println(sBuilder.toString());
}
}
}

//通过反射得到代理的构造方法"$Proxy0(java.lang.reflect.InvocationHandler",和其它的一些方法列表,此处不一一列表。以后对他再更深入的学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值