企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
![](https://box.kancloud.cn/ba2b281c9fc99783b728561aa0fdba67_1860x828.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/fb46d479deaee92bdab898bc73084c11_1190x476.png) 第一个参数:目标类的类加载器对象 第二个参数:目标类的实现接口的Class[] 第三个参数:InvocationHandler它是一个接口,它的作用是是代理实例的调用处理程序 实现的接口,接口中定义了一个方法 ![](https://box.kancloud.cn/adc4078c845b4583e73d89fa509b4df7_906x98.png)