Spring AOP实践(三)基础篇上

来源:互联网 发布:高德地图js定位 编辑:程序博客网 时间:2024/05/08 21:13

在Spring AOP实践(一)中已经总结了一些基础知识。AOP作为OOP的补充,完整了编程实践的方式。虽然java以面向对象语言著称,但是也不能总是言必设计模式。面向对象设计的基本模块化单元是类,而AOP的基本模块化单元是切面(aspect)。

在Spring AOP实践(一)中讲到,AOP要解决的问题是“遇到某某情况,就做某某事”,放到AOP中就是预定好在某种情况下拦截某个方法,并且做什么事。如同代理一样,我们可以在方法执行前,或者执行后做一定的操作,或者是不去调用实际的方法而是从缓存返回,又或者遇到异常就做什么事情。其实这些都是编程中经常遇到的情况,所以才会有AOP。

上面所说的某种情况在AOP中就叫“切入点”(Join point),比如执行某个方法时,或者某类方法,或者某个异常等等。

被拦截后做的事情,叫做Advice,中文一般翻译为“通知”,这个翻译我有点不能理解,advice本意是建议,在AOP中,advice应该是拦住对方并建议做什么事的意思,有点“劝阻建言”的意思,翻译为通知则完全没有那个意境了。

切入点和Advice的集合就是一个切面,可以想象成一个滤网,滤网也是一个面,这个面拦在管道中间,通过的水流都必须先经过它。

Pointcut,可以理解为一个动词,“点切入”,定义了匹配一个接入点的表达式。

Spring AOP除了完善OOP,成为另外一种编程思维,更重要的是它使得声明式企业服务( declarative enterprise services)变得简单。Spring的声明式事务处理甚至比AOP都要出名,而它的实现就是得益于AOP。

Spring定义以下几种advice的方式:

Before advice:顾名思义,在一个切入点被执行前执行。请注意,它不影响真正方法的调用,也就是说真实的方法会在他调用之后被调用,如果你希望它拦截真实的方法并且不再执行真实的方法,那么不能用这个advice。

After returning advice:在方法正常return之后执行,如果方法被exception中断则不会执行。

After throwing advice:与上一个正好相反,如果说上一个是正常流程,那这个就是异常流程。

After (finally) advice: 只要看到finally,那就是说不管方法执行的结果是成功还是失败,这个advice是一定会执行的。

Around advice: 这是最全面的情况。如同自己写代理方法一样,在代理方法中调用原方法。这个时候就可以决定什么情况下调用原方法,什么情况下不调用了。

具体的例子在上一篇中已经有总结。


0 0
原创粉丝点击