JVM的动态代理特性
在Spring AOP实现中,使用的核心技术是动态代理,这实际上是JDK的一个特性(JDK1.3以上的版本有这个特性)。通过JDK的动态代理特性,可以为任意Java对象创建代理对象,对于具体使用来说,这个特性是通过Java Reflection API来完成的。在了解具体的Java Reflection之前,先复习下Proxy模式,其静态类图如下:
上图中,RealSubject是真正的目标对象,在代理模式的设计中,会设计一个接口和目标对象一致的代理对象ProxySubject,两者都实现了接口Subject的request方法。在这种情况下,client对目标对象的request的调用就会被代理对象拦截,在调用目标对象的request方法的前后会调用代理对象中的一系列处理,比如上图的preOperation和postOperation,这一系列的处理对目标对象来说是透明的,目标对象对这些处理毫不知情。
JDK已经实现了这个Proxy模式,可以直接使用这个特性。具体来看,可以在Java的reflection包中看到Proxy对象,这个对象生成后需要为它设计一个回调方法,这个回调方法起到的作用就是在其中加入了代理需要额外处理的动作,参考preOperation()和postOperation()方法。
Spring AOP的应用场景
Spring AOP为IoC的使用提供了很多便利:
一方面,应用可以直接使用AOP的功能,设计应用的横切关注点,把跨越应用多个模块的功能抽象出来,编制到模块中,比如通过AOP实现应用程序中的日志功能;
另一方面,在Spring内部,一些支持模块也是通过AOP来实现的,比如事务处理。
来源:oschina
链接:https://my.oschina.net/u/3342874/blog/1821396