--------------- android培训、java培训、期待与您交流!---------------
之前看了视频,自己也跟着写了代码。稍微改了一下。
Advice.java:
import java.lang.reflect.Method;
public interface Advice {
public void beforeMethodLog(Method method);
public void afterMethodLog(Method method);
}
MyAdvice.java:
import java.lang.reflect.Method;
public class MyAdvice implements Advice {
@Override
public void beforeMethodLog(Method method) {
System.out.println(method.getName()+"在调用之前的日志!!");
System.out.println("jiao");
}
@Override
public void afterMethodLog(Method method) {
System.out.println(method.getName()+"在调用之后的日志!!");
}
}
MyProxyFactory.java:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//这是个代理类。为目标创建一个代理类的时候就用此类来调用。
public class MyProxyFactory implements InvocationHandler {
private Object target;
private Advice advice;
private static MyProxyFactory instance = new MyProxyFactory();
private MyProxyFactory(){
}
public static MyProxyFactory getInstance(){
return instance;
}
public Object createProxyInstance(Object target,Advice advice){//为目标类创建代理。
this.target = target;
this.advice = advice;
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
this);
}
@Override
public Object invoke(Object proxy, Method method, Object[]args)
throws Throwable {
Object result =null ;
advice.beforeMethodLog(method);//添加日志。
result = method.invoke(target, args);
advice.afterMethodLog(method);//添加日志。
return result;
}
}
测试类:MyProxyTest.java:
import java.util.ArrayList;
import java.util.Collection;
public class MyProxyTest {
/**
* @param args
*/
publicstatic void main(String[] args) {
ArrayListarray = new ArrayList();
Adviceadvice = new MyAdvice();
Collectionproxy = (Collection)MyProxyFactory.getInstance().createProxyInstance(array,advice);
proxy.add("xx");
proxy.add("yy");
proxy.add("zz");//这样就可以加入一些日志功能啊。
System.out.println(proxy.size());
}
}
--------------- android培训、java培训、期待与您交流!---------------