在Spring AOP实践(一)中已经总结了一些基础知识。AOP作为OOP的补充,完整了编程实践的方式。虽然java以面向对象语言著称,但是也不能总是言必设计模式。面向对象设计的基本模块化单元是类,而AOP的基本模块化单元是切面(aspect)。
在Spring AOP实践(一)中讲到,AOP要解决的问题是“遇到某某情况,就做某某事”,放到AOP中就是预定好在某种情况下拦截某个方法,并且做什么事。如同代理一样,我们可以在方法执行前,或者执行后做一定的操作,或者是不去调用实际的方法而是从缓存返回,又或者遇到异常就做什么事情。其实这些都是编程中经常遇到的情况,所以才会有AOP。
上面所说的某种情况在AOP中就叫“切入点”(Join point),比如执行某个方法时,或者某类方法,或者某个异常等等。
被拦截后做的事情,叫做Advice,中文一般翻译为“通知”,这个翻译我有点不能理解,advice本意是建议,在AOP中,advice应该是拦住对方并建议做什么事的意思,有点“劝阻建言”的意思,翻译为通知则完全没有那个意境了。
切入点和Advice的集合就是一个切面,可以想象成一个滤网,滤网也是一个面,这个面拦在管道中间,通过的水流都必须先经过它。
Pointcut,可以理解为一个动词,“点切入”,定义了匹配一个接入点的表达式。