JDK 动态代理

本文介绍了Java中的动态代理机制,包括Proxy类的使用、如何通过JDK实现接口的动态代理,以及InvocationHandler接口在代理逻辑中的关键作用。重点讲解了如何通过invoke方法对被代理对象的方法进行功能增强。
摘要由CSDN通过智能技术生成

1.1 概述

在代码执行前,没有代理类,代理类是在程序运行的时候动态生成,代理类而是通过JDK提供的Proxy类在程序运行时,运用反射机制动态创建的,无需程序员手工编写它的源代码。

1.1.1 特点

只能针对接口的实现类做代理对象,普通类是不能做代理对象的。与静态代理之间的区别,在于不用自己写代理类。

1.1.2 作用

动态代理可以为 “被代理对象” 的所有接口的所有方法做代理,动态代理可以在不改变方法源码的情况下,实现对方法功能的增强,被代理对象直接访问方法的拦截,原因就是对拦截的方法做增强。

1.2 API

Proxy类
  • java.lang.reflect.Proxy类提供了用于创建动态代理类和对象的静态方法

​ 它还是由这些方法创建的所有动态代理类的超类(代理类的父类是Proxy)。

public static Object newProxyInstance (ClassLoader loader, Class<?>[] interfaces,  InvocationHandler h ) 获取代理对象的方法 

- 返回值:该方法返回就是动态生成的代理对象
- 参数列表说明:
  1. ClassLoader loader 	- 定义代理类的类加载器
  2. Class<?>[] interfaces 	- 代理类要实现的接口列表,要求与被代理类的接口一样。
  3. InvocationHandler h 	- 就是具体实现代理逻辑的接口
    
	类加载器 = 被代理对象.getClass().getClassLoader();
	接口列表 = 被代理对象.getClass().getInterfaces();
	调用处理器 = new InvocationHandler(){   实现  invoke 方法 };
InvocationHandler接口

源码 :

interface InvocationHandler{
	public Object invoke(Object proxy, Method method, Object[] args);  //代理逻辑
}

java.lang.reflect.InvocationHandler是代理对象的实际处理代理逻辑的接口,具体代理实现逻辑在其 invoke 方法中。所有代理对象调用的方法,执行是都会经过invoke。因此如果要对某个方法进行代理增强,就可以在这个invoke方法中进行定义。

方法说明如下:

public Object invoke(Object proxy, Method method, Object[] args);
1. 返回值:方法被代理后执行的结果。
2. 参数列表:
   1. proxy  - 就是代理对象
   2. method - 代理对象调用的方法
   3. args   - 代理对象调用方法传入参数值的对象数组.
   该方法执行时机是,代理对象调用方法时触发执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值