AOP(1)介绍&分类

一、有了OOP,为什么还需要AOP?

  • 我们在精熟了OOP的方方面面,包括什么设计模式。但是我们还是无法解决某些问题。
  • 对于系统中普通的业务关注点,OOP可以很好地对其进行分解并使之模块化,但却无法更好地避免类似于系统需求地实现在系统中各处散落这样地问题。(安全检查、系统日志、事务管理)

二、AOP的尴尬?

  • AOP现在没有主权,所以,现时代的AOP实现都需要“寄生”于OOP的主权领土中。

三、静态AOP

  • 以AspectJ为例:相应的横切关注点以Aspect形式实现之后,会通过特定的编译器,将实现后的Aspect编译并织入到系统的静态类中。
  • 优点:Aspect直接以java字节码的形式编译到java类中,jvm可以像通常一样加载java类运行,几乎没有性能损失。
  • 缺点:不够灵活,一旦需要修改,就需要重新编译,重新织入。

四、动态AOP

  • 动态代理:可以在运行期间,为相应的接口动态生成对应的代理对象。
  • 缺点:所有需要织入横切关注点逻辑的模块类都得实现相应得接口,因为动态代理机制只针对接口有效。Spring默认采用这种机制。
  • 优点:相比于动态字节码增强,性能由一定得优势,因为这是通过JVM做的,性能差不多是1.5倍
  • 动态字节码增强:在运行期间,通过动态字节码增强技术为这些系统模块类生成相应的子类,而将横切逻辑加到这些子类中,让应用程序在执行期间使用的是这些动态生成的子类,从而达到将横切逻辑织入系统的目的。
  • 优点:目标类不再不需要实现相应的接口,摆脱了接口,spring在动态代理不能用的时候,采用cglib。

五、自定义类加载器

  • 在class文件加载期间,将横切逻辑,进行织入,然后进行偷梁换柱。。。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 团队开发框架实战—面向切面的编程 AOP 引言 软件开发的目标是要对世界的部分元素或者信息流建立模型,实现软件系统...
    Bobby0322阅读 9,702评论 4 49
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,584评论 11 349
  • 0.前言 本文主要想阐述的问题如下:什么动态代理(AOP)以及如何用JDK的Proxy和InvocationHan...
    SYFHEHE阅读 6,889评论 1 7
  • 前言 记录个人在2017年08月的学习和总结,不定期更新 2017-08-02 有序的Map HashMap是无序...
    Kevin_ZGJ阅读 3,110评论 0 0
  • 在理解Spring AOP以及理清它与Aspect和cglib之间关系之前,有很多基础工作要做,比如,先对代理模式...
    maxwellyue阅读 5,309评论 0 5

友情链接更多精彩内容