ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] # 简介 ![](https://box.kancloud.cn/3255912919b6e29503da9650b6ced28d_945x415.png) 生成代理对象的过程也叫织入 ![](https://box.kancloud.cn/1bdfd7be8fa2b28975a3c83956f0b335_1379x749.png) # 目标对象target 指的是需要被增强的对象,由于spring aop是通过代理模式实现,从而这个对象永远是 被代理对象。 # 连接点(join point) 所谓连接点是指那些被拦截到的点,在spring中这些点指的是方法,因为spring只支持方法类型的连接点 # 切入点(pointcut) 表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方 简单说切入点是指我们要对哪些连接点进行拦截的定义 # 通知(advice) 所谓通知是指拦截到连接点之后所要做的事情就是通知,通知分为前置通知,后置通知,异常通知,最终通知,环绕通知 Advice 定义了在 pointcut 里面定义的程序点具体要做的操作 # 引介introduction 引介是一种特殊的通知,在不修改类代码的前提下,introduction可以在运行期为类动态地添加一些方法或属性 # 切面aspect 是切入点和通知的结合 # 织入weaving 织入是一个过程,是将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期,类装载期,运行期进行。 Spring采用动态织入,而aspectj采用静态织入 # 代理Proxy 一个类被AOP织入增强后,就产生一个结果代理类 # AOP底层实现 AOP分为静态AOP和动态AOP。静态AOP是指AspectJ实现的AOP,他是将切面代码直接编译到Java类文件中。动态AOP是指将切面代码进行动态织入实现的AOP。Spring的AOP为动态AOP,实现的技术为: JDK提供的动态代理技术 和 CGLIB(动态字节码增强技术) # JDK动态代理 在运行 ,在JVM内部动态生成class字节码对象(Class对象) **Jdk动态代理只针对于接口操作** ![](https://box.kancloud.cn/3bcfddca9ce33de38f69745da2e01a50_952x389.png) 第一个参数:目标类的类加载器对象 第二个参数:目标类的实现接口的Class[] 第三个参数:InvocationHandler它是一个接口,它的作用是是代理实例的调用处理程序 实现的接口,接口中定义了一个方法 ~~~ //在代理实例上处理方法调用并返回结果 object invoke(Object proxy, Method method, Object[] args) ~~~