Spring AOP

本文详细介绍了面向切面编程(AOP)的概念与优势,包括如何通过AOP减少代码冗余并实现业务逻辑的横向扩展。文章还探讨了两种主要的代理框架AspectJ和SpringAOP的区别,以及JDK动态代理和CGLIB的使用场景。此外,文中还解释了@Before、@AfterReturn、@AfterThrowing、@After和@Around等注解的功能与差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AOP是面向对象编程的一种补充。面向对象是对现实场景进行自上而下的抽象和建模,最小粒度是对象,至于对象内部则无能为力,AOP可以深入对象内部,具体来说是方法内部进行监控。
使用AOP好处:
(1)将与具体业务无关的公共行为封装成独立模块,并影响业务类,最大限度减少代码重复冗余
(2)AOP在不干扰具体业务逻辑的基础上实现业务需求横向扩展,比如监控系统所有接口方法的调用时间、入参/监控所有接口方法的执行时间/事物实现/日志实现

1、 代理框架:AspectJ、Spring AOP
(1) AspectJ:一套独立的面向切面编程的解决方案,编译时对目标类进行增强
(2) Spring AOP:运行时生成目标类的代理类
(3) Spring AOP与AspectJ关系:Spring AOP使用了AspectJ的Annotation。使用了Aspect来定义切面,使用Pointcut来定义切入点,使用Advice来定义增强处理。虽然使用了Aspect的Annotation,但是并没有使用它的编译器和织入器

2、 代理方式:JDK 动态代理、CGLIB
(1) JDK动态代理:代理类和实际类必须实现同一个接口,动态创建代理类
如何配置:
(2) CGLIB:代理类是实际类的子类,动态创建代理类
如何配置:
(3) Spring AOP默认使用JDK动态代理

3、 Spring Aop中 : before after afterReturn after Throwing around 的原理及区别
@Before是在方法被调用之前执行
@AfterReturn是在方法被调用后,return之前
@AfterThrowing是在方法被调用发生异常时
@After是在方法被调用后,return之后
@Around可以灵活控制使用:(1)实现方法失败重调;(2)统计方法执行时间

4、 AOP实践
(1)依赖jar包:
aspectjrt.jar,
aspectjweaver.jar,
aspectj.jar,
aopalliance.jar
(2)注解方式:declaring aspects as regular Java classes annotated with Java 5 annotations
具体步骤:
在spring配置文件中声明
定义带有@Aspect注解的 java类
这里写图片描述
(3)xml方式:@Aspect、@Pointcut、@Before等均定义在xml中
具体步骤:
在Spring配置文件中声明
这里写图片描述
定义不带有@Aspect注解的java类
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值