- public class Fanshe1 {
- public static void main(String[] args) throws InstantiationException,
- IllegalAccessException {
- ArrayList taget = new ArrayList();
- Collection proxy4 = (Collection) getProxy(taget, new Advice());
- proxy4.add("cxl");
- proxy4.add("zzz");
- System.out.println(proxy4.size());
- // 结果打印三对方法,是因为,集合每使用一次proxy4对象的时候都从进入InvocationHandler对象一次
- }
- public static Object getProxy(final ArrayList taget, final Advice advice)
- throws InstantiationException, IllegalAccessException {
- // 先获取该类的字节码文件,再获取该类的类加载器
- // 然后获取接口的字节码文件
- // 最后调用处理的程序,通过InvocationHandler
- Object className = Proxy.newProxyInstance(taget.getClass()
- .getClassLoader(), taget.getClass().getInterfaces(),
- new InvocationHandler() {
- @Override
- // 传入代理对象、对象的方法、对象的参数
- public Object invoke(Object proxy, Method method,
- Object[] args) throws Throwable {
- // 放入代理对象方法的上面和下面
- advice.look();
- // invoke.使用taget的对象的args方法
- Object result = method.invoke(taget, args);
- advice.show();
- return result;
- }
- });
- return className;
- }
- }
复制代码 有点不明白,张老师说的,invoke方法,客户端的调用代理,使用方法的时候,每使用一次都会调用invoke方法是什么意思?
|
|