Spring面向切面编程——什么是面向切面编程

   在软件开发中,散布于应用多处的功能被称为横切关注点(cross-cutting concern)。通常来讲,这些横切关注点从概念上是与应用的业务逻辑相分离的。把这些横切关注点与业务逻辑相分离正是面向切面编程(AOP)所要解决的问题。

   DI有助于应用对象之间的解耦,而AOP可以实现横切关注点与它们所影响的对象之间的解耦。   

   简而言之,横切关注点可以被描述为影响应用多处的功能。


什么是面向切面编程

   横切关注点可以被模块化为特殊的类,这些类被称为切面(aspect)。这样做有两个好处:首先,现在每个关注点都集中在一个地方,而不是分散到多处代码中;其次,服务模块更简洁,因为它们只包含主要的关注点(或核心功能)的代码,而次要关注点的代码被转移到切面中了在不改变原来代码的基础上,增加新的功能。


AOP的优点

1.使真实角色处理的业务更加的纯粹,不再去关注一些公共的事情。

2.公共的业务由代理来完成,—— 实现业务的分离。

3.公共业务发生改变时,变得更加集中和方便。


AOP术语

通知(advice)

   在AOP术语中,切面的工作被称为通知。通知定义了切面是什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题。它应该应用在某个方法被调用之前?之后?之前之后都调用?还是只在方法抛出异常时调用?

连接点(join point)

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

切点(point):

   一个切面并不需要通知应用的所有连接点。切点有助于缩小切面所通知的连接点的范围。

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

切面(aspect)

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

引入(introduction):

   引入允许我们向现有的类添加新方法或属性。

织入(weaving):

   织入是把切面应用到目标对象并创建新的代理对象的过程。切面在指定的连接点被织入到目标对象中。在目标对象的声明周期里有多个点可以进行织入:编译期,类加载期,运行期

总结

   通知包含了需要用于多个应用对象的横切行为;连接点是程序执行过程中能够应用通知的所有点;切点定义了通知被应用的具体位置(在哪些连接点)。其中关键的概念是切点定义了哪些连接点会得到通知。


AOP的重要性

   Spring aop 就是将公共业务(事务,安全等)和其它的业务结合。当执行其它业务时会把公共业务加进来,实现公共业务的重复利用,其它业务变得更加纯粹,程序员只关心其它业务,其本质还是动态代理


可以加我微信一起学习
                                              Spring面向切面编程——什么是面向切面编程