您的位置:首页 > 其它

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

2011-12-18 01:05 218 查看
代理(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",和其它的一些方法列表,此处不一一列表。以后对他再更深入的学习。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: