通過JDK proxy創建動態類,並查看其方法列表信息

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 [email protected]
 * @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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章