- 浏览: 20058 次
- 性别:
- 来自: 上海
最新评论
动态代理:即JAVA在运行时,动态的创建代理类。
使用动态代理,实现接口与实现类可以不直接发送联系,在运行期,实现动态的关联关系。
主要使用JAVA的反射技术,使用的接口InvocationHandler,代理类Proxy
具体实现的代码如下:
package com.mkf.pattern; public interface InterfaceOne { public void operation(); } package com.mkf.pattern.impl; import com.mkf.pattern.InterfaceOne; public class Source implements InterfaceOne { @Override public void operation() { System.out.println("源被调用:" + Source.class.getName()); } } package com.mkf.pattern.proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; public class DynamicProxy implements InvocationHandler { private Object sourceed; public DynamicProxy(Object sourceed) { super(); this.sourceed = sourceed; } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("代理对象" + proxy.getClass().getName()); Object result; result = method.invoke(this.sourceed, args); return result; } } package com.mkf; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; import com.mkf.pattern.InterfaceOne; import com.mkf.pattern.impl.Source; import com.mkf.pattern.proxy.DynamicProxy; public class TestDynamicProxy { /** * @param args */ public static void main(String[] args) { InterfaceOne io = new Source(); InvocationHandler iHandler = new DynamicProxy(io); //获得代理对象 Class<?> clazz = Proxy.getProxyClass(io.getClass().getClassLoader(), io.getClass().getInterfaces()); try { Constructor<?> c = clazz.getConstructor( new Class[]{InvocationHandler.class}); InterfaceOne ioOne = (InterfaceOne)c.newInstance(new Object[]{iHandler}); System.out.println("产生的动态代理对象 : " + ioOne.getClass().getName()); ioOne.operation(); } catch (Exception e) { } System.out.println("---------------------------------------------"); Object obj = Proxy.newProxyInstance(io.getClass().getClassLoader(), io.getClass().getInterfaces(), iHandler); System.out.println("获得源对象: " + obj); InterfaceOne ioOne = (InterfaceOne)obj; System.out.println("---------------------------------------------"); ioOne.operation(); System.out.println("---------------------------------------------"); iHandler = Proxy.getInvocationHandler(obj); System.out.println(iHandler.getClass().getName()); System.out.println(iHandler); } }
执行结果为:
产生的动态代理对象 : $Proxy0
代理对象$Proxy0
源被调用:com.mkf.pattern.impl.Source
---------------------------------------------
代理对象$Proxy0
获得源对象: com.mkf.pattern.impl.Source@10d448
---------------------------------------------
代理对象$Proxy0
源被调用:com.mkf.pattern.impl.Source
---------------------------------------------
com.mkf.pattern.proxy.DynamicProxy
com.mkf.pattern.proxy.DynamicProxy@e0e1c6
发表评论
-
责任链模式
2012-04-30 18:07 871责任链模式:即处理一个逻辑时,请求到一个对象A,对象A处理完毕 ... -
迭代模式
2012-04-08 19:22 788迭代模式: 此模式的思想是有一个数据集合 ... -
观察者模式
2012-04-08 15:23 753观察者模式:有观察者(Observer)和被观察者(Subje ... -
模板方法模式
2012-03-30 20:48 753模板方法模式:该模式主要思想是,通过抽象类(AbstractC ... -
策略模式
2012-03-30 20:27 686策略模式:主要思想就是,为某一件事情,根据不同的原因,产生不同 ... -
组合模式
2012-03-26 22:36 715组合模式:核心思想是解决树形结构,将一个复杂的对象简单化。典型 ... -
桥接模式
2012-03-26 22:34 815桥接模式:如果你了解JDBC的DriverManager设计思 ... -
外观模式
2012-03-26 22:31 745外观模式:其实就是对调用复杂的业务进行再一次封装,给客户一个简 ... -
代理模式
2012-03-26 22:25 700代理模式:即通过代理对象来执行被代理的对象。 代理对象拥有被 ... -
装饰器模式
2012-03-26 22:16 739装饰器模式:即客户端先调用的接口A,现在客户端需要在调用接口A ... -
适配器模式
2012-03-25 16:49 654适配器模式:客户端调用某一个类型 Adapter,该类型只有o ... -
原型模式
2012-03-25 15:58 721原型模式:有一个对象A,在不使用创建的情况下,得到一个与A一样 ... -
建造者模式
2012-03-25 14:56 672建造者模式:一般用来创建复杂对象,如:一个类型的对象 A 的属 ... -
单例模式
2012-03-25 14:05 328单例模式:即在全局范围内,某个类只允许存在一个实例。 ... -
工厂模式
2012-03-25 12:58 371工厂模式:即通过一个类进行创建同一类型的不同对象。 例 ...
相关推荐
1:静态代理出现的实际背景,静态代理时如何演化成动态代理 2: 动态代理demo 举例实际应用场景(载入数据库驱动的时候,使用AIDL与系统Servic进行通信) 3: 动态代理使用到基础理论:ClassLoader 加载.class字节码...
结合spring框架实现的动态代理代理,spring,Proxy
JDK动态代理,关于jdk动态代理的问题!详细的说明!JDK动态代理JDK动态代理
动态代理及其生成的代理类,可以反编译查看其类的结构。
动态代理设计模式 日志和源码 动态代理设计模式 日志和源码
通过动态代理,在单元格中添加spinbox,checkbox,combobox。
对jdk中的动态代理执行过程进行了详细跟踪,并反编译了动态代理调用自动生成的代理类,并对其进行了详细讲解。
jdk 的动态代理和CGLIB代理
spring之AOP(动态代理),包括jdk动态代理和CGLib动态代理
java静态代理 jdk动态代理 cglib动态代理 代理原理
动态代理是使用jdk的反射机制,创建对象的能力, 创建的是代理类的对象。 而不用你创建类文件。不用写java文件。 动态:在程序执行时,调用jdk提供的方法才能创建代理类的对象。jdk动态代理,必须有接口,目标类必须...
主要对Spring AOP的相关概念和简单的静态代理、动态代理以及常见的几种AOP配置方式做总结学习。主要包括:1. AOP的常见概念 2. 静态代理 3. jdk动态代理 4. Aspectj and Aspectjweaver 5. **aop-config** 6. CGLIB ...
动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理动态代理
Java实现动态代理的两种方式。 相对来说cglib更加方便。可以实现为实现接口的类(非final类)
java动态代理 public class HireProxy implements InvocationHandler { //被代理的真实角色 private Object obj; public HireProxy(Object obj) { super(); this.obj = obj; } //第二个参数method,被...
动态代理和静态代理demo
java动态代理 完整版 java动态代理 完整版 java动态代理 完整版 java动态代理 完整版 java动态代理 完整版
java代理机制 JDK动态代理和cglib代理 详解
java动态代理例子,这里面有两个例子,一个是jdk的动态代理,一个是cglib的动态代理,让你明白什么是动态代理,动态代理可以做什么。
JAVA静态代理和动态代理