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

动态代理2

时间:2016-05-02 21:22:48      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

2. 动态代理作用

最终是学习AOP(面向切面编程),它与装饰者模式有点相似,它比装饰者模式还要灵活!

InvocationHandler

public Object invoke(Object proxy, Method method, Object[] args);

?

这个invoke()方法在什么时候被调用!

1. 在代理对象被创建时?错误的!

2. 在调用代理对象所实现接口中的方法时?正确的!

?

* Object proxy:当前对象,即被代理的对象!在调用谁的方法!

* Method method:当前被调用的方法(目标对象的方法)

* Object[] args:实参!

目标对象:被增强的对象

代理对象:需要目标对象,然后在目标对象上添加了增强后的对象!

目标方法:增强的内容

代理对象 = 目标对象 + 增强

?

实例:

文件说明: 1. 一个 Waiter 接口,里面有 server () 方法

???? 2. 实现 了 Waiter 接口 的 ManWaiter 类

???? 3. Test.java 类

1. Waiter.java 接口

// 服务员

public interface Waiter {

????// 服务

????public void serve();

}

?

2.ManWaiter.java 类, 实现了 Waiter 接口

?

//该类实现了 Waiter 接口

public class ManWaiter implements Waiter {

????public void serve() {

????????System.out.println("服务中...");

????}

}

?

3. Test.java 测试类

/**

* 我们必须要掌握的是当前这个案例!

*/

public class Demo2 {

????@Test

????public void fun1() {

????????Waiter manWaiter = new ManWaiter();//目标对象

????????/*

???????? * 给出三个参数,来创建方法,得到代理对象

???????? */

????????ClassLoader loader = this.getClass().getClassLoader();

????????Class[] interfaces = {Waiter.class};

????????InvocationHandler h = new WaiterInvocationHandler(manWaiter);//参数manWaiter表示目标对象

????????// 到代理对象,代理对象就是在目标对象的基础上进行了增强的对象!

????????Waiter waiterProxy = (Waiter)Proxy.newProxyInstance(loader, interfaces, h);

????????

????????waiterProxy.serve();//前面添加"您好", 后面添加"再见"

????}

}

?

//WaiterInvocationHandler 实现了 InvocationHandler 接口,并重写了 里面的 invoke() 方法

class WaiterInvocationHandler implements InvocationHandler {

????private Waiter waiter;//目标对象

????

????//提供 构造方法,为私有的目标对象 赋值

????public WaiterInvocationHandler(Waiter waiter) {

????????this.waiter = waiter;

????}

????

????public Object invoke(Object proxy, Method method, Object[] args)

????????????throws Throwable {

????????System.out.println("您好!");

????????this.waiter.serve();//调用目标对象的目标方法

????????System.out.println("再见!");

????????return null;

????}

}

?

运行结果:

技术分享

动态代理2

标签:

原文地址:http://www.cnblogs.com/Prozhu/p/5453087.html

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