您的位置:首页 > 编程语言 > Java开发

Spring之AOP(学习笔记)

2016-05-27 19:13 246 查看
什么是AOP
AOP的存在价值
AOP的原理剖析
AOP的关键概念
AOP的通俗理解
 
 
什么是AOP
AOP的基本概念
(Aspect-Oriented Programming)面向切面编程
AOP将应用系统分为两个部分
核心业务逻辑横向的通用逻辑 即所谓的Aspect 
(如所有大中型应用都要涉及到的持久化的管理,事务管理,安全管理,日志管理,以及调试管理等)
AOP与OOP的关系
AOP是对OOP的面向对象编程的补充,同时AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中很重要的内容。
面向对象编程OOP是从静态角度考虑程序结构及OOP对业务处理过程中的实体以及属性和行为进行了抽象的封装,以获得清晰高效果的逻辑划分,研究的是一种静态的领域
面向切面编程AOP是从动态角度考虑程序运行过程,即,是针对业务处理过程中的切面进行提取,它所面对的,是处理过程中的某个步骤或者阶段,研究的是一种动态的领域。
AOP的主要功能
主要是用于系统级别的功能,如日志记录、性能统计、安全控制、事务处理、异常处理等
AOP的主要意图
主要是将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,希望可以将它们独立到非指导性业务逻辑方法中,进而改变这些行为时,不影响业务逻辑代码的处理。也就是说AOP把一些常用的服务进行模块化,并且用声明的方式将这些组件使用到其他的业务组件当中,这样做的结果是,每一个业务组件只需要关注自己的业务逻辑,而不用去了解一些常用的服务组件,这样,就保证了更高的内聚性
 
 
AOP的存在价值
AOP专门用于处理系统中分布于各个模块中的交叉关注点的问题,在JavaEE应用中,常常通过AOP来处理一些具有横切性质的系统级服务,如事务管理、安全检查、缓存、对象池管理等,AOP已经成为一种非常常用的解决方案。



 
AOP的原理剖析
 
AOP代理其实是由AOP框架动态生成的一个对象,该对象可作为目标对象使用,AOP代理所包含的方法与目标对象的方法如图:



AOP实际上是由目标类的代理类实现的,AOP代理其实是由AOP框架动态生成的一个对象,该对象可以作为目标对象使用,AOP代理包含了目标对象的全部方法,但AOP代理中的方法与目标对象中的方法存在差异,AOP方法在特定切入点添加了增强处理,并回调了目标对象的方法。
纵观AOP编程,需要程序员参与的只有三个部分:
1.定义普通业务组件
2.定义切入点
3.定义增强处理
一旦定义了合适的切入点和增强处理,AOP框架会自动生成AOP代理,AOP代理的方法:
代理对象的方法=
增强处理+被代理对象的方法
AOP框架负责动态生成AOP代理类,这个代理类的方法则由增强和回调目标对象的方法所组成
 
AOP的关键概念
 
切面 - Aspect
是一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点很好的例子,在Spring的AOP中,切面可以使用基于模式的(schema-based)或基于Aspect注解方式(@Aspect)来进行实现。通俗说,我们所加入的切面类,如日志类
 
连接点 - Join Point
是在程序进行中的某个特定的点,比如方法调用时,处理异常时,在Spring的AOP过程中,一个连接点总是表示一个方法的执行,通俗地说,就是加入切点的那个点。
 
通知 - Advice
是在切面的某个特定的连接点上所执行的动作其中包括around,before,after等不同类型的通知,许多AOP的框架都是以拦截器为通知模型,并且维护一个以连接点为中心的拦截器链。
 
切入点 - Point Cut
切入点是匹配连接点的,通知和一个切入点表达式并联,并在满足这个切入点的连接点上运行,切入点表达式如何和连接点匹配是AOP的核心
 
引入 - Introduction
是用来给一个类型声明额外的方法和属性,Spring允许引入新的接口到任何被代理的对象,例如,可以使用引入来使一个bean实现ismodified接口,以便简化缓存机制。
目标对象 - Target Object
被一个或多个切面所通知的对象,也被称作被通知对象。既然Spring AOP对象是通过运行时代理所实现的,那么这个对象永远是一个被代理的对象
 
AOP代理
- AOP Proxy
AOP框架创建的对象,用来实现切面契约(aspect contract)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理
 
织入 - Weaving
把切面连接到其它的应用程序类型或者对象之上,并创建一个被通知的对象,这些可以在编译时、类加载时、运行时来完成。Spring和其他纯java AOP框架一样,在运行的时候来完成织入
 
AOP的通俗理解
 
一个组件A,不关心其他常用的服务组件B,但是这个组件A使用组件B的时候,不是组件A自身去调用,而是通过配置到呢个其他方式,比如Spring中可以通过XML配置文件。这样就使得A压根就不需要知道服务组件B是怎样的,爱存在不存在,爱怎么存在都与A无关。A只关心自己的业务逻辑,具体A使用B的时候,配置文件去做,与具体的A组件无关。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: