在学习 Spring 中,有一个很重要的内容就是 AOP,面向切面编程。
- 很多人疑惑为什么叫做面向切面?
- 切面是什么意思,切入点是什么意思?
下面我以一种通俗易懂的方式谈谈我的理解。
切面与切入点
切面 = 切入点 额外功能。
我们先从几何的角度出发,我们都知道点构成面,任何一个面都是由很多个点构成的,比如桌面是由很多个木头点构成的,而这些木头点都有相同的特性:他们都是木头,如果我们想给这些木头点加一些额外的功能,让他们都变成红色的,只需要用红色的油漆将桌子刷成红色,相当于我们给桌子上的所有的点应用了一个红色的切面,其中红色就是额外功能。
假如现在我们有 3 个类,UserServiceImpl
、OrderServiceImpl
、ProductServiceImpl
。
我们将他们类比成 3 个圆柱体:
- 首先在这些圆柱体上各取一个点:相当于各取类中的一个方法。
- 我们将这些点连起来,由此确定了一个平面:相当于将额外功能同时加到这几个方法上面。
- 这个连起来得到的平面就是切面,切面上的点都附加了额外功能。