Spring---浅谈AOP

Posted H小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring---浅谈AOP相关的知识,希望对你有一定的参考价值。

概念

AOP是Aspect Oriented Programming的缩写,即面向切面的编程。是一种比较新颖的编程思想,也是Spring框架中一个重要的领域。

AOP将应用系统分为两个部分:核心业务逻辑、横向的通用的逻辑也就是所谓的方面,例如所有大中型应用都要涉及到的持久化的管理、事物管理、安全管理、日志管理以及调试管理等等。在Spring当中提供了面向切面编程的丰富的支持,允许通过分离应用的业务逻辑与系统级的服务。应用对象只实现它们要做的,也就是完成业务逻辑,仅此而已。它们并不负责甚至是意识到其它的系统级别的关注点,例如日志和事物支持等等。

AOP与OOP的关系

AOP(Aspect-Oriented Programming,面向切面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善,同时AOP也是OOP的延续。是软件开发中的一个热点,也是Spring框架中一个重要的内容。我们可以这样理解,面向对象编程OOP是从静态角度考虑程序结构,即OOP对业务处理过程中的实体以及属性和行为进行了抽象的封装,以获得更加清晰高效果的国际划分,研究是的一种静态的领域。而面向切面的编程,也就是AOP,是从动态角度考虑程序运行过程,即针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或者阶段,研究的是一种动态的领域

AOP的主要功能

主要用于系统级别的功能。例如日志记录、性能统计、安全控制、事物处理、异常处理等等这些主要功能。

AOP的主要意图

主要是将日志记录、性能统计、安全控制、事物处理、异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导性的业务逻辑方法当中,进而改变这些行为的时候,不影响业务逻辑代码的处理,也就是说AOP把一些常用的服务进行模块化,并且用声明的方式,将这些组件使用到其它的业务组件当中去,这样做的结果就是每一个业务组件只需要关心自己的业务逻辑,而不用去了解一些常用的服务组件。AOP正在成为软件开发的下一个光环,使用AOP可以将处理切面的代码注入程序。通常主程序的主要目的并不在于处理这些切面的功能,所以AOP可以有效地防止代码混乱。Spring的framework是很有前途的AOP技术,作为一种非侵略性的,轻型AOP framework,你无须使用预编译器或其它源标签,便可以在Java程序中使用它。这意味着开发团队中只需要一个人来应对AOP的framework,其它人还可以像往常一样进行业务逻辑的编程。

AOP存在的价值

AOP专门用于处理系统中分布于各个模块中的交叉关注点的问题,在Java EE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案

为什么要用AOP

由于系统会有许多的不同的组件,每一个组件负责一个特定的功能,然而我们需要每一个组件只关心它自身的核心功能。但是在系统中有一些组件,比如日志模块、事物管理模块、安全模块等等组件会比较频繁的融入到其它核心业务组件当中去,这些常用的组件会分散到其它的常用组件当中,这样会带来的麻烦是:如果这些常用的服务组件经常发生变化,那么我们需要在多个组件当中进行修改。这样使得我们的组件代码因为插入了与自身业务无关的组件而变得很混乱

AOP的关键概念

名称 说明
切面(Aspect) 一个关注点的模块化,这个关注点可能会横切多个对象。事物管理是J2EE应用当中一个关于横切关注点很好的例子。在Spring的AOP当中切面可以使用基于模式的,或者说基于Aspect的注解方式来进行实现,通俗一点说,就是我们加入的切面类。比如我们通常所说的日志类
连接点(Join Point) 连接点是在程序执行当中的某个特定的点,比如某方法调用的时候,或者说处理异常的时候。在Spring的AOP过程当中,一个连接点总是表示一个方法的执行,通俗的说就是加入切点的那个点
通知(Advice) 在切面的某个特定的连接点上执行的动作
切入点(Point Cut) 匹配连接点的断言,通知和一个切入点的表达式并连。并在满足这个切入点的连接点上运行。切入点表达式如何和连接点匹配,是AOP的核心
引入(Introduction) 用来给一个类型声明额外的方法和属性。Spring允许引用新的接口到任何被代理的对象
目标对象(Target Object) 被一个或多个切面所通知的对象
AOP代理(AOP Proxy) AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。在Spring中AOP代理可以是JDK动态代理
织入(Weaving) 把切面连接到其他的应用程序类型或者对象上,并创建一个被通知的对象。分为:编译时织入、类加载时织入、执行时织入

 

AOP通俗的理解

一个组件A,不关心其它常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置等其它方式,比如Spring中可以通过XML配置文件。这样就使得A压根就不需要知道服务组件B是怎样的,爱存在不存在,爱怎么存在都与A无关。A只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关

 

以上是关于Spring---浅谈AOP的主要内容,如果未能解决你的问题,请参考以下文章

源码学习之AOPSpring AOP使用

AOPSpring大法有多好约定编程

关于Spring——AOP

关于Spring——AOP

AOPspring 的AOP编程报错:[Xlint:invalidAbsoluteTypeName]error

框架 - Spring 源码一步步深入