【重点:动态代理】创建一个类MyProxyManger调用getProxy即可以创建一个代理类

来源:互联网 发布:零基础学php要多久 编辑:程序博客网 时间:2024/06/05 11:16

代码实现

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 Test2 {public static void main(String[] args) throws Exception{Collection collection= (Collection) new MyProxyManger(new ArrayList(),new MyAdvice()).getProxy();collection.add("xiaozhi");collection.add("xiaozhi");collection.remove("xiaozhi");collection.size();}}class MyProxyManger{private Object target;private Advice advice;public MyProxyManger(Object target, Advice advice) {super();this.target = target;this.advice = advice;}public  Object getProxy() {return  Proxy.newProxyInstance(target.getClass().getClassLoader(),target.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {advice.beforeMehotd();System.out.println(method.getName());Object object=method.invoke(target, args);advice.afterMehotd();return object;}});}}

Advice

public interface Advice {public abstract void beforeMehotd();public abstract void afterMehotd();}

MyAdvice

public class MyAdvice implements Advice {@Overridepublic void beforeMehotd() {System.out.println("-----------------我是方法前调用的!-----------------");}@Overridepublic void afterMehotd() {System.out.println("-----------------我是方法后调用的!-----------------");}}

运行结果


0 0