您的位置:首页 > 编程语言 > Java开发

通过JDK proxy创建动态类,并查看其方法列表信息

2014-07-02 23:24 375 查看
package cn.cblue.aop;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collection;

/**
* @Description: 创建动态类,并查看其方法列表信息
* @author huangzjb cblue2013@126.com
* @Company Digital China
* @date 2014-7-2 下午11:12:25
* @version 1.0
*/

public class ProxyTest {

public static void main(String[] args) {

Class clazzProxy1 = Proxy.getProxyClass(Collection.class
.getClassLoader(), Collection.class);
System.out.println(clazzProxy1.getName());
System.out.println("--------begin constructor list------------");
Constructor[] constructors = clazzProxy1.getConstructors();

for (Constructor constructor : constructors) {
StringBuilder builder = new StringBuilder();
builder.append(constructor.getName());
builder.append("(");
Class[] clazzPrams = constructor.getParameterTypes();
for (Class clazz : clazzPrams) {
builder.append(clazz.getName());
}
if (clazzPrams != null && clazzPrams.length != 0) {
builder.deleteCharAt(builder.length() - 1);
}
builder.append(")");
System.out.println(builder);
}

System.out.println("--------begin method list------------");
Method[] methods = clazzProxy1.getMethods();

for (Method method : methods) {
StringBuilder builder = new StringBuilder();
builder.append(method.getName());
builder.append("(");
Class[] clazzPrams = method.getParameterTypes();
for (Class clazz : clazzPrams) {
builder.append(clazz.getName() + ",");
}
if (clazzPrams != null && clazzPrams.length != 0) {
builder.deleteCharAt(builder.length() - 1);
}
builder.append(")");
System.out.println(builder);
}

}
}


StringBuilder 和StringBuffer的区别:

不考虑线程同步的情况下使用StringBuilder,效率高。

考虑线程安全使用StringBuffer。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: