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。