在介绍Spring的AOP功能前,先总结下几个AOP的概念,下面的几个AOP概念不是Spring指定的,而是AOP本身就有的。看看这些专业术语:
Aspect:将对多个类的关注进行统一的模块。在Spring里面是一个普通的类,这个类相当于一个模块,里面包含了对各种类的所有关注,使用@Aspect来表示这个类是一个表明关注方面的类。
Join point:连接点,一个程序执行中的某个点,例如一个方法的执行点或者一个意外的处理等。注意在Spring的AOP里面这个Join point永远是代表着一个方法的执行。
Advice:建议,对于某个Aspect所关注的执行点上执行的动作,建议的种类包括“before”(连接点前执行的动作)、“after”(连接点后面执行的动作)、“around”(包容着连接点的相关动作,这个功能最强)。同大多数AOP一样,Spring中实现Advice也是使用拦截器,在连接点处维护着拦截器链表。
Pointcut:因为Join point连接点只是一个点,当我们希望某些动作是针对多个点时,一般做法就是使用正则表达式去匹配多个连接点,这个其实就是Pointcut的工作了,形象的描述就是Pointcut能够使用正则表达式“切”到多个连接点上。PointCut的表达式在AOP中很重要,Spring AOP使用的是AspectJ的Pointcut表达式语言
上面这几个是最基础的概念,另外还有几个相关的也来看看:
Introduction:介绍、引入,在被关注的类上面上增加附加的方法或者域。在Spring AOP中运行向被关注的类引入新的接口。
Target Object:目标对象,这个相当于原始类,就是被关注的类对象。Spring AOP使用的是运行时代理的技术,所以目标对象始终被代理的。
AOP Proxy:AOP代理,这个是由AOP框架创建的对象,目的是为了实现Aspect的相关通讯(比如所建议的方法能被执行)。在Spring中可以使用JDK动态代理或者CGLIB代理;它其实是实现对Target Object的功能进行代理的作用
Weaving:编织,将关注(Aspect)同其他应用类型或者对象编织在一起创建一个被建议的对象。这个实现可以在编译的时候、加载的时候或者运行的时候。在Spring中是在运行的时候进行交织的(weaving)。这个术语的含义就是把AOP代理同Target Object编制在一起,应用程序通过访问AOP Proxy来实现各种Introduction、Advice。
Spring AOP的功能及其目标
Spring AOP使用的是纯java实现,因此不需要再进行编译;另外它也不需要控制类的加载顺序(类的层次),所以很适合在Servlet容器或者应用服务器上使用。
Spring AOP目前只支持方法执行的连接点。
Spring AOP目的同其他AOP的框架有所不同;其目的不是提供完整一个AOP的实现,而是把重点放在如何把AOP同IoC进行整合来解决企业应用时的一些相关问题。
所以具体例子中我们会看到Spring AOP往往同Spring IoC容器合并在一起