Spring AOP源码学习-----JAVA动态代理与Spring AOP动态代理的关系

此处以JDK动态代理为例

JAVA动态代理有两大核心类,它们都在Java的反射包下(java.lang.reflect):

InvocationHandler

每一个代理实例都要有一个关联的InvocationHandler

方法:
Object invoke(Object proxy, Method method, Object[] args)
作用:用于方法调用的约束与增强

Proxy

作用:创建动态代理类及其实例

方法:
1.构造函数(设置代理实例的调用处理器)
Proxy(InvocationHandler h)
接受一个参数:接口InvocationHandler的实现
作用:用于设置代理实例的调用处理器

2.返回代理Class对象
Class<?> getProxyClass(ClassLoader loader, Class<?>… interfaces)

3.一个Object类型的代理类
Object newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler h)
在这里插入图片描述

静态内部类(生成静态代理类的Class对象):
ProxyClassFactory
主要操作:
用ProxyGenerator来生成字节码:ProxyGenerator.generateProxyClass(proxyName,interfaces, accessFlags)
根据二进制文件生成相应的Class实例:defineClass0(loader, proxyName, proxyClassFile, 0, proxyClassFile.length)

使用
1.定义目标类实现的接囗,定义目标类实现的接囗
2.自定义InvocationHandler,在invoke()方法中写自己对方法所做的增强
3.用自定义InvocationHandler的构建Proxy类,然后调用类方法newProxyInstance()生成代理类
在这里插入图片描述

Spring AOP在JAVA动态代理上所做的改造
1.将Proxy与自定义InvocationHandler合二为一,即类JdkDynamicAopProxy

2.Proxy调用newProxyInstance()方法生成代理类,JdkDynamicAopProxy调用getProxy()方法生成代理类(内部调用Proxy.newProxyInstance()方法)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值