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

简介: log()是系统日志,可以利用切面编程将他模块化,热插拔的插入到invoke方法周围             针对之前的代码,应该抽取黄色部分出来,并模块化         目标抽取成为一个参数 final ArrayList target=new Array...

img_e4d980970edb0be27d0fba1e1817f052.jpg

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

 

 

 

 

 

 

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

img_0fde7e5e2b93422cf81c0726f8b78fb6.jpg

 

 

 

 

目标抽取成为一个参数

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

开始做,坚持做,重复做
相关文章
|
8天前
|
监控 Java
动态代理为什么能称之为动态
动态代理为什么能称之为动态
9 0
|
16天前
|
存储 Java
java反射——设计框架的灵魂
java反射——设计框架的灵魂
|
5月前
|
设计模式 安全 Java
|
1月前
|
编译器 C++
【C++】—— 特殊类设计
【C++】—— 特殊类设计
|
3月前
|
设计模式 Java C++
C++之特殊类的设计
C++之特殊类的设计
9 0
|
4月前
|
设计模式 安全 编译器
C++特殊类设计
C++特殊类设计
|
6月前
|
设计模式 安全 Java
【C++】特殊类设计(下)
【C++】特殊类设计(下)
|
6月前
|
编译器 C++
【C++】特殊类设计(上)
【C++】特殊类设计(上)
|
8月前
|
存储 算法 Java
Java集合重点知识详解——优点以及内部继承关系
Java集合重点知识详解——优点以及内部继承关系
71 0
|
9月前
|
编译器
特殊类设计
特殊类设计
71 0