码迷,mamicode.com
首页 > 其他好文 > 详细

54_55总结分析动态代理类的设计原理与结构

时间:2015-02-05 20:08:11      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

log()是系统日志,可以利用切面编程将他模块化,热插拔的插入到invoke方法周围

 

 

 

 

 

 

针对之前的代码,应该抽取黄色部分出来,并模块化

技术分享

 

 

 

 

目标抽取成为一个参数

final ArrayList target=new ArrayList();
Collection proxy3 = (Collection) getProxy(target,new MyAdvice());

 

系统功能抽取成一个对象

public static Object getProxy(final Object target,final Advice advice) {
    Object proxy3 = Proxy.newProxyInstance(
            Collection.class.getClassLoader(), 
            new Class[]{Collection.class}, 
            new InvocationHandler(){
                @Override
                public Object invoke(Object proxy, Method method,
                        Object[] args) throws Throwable {
                    advice.beforeMethod(method);
                    Object reVal=method.invoke(target, args);
                    advice.afterMethod(method);
                    return reVal;
                }
            }
        );
    return proxy3;
}

 

通知接口--契约

package com.itcast.day3;

import java.lang.reflect.Method;

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

 

契约的实现--通常是上班时使用Spring aop 时,工作量最大的工作

package com.itcast.day3;

import java.lang.reflect.Method;

public class MyAdvice implements Advice {
    long beginTime=0;
    @Override
    public void beforeMethod(Method method) {
        beginTime=System.currentTimeMillis();
    }

    @Override
    public void afterMethod(Method method) {
        long endTime=System.currentTimeMillis();
        System.out.println(method.getName()+" running "+(endTime-beginTime));
    }
}

使用spring的aop时,只需干两件事

1 配置Advice

2 配置 target

54_55总结分析动态代理类的设计原理与结构

标签:

原文地址:http://www.cnblogs.com/qq-757617012/p/4275496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!