zoukankan      html  css  js  c++  java
  • 54_55总结分析动态代理类的设计原理与结构

    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

  • 相关阅读:
    大数据分析服务器硬件配置如何选择
    Laravel 在哪些地方使用了 trait ?
    PHP 中 Traits 的简单使用
    Laravel中Trait的用法实例详解
    Trait 概览
    Laravel trait 使用心得
    Laravel 5 项目部署到生产环境的实践
    Laravel 的 Events(事件) 及 Observers(观察者)
    Eloquent Observer 的小坑
    Ubuntu 网卡多个 IP 地址
  • 原文地址:https://www.cnblogs.com/qq-757617012/p/4275496.html
Copyright © 2011-2022 走看看