AOP面向切面编程思想的原理(简单理解)

阅读本文章的前提:java基础,具备java面向对象思想

深入学习需要了解知识点:jdk 静态代理,动态代理,java继承,多态,接口

AOP:面向切面编程思想是继OOP面向对象编程思想后,又一个伟大思想。当你意识到这句话的时候,你大概已经理解了什么是AOP;

什么是切面:程序运行流程中的某一个特定点,在这个点你可以切入到原本的流程中,并且加入新的业务逻辑。

传统切面:找到切入点后,修改切入点前后程序代码,进而加入新的逻辑。

AOP的核心是:源代码无关性!也就是说,你加入的逻辑代码和业务代码是无关的两部分代码,只在程序运行期间,你可以加入插入的逻辑,也可以不加入。

打个比方,AOP的切面就是创建了一个原来系统的分身。你可以任意修改系统分身,而不影响本体,运行修改后分身,你得到了想要的结果,原本的业务逻辑是没有任何变化的。

这样做的好处:源代码的无关性,主要业务逻辑和其他业务逻辑完全分离,耦合度极大降低。

实现AOP依赖的技术:JDK动态代理。我简单介绍代理,静态代理,动态代理,深入的了解大家可以参照其他大神。

代理:代理的本质就是分身。

为什么要用代理:你不想或者不能直接做某件事,就要用到代理。比如:你到监狱想给一个犯人一个包裹,你是不能直接接触犯人的,那么你需要通过预警传递包裹。那么这个预警就是代理。从取包裹来讲,狱警就是犯人的分身,这个分身代替本体取得了包裹。如果这个包裹有炸弹,受害的是分身,而本体是不会受到影响的。

静态代理和动态代理本质区别:你是否需要修改源代码(不包含测试类),就可以控制代理内容的变化。

静态代理:程序写好之后,你想修改代理过程,就必须修改源代码。

动态代理:程序写好后,你更改代理过程。只需要修改代理对象(分身)

上面可能不好理解,理解重点是:为什么动态代理这么牛,他有什么过人之处。

答案就在前面,静态代理执行过程中,实际修改了源代码,你改变过程就需要改变源代码。

动态代理则不同,动态代理copy了一份源代码,并且创建了分身。如果更改过程,我没有修改源代码,只是修改了copy的代码,并且创建了另外一个分身。

这个分身实现了效果,而这个分身无论生死,和本体源代码无关。

前面狱警的例子就是动态代理,如果想取另外一个包裹,告诉狱警(犯人的分身)去做就好。过程中出现任何变动,都仅仅影响分身。

静态代理的意思就是:我吃了一种药,胳膊编的无限长(超出原来的部分就是静态代理),我用自己的胳膊去取。如果被炸弹炸了,我的胳膊就没了。

整个过程,我们认识到,动态代理我还是原来的我。而静态代理实现这个动能,已经把我变成怪物了。

最后,我只是简单说了下我的理解。想具体使用,请学习jdk 动态代理。和aop思想

    原文作者:AOP
    原文地址: https://blog.csdn.net/kouryoushine/article/details/77504222
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞