Spring编程常见错误50例
傅健
Cisco高级软件工程师、Netty源码贡献者
新⼈⾸单¥59.9
1113 人已学习
课程目录
已更新 8 讲 / 共 28 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (1讲)
开篇词|贴心“保姆”Spring罢工了怎么办?
免费
Spring Core 篇 (7讲)
导读|5分钟轻松了解Spring基础知识
01|Spring Bean定义常见错误
02|Spring Bean依赖注入常见错误(上)
03|Spring Bean依赖注入常见错误(下)
04|Spring Bean生命周期常见错误
05|Spring AOP常见错误(上)
06|Spring AOP常见错误(下)
Spring编程常见错误50例
15
15
1.0x
00:00/00:00
登录|注册

06|Spring AOP常见错误(下)

傅健 2021-05-03
你好,我是傅健。
上一节课,我们介绍了 Spring AOP 常遇到的几个问题,通过具体的源码解析,相信你对 Spring AOP 的基本原理已经有所了解了。不过,AOP 毕竟是 Spring 的核心功能之一,不可能规避那零散的两三个问题就一劳永逸了。所以这节课,我们继续聊聊 Spring AOP 中还会有哪些易错点。实际上,当一个系统采用的切面越来越多时,因为执行顺序而导致的问题便会逐步暴露出来,下面我们就重点看一下。

案例 1:错乱混合不同类型的增强

还是沿用上节课的宿舍管理系统开发场景。
这里我们先回顾下,你就不用去翻代码了。这个宿舍管理系统保护了一个电费充值模块,它包含了一个负责电费充值的类 ElectricService,还有一个充电方法 charge():
@Service
public class ElectricService {
public void charge() throws Exception {
System.out.println("Electric charging ...");
}
}
为了在执行 charge() 之前,鉴定下调用者的权限,我们增加了针对于 Electric 的切面类 AopConfig,其中包含一个 @Before 增强。这里的增强没有做任何事情,仅仅是打印了一行日志,然后模拟执行权限校验功能(占用 1 秒钟)。
//省略 imports
@Aspect
@Service
@Slf4j
public class AspectService {
@Before("execution(* com.spring.puzzle.class6.example1.ElectricService.charge()) ")
public void checkAuthority(JoinPoint pjp) throws Throwable {
System.out.println("validating user authority");
Thread.sleep(1000);
}
}
执行后,我们得到以下 log,接着一切按照预期继续执行:
validating user authority
Electric charging ...
一段时间后,由于业务发展,ElectricService 中的 charge() 逻辑变得更加复杂了,我们需要仅仅针对 ElectricService 的 charge() 做性能统计。为了不影响原有的业务逻辑,我们在 AopConfig 中添加了另一个增强,代码更改后如下:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Spring编程常见错误50例》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥59.9
立即订阅
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
返回
顶部