切面是切入点与通知的整合体,连接点是可拦截的执行位置,切入点是筛选规则,通知是具体增强逻辑,四者构成“定位—筛选—动作—封装”逻辑闭环。

理解切面、切入点、连接点和通知的逻辑闭环,关键在于抓住它们之间的“定位—筛选—动作—封装”链条:连接点是基础位置,切入点是筛选规则,通知是执行动作,切面是两者的整合体。四者不是并列概念,而是层层收敛、彼此依赖的关系。
连接点:所有可插针的“潜在位置”
连接点是程序运行中**客观存在的、能被AOP拦截的执行点**。在 Spring AOP 中,它特指方法执行(method execution)——类里每个 public 方法调用,不管是否被增强,都是一个连接点。
比如 UserService 有 save()、update()、delete() 三个方法,那就有三个连接点。它不带任何业务意图,只是 AOP 框架提供的“候选池”。
切入点:从连接点中“挑出要动的手”
切入点是一组**匹配表达式**,用来精准圈定哪些连接点真正需要被增强。它不是具体的方法,而是一条规则,例如:
- execution(* com.example.service.*.*(..)):匹配 service 包下所有类的所有方法
- @annotation(org.springframework.transaction.annotation.Transactional):只匹配加了 @Transactional 的方法
同一个连接点可能被多个切入点匹配,也可能完全不被匹配;但只要被匹配上,它就成为“生效的切入点实例”,也就是实际织入的位置。
overhang.js 是一款基于 jQuery 和 jQuery UI 的用于显示通知、确认、提示的插件,它以动画的方式从顶部滑出。overhang.js 提供了众多参数,你可以自定义通知的样式,回调函数也能够满足你的更多需求。
通知:在选中的位置上“干具体的事”
通知是增强逻辑的**具体实现**,本质就是一个普通方法,但被特定注解标记,明确其执行时机:
- @Before:方法执行前做日志、权限校验
- @AfterReturning:成功返回后记录结果
- @Around:最灵活,可控制是否执行原方法、修改参数或返回值
注意:通知本身不决定“在哪执行”,它只定义“做什么”和“什么时候做”(前置/后置等),真正决定“在哪做”的,是它绑定的切入点。
切面:把“在哪做”和“做什么”打包成一个可复用单元
切面 = 切入点 + 通知,是一个逻辑闭环的最小部署单位。它用 @Aspect 注解标识,通常是一个 Spring Bean:
- 一个切面可以包含多个切入点定义(@Pointcut)
- 一个切面可以绑定多个通知(@Before、@Around 等),分别作用于不同切入点
- 多个切面之间可通过 @Order 控制优先级,形成协作关系
没有切入点,通知就无处落脚;没有通知,切入点就是空规则;二者合起来,才构成可被 Spring 容器识别、织入、管理的切面。
这个闭环不靠代码调用维系,而是由 Spring AOP 在运行期通过代理机制自动完成:扫描切面 → 解析切入点表达式 → 匹配目标类方法(连接点)→ 在匹配点创建代理 → 按通知类型插入对应逻辑。整个过程对业务代码零侵入,又严丝合缝。










