proxy-动态代理深度学习

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一.相关类及其方法:

ng.reflect.Proxy,

Proxy 提供用于创建动态代理类和实例的静态方法.

newProxyInstance()

返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序

(详见api文档)

ng.reflect.InvocationHandler,

InvocationHandler 是代理实例的调用处理程序实现的接口。

invoke()

在代理实例上处理方法调用并返回结果。在与方法关联的代理实例上调用方法时,将在调用处理程序上调用此方法。

(详见api文档)

二.源代码:

被代理对象的接口及实现类:

package com.ml.test;

public interface Manager {

public void modify();

}

package com.ml.test;

public class ManagerImpl implements Manager {

@Override

public void modify() {

System.out.println("*******modify()方法被调用");

}

}

业务代理类:

package com.ml.test;

import ng.reflect.InvocationHandler;

import ng.reflect.Method;

public class BusinessHandler implements InvocationHandler { private Object object = null;

public BusinessHandler(Object object) {

this.object = object;

}

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

System.out.println("do something before method");

Object ret = method.invoke(this.object, args);

System.out.println("do something after method");

return ret;

}

}

客户端类:

package com.ml.test;

import ng.reflect.Proxy;

public class Client {

public static void main(String[] args) {

// 元对象(被代理对象)

ManagerImpl managerImpl = new ManagerImpl();

// 业务代理类

BusinessHandler securityHandler = new BusinessHandler(managerImpl); // 获得代理类($Proxy0 extends Proxy implements Manager)的实例.

Manager managerProxy = (Manager) Proxy.newProxyInstance(managerImpl .getClass().getClassLoader(), managerImpl.getClass()

.getInterfaces(), securityHandler);

managerProxy.modify();

}

}

三.执行结果:

do something before method

*******modify()方法被调用

do something after method

四.机制分析:

相关文档
最新文档