AOP概念和术语
-
Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。
比如我们关注的是service业务层面的一个方法上下做横切,对这个方法进行增强。这个方法的上面和下面就称为切面,这个方法就是我们关注的点.把我们关注的点形成模块。
-
Join point(连接点 ):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。
就是能把你要增强的内容插入的地方称为连接点。如:
-
Advice(通知):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
在链接点上插入的语句称为连接点,在这两个连接点插入1,2两条语句就称为通知
-
Pointcut(切入点 ):匹配连接点(Joinpoint)的断言。通知和一个【切入点表】达式关联,并在满足这个切入点的连接点上运行。 【切入点表达式如何和连接点匹配】是AOP的核心:Spring缺省使用AspectJ切入点语法。
切入点可以称为连接点的子集,连接点是说一个方法里面有哪些地方可以切入,而切入点是指真正切入的地方,如图,这里有两个点可以切入,而我可能只在连接2的位置切入,只在2的位置增强。2的位置就称为该方法的切入点。
-
Introduction(引入): Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
比如A实现了B接口,没有实现C,但是可以通过Spring,我们可以指定让A类的代理实现C接口,并且实现C接口的方法,这也属于一种增强
-
Target object(目标对象):被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(advised) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
-
AOP代理 AOP proxy: 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
-
Weaving(织入):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象,这个过程叫织入。 这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一样,在运行时完成织入。
简单理解就是把通知放在连接点上的过程叫做织入
总结:我们Spring容器通过切点表达式,匹配到对应的连接点,将对应的通知,织入到目标对象形成一个代理对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了