面向切面的Spring

来源:互联网 发布:淘宝镁光内存条 编辑:程序博客网 时间:2024/04/30 12:05

面向切面的Spring

什么是面向切面编程

面向切面编程,即我们在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用,而无需修改受影响的类。

面向切面编程的好处

可以让每个关注点都集中于一个地方,而不是分散到多处代码中;其中,服务模块更简洁,因为他们包含核心功能的代码,而次要关注点的代码被转移到切面中。

定义AOP术语

常用术语:通知,切点,连接点。


通知(Advice)

在AOP中,切面必须要完成的工作被称为通知。

5种类型的通知:

前置通知:在目标方法被调用前调用通知功能后置通知:在目标方法完成之后调用通知,此时不会关心方法的输出是什么。返回通知:在目标方法成功执行后调用通知异常通知:在目标方法抛出异常之后调用通知。环绕通知:通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。

连接点

连接点是在应用执行过程中能够插入切面的一个点。这个点可以使调用方法时,抛出异常时,甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中,并添加新的行为。

切点

如果说通知定义了切面的“何时” 和 “什么”的话,切点就定义了何处。切点的定义会匹配通知所要植入的一个或多个连接点,我们筒仓使用明确的类或方法名称或是正则表达式定义所匹配的类和方法名称来指点这些切点。

切面

切面是通知和切点的结合,通知和切点共同定义了切面的全部内容–它是什么,在何时和何处完成其功能。

引入

引入允许我们向现有的类添加新方法或属性。例如,我们可以创建一个Auditable通知类,该类记录了对象最后一次修改时的状态。这很简单,只需一个方法,setLastModified(Date),和一个实例来保存这个状态。然后,这个新方法和实例变量就可以被引入到现有的类中,从而可以在无需修改这些现有的类的情况下,让他们具有新的行为和状态。

织入

织入是切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中,在目标对象的生命周期里有多个点可以进行织入。

在开始之前,还要了解Spring AOP的一些关键知识。

Spring在运行时通知对象

通过在代理类中包裹切面,Spring在运行期把切面织入到Spring管理的bean中。可以想象一下,一个大圈表示代理类,大圈内包裹着一个小圈是目标对象,大圈能够拦截方法的调用,并把这调用转发给真正的目标bean。当代理拦截到方法调用时,在调用目标bean方法之前,会执行切面逻辑。直到应用需要代理的bean时,Spring才创建代理对象。如果使用的是ApplicationContext的话,在ApplicationContext从BeanFactory中加载所有bean的时候,Spring才会创建被代理的对象。

还有Spring只支持方法级别的连接

原创粉丝点击