欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Spring AOP的理解

Spring AOP的理解

2025/2/23 20:46:37 来源:https://blog.csdn.net/u011069294/article/details/144009067  浏览:    关键词:Spring AOP的理解

AOP(面向切面编程)它的核心思想是把那些在代码中重复出现,但又与业务逻辑无关的功能从业务逻辑中分离出来,集中管理,从而让代码更加清晰和易维护。

常用于日志记录、性能监控、权限校验等。

核心概念:

1.切点(Pointcut):定义在哪些地方插入逻辑。切点表达式

2.通知(Advice):定义插入逻辑时需要执行的具体操作,比如记录日志或处理事务。
前置通知(Before Advice):在目标方法执行之前运行。
后置通知(After Advice):在目标方法执行完成后运行(无论成功或异常)
环绕通知(Around Advice):在目标方法执行的前后都可以运行。
异常通知(After Throwing):在目标方法抛出异常之后运行
返回通知(After returning):在方法成功返回后运行(只在方法成功执行时触发)

Spring 4到5,通知的执行顺序发生了变化,记不住,直接查吧…

3.切面(Aspect):切点和通知的结合,描述了横切关注点的完整实现
什么是横切关注点?
横切关注点是指那些在代码中重复出现,但又与业务逻辑无关的功能

4.连接点:代码中AOP 框架能够插入额外逻辑的地方。比如方法的执行等

5.织入:将切面应用到目标对象的过程。可以再编译时或者运行时进行,动态代理和静态代理。

@Aspect // 标注为切面
public class LoggingAspect {// 切点和通知没有分开@Before("execution(* com.example.service.*.*(..))") // 切点:匹配 service 包下所有方法public void logBefore() {System.out.println("Before method execution");}@After("execution(* com.example.service.*.*(..))")public void logAfter() {System.out.println("After method execution");}
}@Aspect
public class MyAspect {// 定义切点:匹配 service 包下所有方法@Pointcut("execution(* com.example.service.*.*(..))")public void serviceLayer() { // 将切点与通知分开,便于复用}// 定义通知:在切点匹配的方法前执行日志@Before("serviceLayer()") // 直接用上面定义好的切点public void logBefore() {System.out.println("Method in service layer is about to execute.");}
}

Spring AOP和AspectJ的区别:
1.Spring AOP是基于动态代理实现的;AspectJ基于编译时增强或类加载时增强,通过修改字节码实现
2.Spring AOP 仅支持方法执行作为连接点;AspectJ 支持更多连接点,包括字段访问、构造函数调用和异常处理等
3.Spring AOP 的典型场景是为 Service 层的方法添加日志或事务管理;而 AspectJ 更适合增强第三方库的代码,比如增强字段访问或构造函数的行为

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词