动态代理的实现过程

定义被代理对象的接口和接口实现:

1 package com.xl;
2 public interface Book {
3
4     public void addBooks();
5 }

 1 package com.xl;
 2
 3 public class BookImpl implements Book {
 4
 5     @Override
 6     public void addBooks() {
 7         // TODO Auto-generated method stub
 8         System.out.println("the books add successfully!");
 9
10     }
11
12 }

定义代理器,实现InvocationHandler接口,定义私有变量和相应的构造函数,重写invoke方法,调用method对象的invoke方法,返回被代理对象:

 1 package com.xl;
 2 import java.lang.reflect.InvocationHandler;
 3 import java.lang.reflect.Method;
 4
 5
 6 public class bookproxy implements InvocationHandler {
 7
 8     private Object o;
 9
10     //构造函数
11     public bookproxy(Object o){
12         this.o = o;
13     }
14     @Override
15     public Object invoke(Object proxy, Method method, Object[] args)
16             throws Throwable {
17
18         Object rs;
19
20         System.out.println("方法调用前!");
21
22         rs = method.invoke(o);
23
24         System.out.println("方法调用后!");
25
26         return rs;
27     }
28
29 }

客户端的调用,创建被代理对象的实例给其接口来引用,创建代理器并将被代理对象传进去,给InvocationHandler来引用,创建代理对象实例,强制转换成被代理接口,最后调用代理对象实例的方法:

 1 package com.xl;
 2
 3 import java.lang.reflect.InvocationHandler;
 4 import java.lang.reflect.Proxy;
 5
 6 public class ProxyTest {
 7
 8     /**
 9      * @param args
10      */
11     public static void main(String[] args) {
12         // TODO Auto-generated method stub
13
14         Book b = new BookImpl();
15
16         InvocationHandler ih = new bookproxy(b);
17
18         Book bproxy = (Book) Proxy.newProxyInstance(b.getClass().getClassLoader(),
19                 b.getClass().getInterfaces(),
20                 ih);
21
22         bproxy.addBooks();
23     }
24
25 }

动态代理的实现过程

时间: 2024-10-10 08:21:53

动态代理的实现过程的相关文章

java动态代理的实现

动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程. 友情提示:本文略有难度,读者需具备代理模式相关基础知识,. 通常情况下,代理模式中的每一个代理类在编译之后都会生成一个class文件,代理类所实现的接口和所代理的方法都被固定,这种代理被称之为静态代理(Static Proxy).那么有没有一种机制能够让系统在运行时动态创建代理类?答案就是本文将要介绍的动态代理(Dynamic Proxy).动态代理是一种较

java动态代理原理及解析

代理:设计模式 代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 通过代理层这一中间层,有效的控制对于真实委托类对象的直接访问,同时可以实现自定义的控制策略(Spring的AOP机制),设计上获得更大的灵活性. java动态代理的类和接口(jdk1.6源码) 1,java.lang.reflect.Proxy:动态代理机制的主类,提供一组静态方法为一组接口动态的生成对

【设计模式】动态代理 && 模拟JDK动态代理

真正理解动态代理需要明白回答以下问题: 什么叫动态代理?怎么产生? 动态代理的作用?可配置的事务,权限控制,日志等等....只有你想不到,没有动态代理做不到. 下面来回答以上3个问题: 先说下静态代理: 方法:创建代理类,代理类包含被代理对象的方法并在被代理方法的前后加添加的方法. 创建代理类可以用继承接口或者聚合(implements)被代理对象的接口来实现,然后传入被代理对象的实例.其中聚合并继承好,使用继承的时候如果代理类需要嵌套代理类或者创建不同的代理类,需要创建不同的代理类.造成类泛滥

[Java5新特性] 动态代理

动态代理概述 代理模式是Java设计模式中的一种,其特征为代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.代理类与委托类之间通常存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现业务,而是通过调用委托类对象的相关方法来提供具体业务. 在Java中的java.lang.reflect包下提供了一个Proxy类和一个InvocationHandler接口,通过这个类和接口可以生成JDK动态代理或动态代理对

Java 动态代理机制分析及扩展,第 1 部分

引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对 Java 动态代理机制有更加深入的理解.本文首先从 Java 动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 回页首 代理:设计模式 代理是一种常用的设计

java静态代理与动态代理简单分析

原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5860749.html 1.动态代理(Dynamic Proxy) 代理分为静态代理和动态代理,静态代理是在编译时就将接口.实现类.代理类一股脑儿全部手动完成,但如果我们需要很多的代理,每一个都这么手动的去创建实属浪费时间,而且会有大量的重复代码,此时我们就可以采用动态代理,动态代理可以在程序运行期间根据需要动态的创建代理类及其实例,来完成具体的功能. 其实方法直接调用就可以完成功能,为什么

Java设计模式—Proxy动态代理模式

代理:设计模式 代理是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个对象的访问.代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理. 图 1. 代理模式 为了保持行为的一致性,代理类和委托类通常会实现相同的接口,所以在访问者看来两者没有丝毫的区别.通过代理类这中间一层,能有效控制对委托类对象的直接访问,也可以很好地隐藏和保护委托类对象,同时也为实施不同控制策略预留了空间,从而在设计上获得了更大的灵活性.Java 动态代理机制以巧妙的方式近乎完

动态代理之JDK Proxy浅析

反射:运行时动态实例化任何一个类. 看此文章前至少对JAVA反射有一定了解... Jdk动态代理的实现就是使用了反射机制,关键代码在Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h).可以看到该方法中的最后一个参数InvocationHandler,这是动态代理实现的另一个关键点. 直接上代码,接口.目标类.调用处理类: /** * @author longe * 目标类实现的

Java 动态代理机制分析及扩展

引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执行的过程中,开发人员还可以按需调整委托类对象及其功能,这是一套非常灵活有弹性的代理框架.通过阅读本文,读者将会对 Java 动态代理机制有更加深入的理解.本文首先从 Java 动态代理的运行机制和特点出发,对其代码进行了分析,推演了动态生成类的内部实现. 代理:设计模式 代理是一种常用的设计模式,其