Java 切面(AOP)与注解总结
·
Java 切面(AOP)与注解总结
1. 什么是切面(Aspect)
切面是 AOP(面向切面编程) 的核心,用于封装跨越多个业务方法的公共逻辑,例如:
- 日志记录(logging)
- 权限校验(authorization)
- 事务管理(transaction)
- 异常处理(exception handling)
- 性能监控(monitoring)
这些逻辑本身 不属于业务核心,但会散落在很多地方,因此需要通过 AOP 抽取到一个独立模块,即 切面。
2. AOP 的核心概念
| 概念 | 说明 |
|---|---|
| 切面(Aspect) | 封装横切逻辑的类 |
| 通知(Advice) | 逻辑执行的时间点,如前置、后置、异常、环绕 |
| 切点(Pointcut) | 定义拦截哪些方法 |
| 连接点(JoinPoint) | 方法执行的某个时机 |
| 织入(Weaving) | 将切面逻辑注入业务代码的过程 |
3. 常见通知类型(Advice)
@Before:方法执行前@After:方法执行后(不管是否异常)@AfterReturning:方法成功返回后@AfterThrowing:方法抛异常时@Around:最强大,可控制方法执行前后、甚至阻断、修改返回值
4. 注解与切面的关系
注解 ≠ 切面
但:注解常用于触发切面逻辑。
注解作用
- 注解是“标记”
- 告诉 AOP:这个方法要启用对应切面逻辑
切面作用
- 切面是“逻辑”
- 用来实现注解背后的功能
5. 注解如何触发切面逻辑(示例)
自定义注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogOperation {
String value() default "";
}
编写切面
@Aspect
@Component
public class LogAspect {
@Before("@annotation(com.sky.annotation.LogOperation)")
public void recordLog() {
System.out.println("执行日志记录");
}
}
在业务方法使用注解
@LogOperation("新增分类")
public void addCategory() {}
AOP 会自动在方法执行前触发切面逻辑。
6. 为什么注解常和切面一起使用?
- 可读性强,不需要复杂的 execution 表达式
- 灵活,只需在方法上加注解即可
- 非侵入式,无需修改业务逻辑
- 大量 Spring 功能也基于 “注解 + AOP”:
@Transactional@Async@Cacheable@Validated
7. 总结一句话
注解是切面的入口,切面是注解背后的逻辑。
注解 = “标记方法”
切面 = “发现标记后执行的逻辑”
更多推荐
所有评论(0)