动态代理:
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。
在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用
动态代理步骤
1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法且得有保存被代理对象实例的变量
Pubic Object invoke(Class proxy,Method method,Object []args){
…
method.invoke(被代理的对象实例,args)
}
2.
创建被代理的类以及接口
3.通过Proxy的静态方法
newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 创建一个代理
4.通过代理调用方法
//代理处理器
/**
* 该代理类的内部属性为Object类,实际使用时通过该类的构造函数DynamicSubject(Object obj)对其赋值;
* 此外,在该类还实现了invoke方法,该方法中的 method.invoke(sub,args);
* 其实就是调用被代理对象的将要被执行的方法,方法参数sub是实际的被代理对象,
* args为执行被代理对象相应操作所需的参数。
* 通过动态代理类,我们可以在调用之前或之后执行一些相关操作
*/
public class DynamicSubject implements InvocationHandler
{
/**
每个代码实例都具有一个关联的调用处理程序。对代理实例调用方法时,将 对方法调用进行编码并将其指派到它的调用处理程序的 invoke 方法。
*/
private Object sub;
public DynamicSubject()
{
}
public DynamicSubject(Object obj)
{
sub = obj;
}
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
{
System.out.println("before calling " + method);
method.invoke(sub, args);
if(proxy instanceOf Subject){
System.out.println("代理对象是Subject类型!");//本条语句可以打印
}
System.out.println("after calling " + method);
return null;
}
}
//被代理对象实现得接口
public interface Subject
{
abstract public void request();
}
//被代理的对象
public class RealSubject implements Subject
{
public RealSubject()
{
}
public void request()
{
System.out.println("From real subject.");
}
}
//客户端
public class Client
{
static public void main(String[] args) throws Throwable
{
RealSubject rs = new RealSubject(); // 在这里指定被代理类
InvocationHandler ds = new DynamicSubject(rs);
Class<?> cls = rs.getClass();
// 以下是一次性生成代理 返回一个指定接口的代理类实例
Subject subject = (Subject) Proxy.newProxyInstance(
cls.getClassLoader(), cls.getInterfaces(), ds);
subject.request();
}
}
分享到:
相关推荐
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静态代理和动态代理