1. AOP简介
要介绍面向切面编程(Aspect-Oriented Programming,AOP),需要读者
首先考虑这样一个场景:
公司有一个人力资源管理系统目前已经上线,但是系统运行不稳定,有时运行得很慢,为了检测出到底是哪个环节出问题了,开发人员想要监控每一个方法的执行时间,再根据这些执行时间判断出问题所在。当问题解决后,再把这些监控移除掉。
系统目前已经运行,如果手动修改系统中成千上万个方法,那么工作量未免太大,而且这些监控方法以后还要移除掉;如果能够在系统运行过程中动态添加代码,就能很好地解决这个需求。
这种在系统运行时动态添加代码的方式称为面向切面编程(AOP)。
Spring框架对AOP提供了很好的支持。在AOP中,有一些常见的概念需要读者了解。
- Joinpoint(连接点): 类里面可以被增强的方法即为连接点。例如,想修改哪个方法的功能,那么该方法就是一个连接点。
- Pointcut(切入点): 对Joinpoint进行拦截的定义即为切入点。例如,拦截所有以insert开始的方法,这个定义即为切入点。
- Advice(通知): 拦截到Joinpoint之后所要做的事情就是通知。例如,上文说到的打印日志监控。通知分为前置通知、后置通知、异常通知、最终通知和环绕通知。