java代理课程测试 spring AOP代理简单测试(二)

2014-11-24 08:34:23 · 作者: · 浏览: 1
ble {
return null;
}
} );
//创建实例 方式3===================================
Collection proxy3=(Collection) Proxy.newProxyInstance(
//类加载器
Collection.class.getClassLoader(),
// 参数数内型
new Class[]{Collection.class},
//参数值
new InvocationHandler(){
/**
* proxy 代理的对象
* method 代理对象的那个方法
* args 方法中传入的参数
*/
ArrayList target=new ArrayList();
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Long startTime= System.currentTimeMillis();
//方法调用 参数 目标对象和参数
Object obj=method.invoke(target, args);
Long endTime= System.currentTimeMillis();
System.out.println(method.getName()+"runTime of 用时:"+(endTime=startTime));
//死循环
// return method.invoke(proxy,args);
//返回对象
return obj;
}}
);
proxy3.add("aaaa");
proxy3.add("bbbb");
proxy3.add("ccccc");
// System.out.println(proxy3.size());
}
}
进一步加强代码
[java]
package com.proxyTest;
import java.lang.reflect.Method;
/**
* 通知接口
* @author liangrui
*
*/
public interface Advice {
public void beforeMethod(Method m);//开始方法
public void afterMethod(Method m);//结束方法
//异常方法,前后方法 省略
}
[java]
package com.proxyTest;
import java.lang.reflect.Method;
/**
* 实现自已的处理功能对象
* @author liangrui
*
*/
public class Myadvice implements Advice {
Long startTime=null;
@Override
public void beforeMethod(Method m) {
System.out.println("欢迎来到代理处理对象 开始方法");
startTime= System.currentTimeMillis();
}
@Override
public void afterMethod(Method m) {
System.out.println("欢迎来到代理处理对象 执行之后处理的方法");
Long endTime= System.currentTimeMillis();
System.out.println(m.getName()+"runTime of 用时:"+(endTime=startTime));
}
}
[java]
package com.proxyTest;
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 ProxyTests {
public static void main(String[] args) {
ArrayList target=new ArrayList();//代理目标对象
//获取代理 对象
Collection coll=(Collection) getProxy(target,new Myadvice());
/**
* 每次在执行自已方法的同时
* 都会执行自定义对象(MyAdi vce)功能来进行处理
*/
coll.add("开始工作");
System.out.println("\n---------------处理一个OK--------------------");
coll.add("开始工作3");
System.out.println("\n---------------处理一个OK--------------------");
coll.add("开始工作2");
System.out.println("\n---------------处理一个OK-------------