怎样解读Java Spring AOP

技术怎样解读Java Spring AOP本篇文章为大家展示了怎样解读Java Spring AOP,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、对AOP的初印象首先先给出一

本文向您展示了如何解释JavaSpringAOP。内容简洁易懂,一定会让你眼前一亮。希望通过这篇文章的详细介绍,你能有所收获。

一、对AOP的初印象

首先给出一个相对专业的名词(来自百度):

在软件行业中,AOP是Aspect Oriented Programming的缩写,意思是:面向方面编程,通过预编译和运行时动态代理实现程序功能统一维护的技术。AOP是OOP的延续,是软件开发的热点,是Spring框架的重要内容,也是函数式编程的衍生范式。AOP可以用来隔离业务逻辑的各个部分,从而减少业务逻辑各部分之间的耦合,提高程序的可重用性,提高开发效率。

然后让我们举一个简单易懂的例子:

要理解方面编程,首先需要了解什么是方面。用刀把西瓜分成两片,切好的就是切面;翻炒,锅和灶一起工作完成翻炒,锅和灶是切面。在web的分层设计中,web层、网关层、服务层和数据层之间也有一段。在编程中,对象、方法和模块之间有一些部分。

一般我们在做活动的时候,通常会检查每个接口的有效性(是开始还是结束等)。)以及界面是否需要用户登录。

按照正常逻辑,我们可以做到这一点。

怎样解读JavaSpringAOP

有一个问题,就是代码复制需要的次数和接口一样多。对于一个“懒人”来说,这是无法忍受的。好,提出一个公共方法,每个接口都会调用这个接口。这里有点切了。

怎样解读JavaSpringAOP

还有一个问题。虽然我不用每次都复制代码,但是每个接口都要调用这个方法。于是就有了切面的概念,我把方法注入到接口调用的某个地方(切点)。

怎样解读JavaSpringAOP

这样,接口只需要关注具体的业务,不需要关注接口不关注的其他逻辑或处理。

在红框处,是面向切线的编程。

00-1010,看完上面的例子,我觉得大家心中都有一个AOP的大致原型,但是上面提到的section等术语有些歧义。接下来我们来讲解一下AOP中的相关概念,理解AOP中的概念,才能真正掌握AOP的本质。

这里有一个更专业的概念定义:

方面:方面声明类似于Java中的类声明,方面将包含一些切入点和相应的建议。

Joinpoint:指程序中明确定义的点,一般包括方法调用、类成员的访问、异常处理块的执行等。它也可以自己嵌套其他连接点。

切入点:它表示一组连接点,或者通过逻辑关系组合,或者通过一般搭配、正则表达式等集中。它定义了相应的建议将在哪里发生。

建议(增强):建议定义了切入点中定义的程序点要执行的特定操作。它使用之前、之后和周围来区分是之前、之后还是代替每个关节点的执行代码。

目标:编织成建议的目标对象。

编织:将Aspect与其他对象连接并创建Adviced对象的过程。

然后举一个简单易懂的例子:

看完以上的理论知识,相信很多朋友还是觉得AOP的概念还是比较模糊的,对AOP中的各种概念的理解也不是很透彻。其实这很正常,因为AOP里面的概念太多了,我费了很大的劲才整理出来。

让我用一个简单的例子来比较AOP中方面、连接点、切入点和建议之间的关系。

blockquote>

让我们来假设一下, 从前有一个叫爪哇的小县城, 在一个月黑风高的晚上, 这个县城中发生了命案. 作案的凶手十分狡猾, 现场没有留下什么有价值的线索. 不过万幸的是, 刚从隔壁回来的老王恰好在这时候无意中发现了凶手行凶的过程, 但是由于天色已晚, 加上凶手蒙着面, 老王并没有看清凶手的面目, 只知道凶手是个男性, 身高约七尺五寸. 爪哇县的县令根据老王的描述, 对守门的士兵下命令说: 凡是发现有身高七尺五寸的男性, 都要抓过来审问. 士兵当然不敢违背县令的命令, 只好把进出城的所有符合条件的人都抓了起来.

来让我们看一下上面的一个小故事和 AOP 到底有什么对应关系.

首先我们知道, 在 Spring AOP 中 Joint point 指代的是所有方法的执行点, 而 point cut 是一个描述信息, 它修饰的是 Joint point, 通过 point cut, 我们就可以确定哪些 Joint point 可以被织入 Advice. 对应到我们在上面举的例子, 我们可以做一个简单的类比, Joint point 就相当于 爪哇的小县城里的百姓,pointcut 就相当于 老王所做的指控, 即凶手是个男性, 身高约七尺五寸, 而 Advice 则是施加在符合老王所描述的嫌疑人的动作: 抓过来审问.

为什么可以这样类比呢?

  • Joint point : 爪哇的小县城里的百姓: 因为根据定义, Joint point 是所有可能被织入 Advice 的候选的点, 在 Spring AOP中, 则可以认为所有方法执行点都是 Joint point. 而在我们上面的例子中, 命案发生在小县城中, 按理说在此县城中的所有人都有可能是嫌疑人.

  • Pointcut :男性, 身高约七尺五寸: 我们知道, 所有的方法(joint point) 都可以织入 Advice, 但是我们并不希望在所有方法上都织入 Advice, 而 Pointcut 的作用就是提供一组规则来匹配joinpoint, 给满足规则的 joinpoint 添加 Advice. 同理, 对于县令来说, 他再昏庸, 也知道不能把县城中的所有百姓都抓起来审问, 而是根据凶手是个男性, 身高约七尺五寸, 把符合条件的人抓起来. 在这里 凶手是个男性, 身高约七尺五寸 就是一个修饰谓语, 它限定了凶手的范围, 满足此修饰规则的百姓都是嫌疑人, 都需要抓起来审问.

  • Advice :抓过来审问, Advice 是一个动作, 即一段 Java 代码, 这段 Java 代码是作用于 point cut 所限定的那些 Joint point 上的. 同理, 对比到我们的例子中, 抓过来审问 这个动作就是对作用于那些满足 男性, 身高约七尺五寸 的爪哇的小县城里的百姓.

  • Aspect::Aspect 是 point cut 与 Advice 的组合, 因此在这里我们就可以类比: “根据老王的线索, 凡是发现有身高七尺五寸的男性, 都要抓过来审问” 这一整个动作可以被认为是一个 Aspect.

最后是一个描述这些概念之间关系的图:

怎样解读Java Spring AOP

三、其他的一些内容

AOP中的Joinpoint可以有多种类型:构造方法调用,字段的设置和获取,方法的调用,方法的执行,异常的处理执行,类的初始化。也就是说在AOP的概念中我们可以在上面的这些Joinpoint上织入我们自定义的Advice,但是在Spring中却没有实现上面所有的joinpoint,确切的说,Spring只支持方法执行类型的Joinpoint。

Advice 的类型

  • before advice, 在 join point 前被执行的 advice. 虽然 before advice 是在 join point 前被执行, 但是它并不能够阻止 join point 的执行, 除非发生了异常(即我们在 before advice 代码中, 不能人为地决定是否继续执行 join point 中的代码)

  • after return advice, 在一个 join point 正常返回后执行的 advice

  • after throwing advice, 当一个 join point 抛出异常后执行的 advice

  • after(final) advice, 无论一个 join point 是正常退出还是发生了异常, 都会被执行的 advice.

  • around advice, 在 join point 前和 joint point 退出后都执行的 advice. 这个是最常用的 advice.

  • introduction,introduction可以为原有的对象增加新的属性和方法。

在Spring中,通过动态代理和动态字节码技术实现了AOP。

上述内容就是怎样解读Java Spring AOP,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/133160.html

(0)

相关推荐

  • c语言如何查询结构体中的数据(数据结构的链表怎么连接c语言)

    技术如何进行数据结构C语言链表的实现这篇文章将为大家详细讲解有关如何进行数据结构C语言链表的实现,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。前言需要用到的函数库#inc

    攻略 2021年12月18日
  • Hibernate如何实现批量处理

    技术Hibernate如何实现批量处理这篇文章给大家分享的是有关Hibernate如何实现批量处理的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hibernate批量处理其实从性能上考虑,它是

    攻略 2021年12月8日
  • 抖音刷赞会上热门吗,刷赞平台自助下单

    技术抖音刷赞会上热门吗,刷赞平台自助下单抖音刷赞会上热门吗,刷赞平台自助下单
    发布视频之后,如果想要获得播放量,虽然说是刷赞是很爽,但是也要担心被封号的问题,那么如果被封号了要怎么解决呢?
    抖音代刷平台可以上热门吗

    测评 2021年11月13日
  • 如何使用php实现EOS离线签名交易

    技术如何使用php实现EOS离线签名交易这篇文章给大家分享的是有关如何使用php实现EOS离线签名交易的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。EOS区块链的钱包服务器Keosd,提供了s

    攻略 2021年11月25日
  • RAC安装时出现PRKC-1024错误怎么办

    技术RAC安装时出现PRKC-1024错误怎么办这篇文章给大家分享的是有关RAC安装时出现PRKC-1024错误怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Clusterware安装到

    攻略 2021年11月10日
  • arcsinx的不定积分,sinx的反函数的平方积分

    技术arcsinx的不定积分,sinx的反函数的平方积分sinx的反函数为arcsinx的不定积分:y=arcsinx或siny=x(x∈[-1,1])。arcsinx的平方的不定积分,写作:∫ arcsin²x dx分

    生活 2021年10月30日