`
lvwenwen
  • 浏览: 933181 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

spring动态代理

阅读更多

 

package cn.itcast.day3;

import java.lang.reflect.Method;

public interface Advice {
	void beforeMethod(Method method);
	void afterMethod(Method method);
}

package cn.itcast.day3;

import java.lang.reflect.Method;

public class MyAdvice implements Advice {
	long beginTime = 0;
	public void afterMethod(Method method) {
		// TODO Auto-generated method stub
		System.out.println("从传智播客毕业上班啦!");		
		long endTime = System.currentTimeMillis();
		System.out.println(method.getName() + " running time of " + (endTime - beginTime));

	}

	public void beforeMethod(Method method) {
		// TODO Auto-generated method stub
		System.out.println("到传智播客来学习啦!");
		beginTime = System.currentTimeMillis();
	}

}

package cn.itcast.day3;

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

public class ProxyTest {

	/**
	 * @param args
	 */
	@SuppressWarnings("unchecked")
	public static void main(String[] args) {
//		Class clazzProxy1 = Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);
//		System.out.println(clazzProxy1.getName());
//		
//		System.out.println("----------begin constructors list----------");
//		/*$Proxy0()
//		$Proxy0(InvocationHandler,int)*/
//		Constructor[] constructors = clazzProxy1.getConstructors();
//		for(Constructor constructor : constructors){
//			String name = constructor.getName();
//			StringBuilder sBuilder = new StringBuilder(name);
//			sBuilder.append('(');
//			Class[] clazzParams = constructor.getParameterTypes();
//			for(Class clazzParam : clazzParams){
//				sBuilder.append(clazzParam.getName()).append(',');
//			}
//			if(clazzParams!=null && clazzParams.length != 0)
//				sBuilder.deleteCharAt(sBuilder.length()-1);
//			sBuilder.append(')');
//			System.out.println(sBuilder.toString());			
//		}
//
//		System.out.println("----------begin methods list----------");
//		/*$Proxy0()
//		$Proxy0(InvocationHandler,int)*/
//		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()).append(',');
//			}
//			if(clazzParams!=null && clazzParams.length != 0)
//				sBuilder.deleteCharAt(sBuilder.length()-1);
//			sBuilder.append(')');
//			System.out.println(sBuilder.toString());			
//		}
//		
//		System.out.println("----------begin create instance object----------");
//		//Object obj = clazzProxy1.newInstance();
//		Constructor constructor = clazzProxy1.getConstructor(InvocationHandler.class);
//		class MyInvocationHander1 implements InvocationHandler{
//
//			public Object invoke(Object proxy, Method method, Object[] args)
//					throws Throwable {
//				// TODO Auto-generated method stub
//				return null;
//			}
//		
//		}
//		Collection proxy1 = (Collection)constructor.newInstance(new MyInvocationHander1());
//		
//		System.out.println(proxy1);
//		proxy1.clear();
//		//proxy1.size();
//		//System.out.println("111111111111111");
//		
//		Collection proxy2 = (Collection)constructor.newInstance(new InvocationHandler(){
//
//			public Object invoke(Object proxy, Method method, Object[] args)
//					throws Throwable {
//				return null;
//			}
//			
//		});
 		//动态代理
		final ArrayList target = new ArrayList();			
		Collection proxy3 = (Collection)getProxy(target,new MyAdvice());
		proxy3.add("zxx");
		proxy3.add("lhm");
		proxy3.add("bxd");
		//System.out.println(proxy3.size());
		//System.out.println(proxy3.getClass().getName());
 }
//把目标抽取成参数
	private static Object getProxy(final Object target,final Advice advice) {
		Object proxy3 = Proxy.newProxyInstance(
				target.getClass().getClassLoader(),
				/*new Class[]{Collection.class},*/
				target.getClass().getInterfaces(),
				new InvocationHandler(){
					public Object invoke(Object proxy, Method method, Object[] args)
							throws Throwable {
						advice.beforeMethod(method);
						Object retVal = method.invoke(target, args);
						advice.afterMethod(method);
						return retVal;						
					}
				}
				);
		return proxy3;
	}
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics