微信搜索【程序员囧辉】,关注这个坚持分享技术干货的程序员。
前言
之前用十几篇文章介绍了 Spring IoC 的源码,作为与 IoC 齐名的 AOP 自然也不能错过。同样的,接下去将会通过几篇文章来解析 Spring AOP 的源码。
如何将 Spring 源码导入 IDEA,请参考:Spring IoC源码学习:总览
注:本文的内容以 AspectJ 来进行介绍。
关于 AOP
百度百科:AOP 即 Aspect Oriented Programming,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 OOP 的延续,是软件开发中的一个热点,也是 Spring 框架中的一个重要内容,是函数式编程的一种衍生范型。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
例子
我们有两个接口,一个用于进行加法计算,一个用于进行减法计算,为了避免计算出现问题,我们需要对每次接口调用的入参进行日志记录,于是我们有了以下的第一版实现。
看起来还不错,简单明了。但是这个方案有个问题,就是后续每次新增一个接口,就需要拷贝一次 “记录入参” 的代码。对于一个 “懒人”,这是不可容忍的。好,提出一个公共方法,每个接口都来调用这个方法,于是我们有了以下第二版实现。这里有点切面的味道了。
这个方案看起来更好了,但是同还是存在问题,虽然不用每次都拷贝代码了,但是,每个接口总得要调用这个方法吧,有办法让