Spring AOP
Spring AOP是继Spring IoC之后的Spring框架 的又一大特性,它也是Spring框架的核心内容。AOP是一种思想,所有符合AOP思想的技术,都可以看做是AOP 的实现。AOP 是建立在Java代理机制之上,S骗人能够框架已经基本实心了AOP思想。在众多的AOP实现技术当中,Spring AOP做得最好,也是最成熟的。
Spring AOP 会实现AOP联盟(Alliance)指定的接口规范。Spring AOP的接口都实现了AOP联盟定制标准化接口,这就意味着Spring AOP已经走向了标准化,它将发展的更快。AOP联盟由许多团体组成,这些团体致力于各个Java AOP子项目的开发,它们与Spring 有相同的信念:AOP使开发复杂的企业级应用变得简单,没落更清晰。同时它们也在很保守的地方为AOP 制定标准化的统一接口,使得不同的AOP 技术之间相互兼容。
Spring AOP的实现是基于Java的代理机制,从JDK 1.3开始就支持代理机制,但是性能成为一个很大问题,为了解决JDK代理性能问题,出现了CGLIB代理机制,它可以生成字节码,所以它的性能会高于JDK代理。Spring支持者两种代理方式。但是随着JVM(Java虚拟机)性能的不断提高,者两种代理性能的差距会越来越小。先了解Spring AOP的一些术语,它们是构成Spring AOP的基本组成部分。
切面(Aspect):是对象操作过程中的截面,想象一个平行四边形拦截了程序流程,Spring形象地把它叫做切面,所谓“面向切面编程”正式指的这个。实际上,“切面”是一段程序代码,这段代码将植入到程序流中。
连接点(Join Point):对象操作过程中的某个阶段点,在程序流程上的任意一点,都可以是连接点。它实际上是对象的一个操作,例如,对象调用某个方法,读写对象的实例或是某个方法抛出了异常。
切入点(Pointcut):切入点是连接点的集合,切面与程序流程的“交叉点”便是程序的切入点。确切的说,它是“切面注入”到程序中的位置。换句话说,“切面”是通过切入点被注入的。在程序中可以有很多个切入点。
通知(Advice):通知是某个切入点被横切后,所采取的处理逻辑。也就是说,在“切入点”处拦截程序后,通过通知来执行切面。
目标对象(Target):所有被通知的对象(也可以理解为被代理的对象)都是目标对象,目标对象被AOP锁关注,它的属性的改变会被关注,它行为的调用也会被关注,它的方法传参的变化仍然会被关注。AOP会注意目标对象的变动,随时准备向目标对象注入切面。
织入(Weaving):织入是将切面功能应用到目标对象的过程。由代理工厂创建一个代理对象,这个代理可以为目标对象执行切面功能。AOP的织入方式有3种:编译时期(Compile time)织入、类加载时期(Classload time)织入、运行时(Runting)织入。Spring AOP一般多见于运行时织入。
引入(Introduction):对一个已经编译完类(class),在运行时期,动态的项这个类中加载属性和方法。