3.2 Spring AOP的设计与实现

JVM的动态代理特性

在Spring AOP实现中,使用的核心技术是动态代理,这其实是JDK的一个特性(JDK1.3以上的版本有这个特性)。经过JDK的动态代理特性,能够为任意Java对象建立代理对象,对于具体使用来讲,这个特性是经过Java Reflection API来完成的。在了解具体的Java Reflection以前,先复习下Proxy模式,其静态类图以下:post

上图中,RealSubject是真正的目标对象,在代理模式的设计中,会设计一个接口和目标对象一致的代理对象ProxySubject,二者都实现了接口Subject的request方法。在这种状况下,client对目标对象的request的调用就会被代理对象拦截,在调用目标对象的request方法的先后会调用代理对象中的一系列处理,好比上图的preOperation和postOperation,这一系列的处理对目标对象来讲是透明的,目标对象对这些处理绝不知情。spa

JDK已经实现了这个Proxy模式,能够直接使用这个特性。具体来看,能够在Java的reflection包中看到Proxy对象,这个对象生成后须要为它设计一个回调方法,这个回调方法起到的做用就是在其中加入了代理须要额外处理的动做,参考preOperation()和postOperation()方法。设计

Spring AOP的应用场景

Spring AOP为IoC的使用提供了不少便利:代理

一方面,应用能够直接使用AOP的功能,设计应用的横切关注点,把跨越应用多个模块的功能抽象出来,编制到模块中,好比经过AOP实现应用程序中的日志功能;日志

另外一方面,在Spring内部,一些支持模块也是经过AOP来实现的,好比事务处理。对象

相关文章
相关标签/搜索