Spring 源码分析(三) —— AOP(六)源码分析与总结

Spring AOP 源码分析

        虽然咱们仅仅分析了一部分,但在 Spring AOP 的基本实现中,咱们能够看到 Proxy 代理对象的使用,在程序中是一个很是重要的部分,Spring AOP 充分利用 Java 的Proxy、反射以及第三方的 CGLIB 这些方案,经过这些技术,完成了 AOP AopProxy 代理对象的生成。
程序员

        回顾整个源码实现过程咱们能够看到,首先经过配置 ProxyFactory 以及拦截器,而后以便 AopProxy 顺利的产生代理对象;配置的方式是由 ProxyFactoryBean 类来完成的,编程的方式是经过 ProxyFactory 来实现的。这两种 AOP 使用方式只是表面方式不同,内在实现都是同样的。这里值得一提的是为了让 AopProxy 更好的工做,Spring 围绕他设计了许多接口和类,好比:专门生产工厂的 AopFroxyFactory  接口,专门用于生产对象的 DefaultAopFroxyFactory等等。编程

        而最终 AopProxy 代理对象的产生,会交给 JdkDynamicAopProxy 和 CglibAopProxy 这两个工厂来完成,用的就是咱们最开始说到的技术。
框架

        在完成 AopProxy 代理对象后,咱们就能够对 AOP 切面逻辑进行实现了,首先会对这些方法进行拦截,从而为这些方法提供工做空间,随后在进行回调,从而完成 AOP 切面实现的一整个逻辑。而这里的拦截 JdkDynamicAopProxy  主要是经过内部的 invoke 方法来实现,而 CGLIB 是经过 getCallbacks 方法来完成的。他们为 AOP 切面的实现提供了舞台。模块化

        最后,经过 AopProxy 接口中 getProxy 方法进行回调,而后在根据 Advice 加强来完成具体逻辑。工具


总结

        Spring AOP 秉承 Spring 一向的设计理念,致力于 AOP 框架与 IOC 容器的紧密集成,以此来为 J2EE 的开发人员服务。这里仅仅介绍了一部分,还有不少地方都很值得你们去仔细专研。固然,AOP 的实现时一个三足鼎立的世界:AspectJ、JBoss AOP、Spring AOP。若是你有兴趣,除了 Spring AOP 之外 AspectJ 和 JBoss AOP 是很是值得你们研究以及借鉴的。源码分析

        特别是 AspectJ。咱们知道 Spring 的加强都是用标准的 Java 类编写的。咱们能够用通常的 Java 开发环境进行开发切面,虽然好用,可是开发人员必须对 Java 开发至关熟悉,仅仅使用 Java 也有必定的局限性。而 AspectJ 与之相反,他专一于切面的开发,虽然最初也仅仅是做为 Java 语言的扩展方式来实现,但经过特有的 AOP 语言,咱们能够得到更强大以及细颗粒的控制,从而丰富了 AOP 工具集。因此 Spring AOP 为弥补自身的不足,在源码中集成了 AspectJ 框架,有兴趣你们也能够去研究一下。spa


太史公曰

        Spring AOP 与其说是一种方便的应用,不如,说是你们在用 Spring IOC 封装时的一种补充,他很好的弥补了 OOP 思想在模块化时的不足,使你的模块化相对完美。因此,我以为,他应该是每一个用 Spring 开发的程序员必须掌握的一个技巧。
设计

        另外,Spring AOP 的实现由不少种,就是这里仅仅是提供了一个源码分析的思路,以及是笔者认为重要的地方尽可能的带入。代理

        好了,写了一个多星期,终于能够好好休息一下了。下一篇,我会写你们比较关心的 Spring MVC 的源码分析,但愿本身能越写越好吧。
orm



——水门(2016年3月于杭州

相关文章
相关标签/搜索