Spring AOP的实现——对AOP的理解

来源:互联网 发布:软件测试自学视频 编辑:程序博客网 时间:2024/04/29 07:25


什么是AOP

AOP(Aspect Orient Programming,即面向切面编程)。AOP和OOP(Object Orient Programming,面向对象编程)互为补充,面向对象编程将程序分解成各个层次的对象,而面向切面编程将程序运行过程分解成各个切面。可以这么理解:面向对象编程是从静态的角度考虑程序结构,而面向切面编程是从动态的角度考虑程序的运行。


为什么要用AOP

OOP引入封装、继承、多态等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。而封装的要求就是将功能分散到不同对象中去,这在软件设计中往往称为职责分配。实际上就是,让不同的类设计不同的方法,这样代码就分散到一个一个的类中去了。这样做的好处是降低了代码的复杂程度,使类可以重用。

但人们发现,在分散代码的同时,也增加了代码的重用性。比如,我们在两个类中,可能都需要在每个方法中做日志,按照面向对象的设计方法,我们必须在两个类的方法中都加入日志的内容。也许他们是完全相同的,但就是因为面向对象的设计让类和类之间无法联系,而不能把重复的代码统一起来。

或许你想到,将相同的代码写在一个独立的类中的独立的方法里,然后再在这两个类中调用。但是,这样一来,这两个类和前面所提到的独立的类就有耦合了,它的改变会影响这两个类。那么,有没有更好的方法,能让我们在需要的时候随意加入代码呢?这种在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程。

一般而言,我们把切入到指定类指定方法的代码称为切面,而切入到哪些类、哪些方法叫切入点。有了AOP,我们就可以把几个类共有的代码,抽取到一个切片中,等到需要的时候再切入对象中去,从而改变原有的行为。


AOP的基本概念

实现AOP技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象的行为;二是采用静态织入的方式,引入特定的语法创建切面,从而使编译器可以在编译期间织入有关切面的代码。


AOP的基本术语

连接点(Joinpoint):程序执行的某个特定位置,如方法的调用前后、初始化前后或特定异常被抛出

增强处理(Advice):在指定的连接点 ,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。Spring中定义了四个Advice:BeforeAdvice、AfterAdvice、ThrowAdvice和DynamicIntroductionAdvice

切入点(Pointcut):指可以插入增强处理的连接点。简言之,当某个连接点满足指定的要求时,该连接点将被添加增强处理,该连接点就变成了切入点。

引入(Introduction):将方法和字段添加到被处理的类中。Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现IsModified接口,来简化缓存。

目标对象(Target Object:被AOP框架进行增强处理的对象,也被称为被增强的对象。如果AOP框架采用的是动态AOP实现,那么该对象就是一个被代理的对象。

AOP代理(AOP Proxy):AOP框架创建的对象,简单说,代理就是对目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是cglib代理。

织入(Weaving):将增强处理添加到目标对象中去,并创建一个被增强的对象(AOP代理)的过程。织入有两种实现方式——编译时增强(AspectJ)和运行时增强(Spring AOP)。




2 0
原创粉丝点击