java 静态代理与动态代理(代理模式)
来源:互联网 发布:淘宝开店诈骗 编辑:程序博客网 时间:2024/06/10 09:04
因为对java的动态代理与静态代理整得不是特清楚,所以在这里以一个专题的形式对其进行深究:
一、代理模式是干啥的?
二、代理模式涉及到哪些具体角色呢?
实对象操作时,附加其他的操作,相当于对真实对象进行封装
三、静态代理示例
package com.javase.proxy;
public abstract class Subject {
}
package com.javase.proxy;
public class RealSubject extends Subject {
}
package com.javase.proxy;
public class ProxySubject extends Subject {
}
package com.javase.proxy;
public class Client {
}
以处理一些其他问题。
类的急剧膨胀;如果事先不知道真实角色,该如何来使用代理呢?这个问题可以使用Java动态代理类来解决。
四、动态代理
Java动态代理类位于java.lang.reflect包下,一般主要涉及到以下两个类
public Object invoke(Object obj,Method method,Object[] args)
在实际使用时,第一个参数obj一般指代理类,method是被代理的方法,如上例中的request()方法,args为该方法的参数数组。这个抽象方法在代理类中动态实现。
解说:用于创建动态代理类,它是动态代理类的父类。也就是说我们自己创建的动态代理类是Proxy类的一个子类。
每一个代理实例都会有一个与之关联的InvocationHandler实例,这个实例是存在代理这个对象内部的,这样的话才能实现关联。
protected Proxy(InvocationHandler h):构造函数,用于给内部的h赋值。
static Class getProxyClass(ClassLoader
static Object newProxyInstance(ClassLoader
声明的方法).
即返回一个真实对象。newProxyInstance()方法生成的是一个代理对象,这个代理对象可以模拟真实对象的操作。还可以增加自己的一些额外的一些操作。
所谓Dynamic Proxy是这样一种class:它是运行时生成的class,在生成时必须提供一个interface,(也就是说这些class是在运行时创建出来的,而并不是事先定义好的),然后该class就宣称它实现
了这些interface。你当然可以把该class的实例当作这些interface中的任何一个使用。
示例代码:
package com.javase.dynamicproxy;
public interface Subject {
}
package com.javase.dynamicproxy;
public class RealSubject implements Subject{
}
package com.javase.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class DynamicSubject implements InvocationHandler {
}
package com.javase.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Client {
}
注意:要想使用动态代理,两个必须要注意的地方:
法,就转移给invocationHandler去接管了,就转而去执行代理类中的invoke方法,由invoke方法真正的去完成实际的事情。
(Subject),这个对象它既不是RealSubject实例,也不是DynamicSubject实例。
例,那么生成的这个类,它有哪些特点呢,它实现了realSubject.getClass().getInterfaces() ,这些接口,即realSubject所实现的那些接口。realSubject实现了哪些接口呢,实现了Subject接口,生
成的那个类($Proxy0)就实现了realSubject实现的接口,因此就可以强制转换为接口类型。因此语句中的强制转换是没问题的。
- java 静态代理与动态代理(代理模式)
- java代理设计模式(静态代理与动态代理)
- 代理模式:静态代理与动态代理
- 【代理模式】静态代理与动态代理
- Java代理模式 静态代理 动态代理
- java代理模式之静态代理与动态代理
- Java代理模式(动态与静态)
- 代理模式(静态代理与动态代理)
- java代理模式的学习(动态代理+静态代理)
- 代理模式(静态代理+动态代理)——JAVA
- java的代理模式(动态代理和静态代理)
- 代理模式(静态代理和动态代理) JAVA
- Java代理之静态代理与动态代理(一)
- Java代理模式 静态代理,动态代理,Cglib代理
- Java代理模式及应用(二)静态代理与动态代理
- 静态代理与动态代理模式
- Java模式中的静态代理与动态代理
- java设计模式之静态代理与动态代理
- POJ 1484 Blowing Fuses(我的水题之路——我必须在心中牢记这次惨痛的教训)
- 学JAVA IO先学装饰模式
- POJ 1504 Adding Reversed Numbers(我的水题之路——逆向数高精度加法)
- C语言复习之结构体和指针
- 正则表达式实例
- java 静态代理与动态代理(代理模式)
- 关于JSF2.0的Resources
- web打印
- Linux中samba配置和windows映射Linux驱动盘
- 写在ACM之路之前
- 设计模式之原则
- 编程学习导图
- 因oracle用户密码包含特殊字符导致sqlplus无法正常登录问题
- 正则表达式图书