1. 深入理解PointcutAdvisor:Spring AOP的核心组合器
在Spring AOP的实际开发中,我们经常会遇到这样的需求:需要在特定方法执行前后插入日志记录、权限检查或事务管理等横切关注点。PointcutAdvisor正是Spring为解决这类问题提供的标准化解决方案。它就像一位精准的狙击手,由Pointcut负责瞄准目标(确定拦截位置),Advice则决定使用什么武器(执行什么增强逻辑)。
1.1 核心组件解析
Pointcut(切入点) 的本质是一个过滤器,它通过ClassFilter和MethodMatcher两个核心接口实现双重过滤:
- ClassFilter:确定哪些类需要被代理
- MethodMatcher:确定类中的哪些方法需要被增强
java复制public interface Pointcut {
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
Advice(通知) 则定义了具体的增强行为,Spring提供了五种基础类型:
- Before Advice:方法执行前增强
- After Returning Advice:方法正常返回后增强
- After Throwing Advice:方法抛出异常后增强
- After (Finally) Advice:方法最终执行后增强(无论是否异常)
- Around Advice:环绕增强(最强大,可控制方法是否执行)
1.2 Advisor的架构设计
Advisor作为Pointcut和Advice的容器,其核心价值在于:
- 解耦:允许Pointcut和Advice独立变化
- 组合:支持不同匹配策略与增强逻辑的灵活搭配
- 扩展:为AOP框架提供统一的配置入口
Spring中Advisor的类层次结构如下:
code复制Advisor
└── PointcutAdvisor
├── DefaultPointcutAdvisor
└── AspectJExpressionPointcutAdvisor
提示:在Spring Boot的自动配置中,默认会使用AnnotationAwareAspectJAutoProxyCreator来处理所有Advisor,这也是为什么我们使用@Aspect注解就能自动生效的原因。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. AspectJExpressionPointcutAdvisor实战解析
2.1 表达式语法详解
AspectJ表达式是定义切入点的强大工具,其完整语法格式为:
code复制execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?name-pattern(param-pattern) throws-pattern?)
实际开发中最常用的简化形式:
java复制// 匹配com.example.service包下所有类的所有方法
execution(* com.example.service.*.*(..))
//
