AOP编程思想理解

PHP 管道模式+Aop编程思想的理解和使用 管道模式+Aop编程思想 在特定的场景下面使用的话简直是神器,laravel中间件也是用的这个模式实现还有tp。日常开发中使用起来代码看起来也牛逼多了,能够使代码的结构非常清晰。 AOP 的优点就在于动态的添加功能,而不对其它层次产生影响,不会入侵业务逻辑代码,可以非常方便的添加或者删除功能 管道模式的理解:打比方有一个下污水过滤器(pipeline类),水就是下面例子的$data,过滤器里面有过滤装置N层,也就是下面例子的pipes,这里我们只有2个过滤规则(checkName和checkAge),然后把 阅读详情

本文主要介绍AOP思想,而不是Spring,Spring在本文只做为理解AOP的工具和例子,所以也不打算介绍Spring的Aspect、Join point、Advice、AOP proxy等概念,那样初学者会很难理解,如果你懂了AOP的思想,那么Spring的AOP,还是AspectJ都容易理解了。

Spring如此流行,当我第一次接触Spring的时候,到网上看了一些文章,都讲得神乎其乎,最后我篇也没看懂,我当时就是认为这个东西一定很高深,于是我就遇到做WEB开发的人就会打听一下。得到最多的一个回答就是“Spring是一个框架”,然后我就会问框架是什么,但都没有一种说法不让我感觉玄乎乎的,同时也没有听懂,于是,我更感觉Spring很神了,这可能叫做朦胧美。还有一种说法就是“Spring两个首要的特性就是AOP和IoC”,这种说法让我感觉Spring简直神的飞上天了,我都不敢接着问了,再问可能想上天去找Spring了,后来我就怀疑这玩意儿真有那么高深吗,强列的好奇心让我实在hold,决定一定要试一下这个神器,于是就看了一些Step By Step的文章,自己写了一个HelloWorld,发现这AOP确实是一个比较新颖的思想,也算是打破了常规,是从不同方面思考问题。不过没有那些童鞋说得那么神。

本文旨在帮助还没有理解AOP的童鞋看透弄懂AOP,也欢迎高手批评指正。

先说一个Spring是什么吧,大家都是它是一个框架,但框架这个词对新手有点抽象,以致于越解释越模糊,不过它确实是个框架的,但那是从功能的角度来定义的,从本质意义上来讲,Spring是一个库,一个Java库,所以我个人觉得应该这样回答Spring是什么:Spring是一个库,它的功能是提供了一个软件框架,这个框架目的是使软件之间的逻辑更加清晰,配置更灵活,实现这个目的的手段使用AOP和IoC,而AOP和IoC是一种思想,是一种什么样的思想呢,等下细说,先说AOP在Java里是利用反射机制实现(你也可以认为是动态代理,不过动态代理也是反射机制实现的,所以还是先不要管动态代理,我们这里化繁为简,不让它干扰咱们对AOP的理解),如何使用AOP呢,很简单滴,等下介绍。

下面先说AOP是什么样的思想,我们一步一步慢慢来,先看一下传统程序的流程,比如银行系统会有一个取款流程


我们可以把方框里的流程合为一个,另外系统还会有一个查询余额流程,我们先把这两个流程放到一起:


有没有发现,这个两者有一个相同的验证流程,我们先把它们圈起来再说下一步:

有没有想过可以把这个验证用户的代码是提取出来,不放到主流程里去呢,这就是AOP的作用了,有了AOP,你写代码时不要把这个验证用户步骤写进去,即完全不考虑验证用户,你写完之后,在另我一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring就会帮你加过去,而不要你自己Copy过去,这里还是两个地方,如果你有多个控制流呢,这个写代码的方法可以大大减少你的时间,不过AOP的目的不是这样,这只是一个“副作用”,真正目的是,你写代码的时候,事先只需考虑主流程,而不用考虑那些不重要的流程,懂C的都知道,良好的风格要求在函数起始处验证参数,如果在C上可以用AOP,就可以先不管校验参数的问题,事后使用AOP就可以隔山打牛的给所有函数一次性加入校验代码,而你只需要写一次校验代码。不知道C的没关系,举一个通用的例子,经常在debug的时候要打log吧,你也可以写好主要代码之后,把打log的代码写到另一个单独的地方,然后命令AOP把你的代码加过去,注意AOP不会把代码加到源文件里,但是它会正确的影响最终的机器代码。

现在大概明白了AOP了吗,我们来理一下头绪,上面那个方框像不像个平面,你可以把它当块板子,这块板子插入一些控制流程,这块板子就可以当成是AOP中的一个切面。所以AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面,这句话应该好理解吧,我们把纵向流程画成一条直线,然把相同的部分以绿色突出,如下图左,而AOP相当于把相同的地方连一条横线,如下图右,这个图没画好,大家明白意思就行。

    

这个验证用户这个子流程就成了一个条线,也可以理解成一个切面,aspect的意思我认为是方面,你用什么实物去类比,只要你能理解都可以。这里的切面只插了两三个流程,如果其它流程也需要这个子流程,也可以插到其它地方去。

讲了这么多,那到AOP该如何使用呢?我们要写一个HelloWorld吗,我看还是算了,关于这种类型的文章,网上已经泛滥成灾,我再写也不一定比人家写得好,所以,我会在下面贴几个我认为写得不错的文章链接,但我在这里先介绍一下Spring如何实现AOP的吧。其实也不难理解,Spring的实现是基于函数(或叫方法)的,就是说,你写好了一个函数后,你还可以在不更改原来的代码情况,通过Spring在函数前或函数后动态的加入新的代码。比如你原来的代是这样的:

void foo() {
    System.out.println("in foo()");
}

然后你想在函数执行前(当成也可以加到执行后,或前后都加,原理是一样)加一句:

System.out.println("before execute foo()");

你也可以多加几句,通过Spring,你可以把这些代码动态的加到函数前面,而不用改变原来的代码。从而会得到与以下等效的执行码:

void foo() {
    System.out.println("before execute foo()");
    System.out.pringln("in foo()");
}

我这样一说你可能更想亲手试试了,可以看看以下这篇文章,写得很好,我们在此也感谢其作者的辛勤付出。

一个简单的Spring的AOP例子

转自:https://my.oschina.net/yanquan345/blog/203415
SAP PS模块预算控制实战:为什么你的采购订单金额和预算占用对不上? 本文深入解析SAP PS模块中采购订单金额与预算占用偏差的常见问题,揭示承诺成本与实际成本的分流处理机制。通过实战案例和六步定位法,提供发票拆分、跨年度预算等典型场景的解决方案,并分享预防性配置框架和最佳实践,帮助企业有效控制预算偏差。 阅读详情

相关推荐

wps脚注转参考文献格式

用于写论文时直接将规范的脚注格式转为参考文献格式

Zeaf的博客 1556

轻松理解AOP(面向切面编程)

Spring如此流行,当我第一次接触Spring的时候,到网上看了一些文章,都讲得神乎其乎,最后我篇也没看懂,我当时就是认为这个东西一定很高深,于是我就遇到做WEB开发的人就会打听一下。得到最多的一个回答就是“Spring是一个框架”,然后我就会问框架是什么,但都没有一种说法不让我感觉玄乎乎的,同时也没有听懂,于是,我更感觉Spring很神了,这可能叫做朦胧美。还有一种说法就是“Spring两个首

登高而望远 3万+

Sentinel-1 Burst数据处理避坑实录:从aria2c报错到wget脚本救场

本文详细介绍了Sentinel-1 Burst数据处理的完整解决方案,从下载困境到高效处理技巧。针对aria2c报错等常见问题,提供了增强版wget脚本和智能分组方法,显著提升下载成功率和处理效率,特别适合科研机构和企业级网络环境下的哨兵数据处理需求。

weixin_42641998的博客 284

spring 自定义用户操作apo切面注解

步骤一:创建注解格式 /** * 自定义日志操作注解 * Target 说明了Annotation所修饰的对象范围 * ElementType: * 1、CONSTRUCTOR:用于描述构造器 * 2、FIELD:用于描述符 * 3、LOCAL_VARIABLE:用于描述局部变量 * 4、METHOD:用于描述方法 * 5、PACKAGE:用于描述包 * 6、PARAMETER: 用于描述参数 * 7、TYPE: 用于描述类、接口(包括注解类型)或者enum声明 * <p&g

weirdo_world的博客 609

运放偏置电路设计:如何精准计算差分放大器的电压偏移量

本文深入解析了差分放大器偏置电路的设计原理与精准计算方法,重点阐述了如何通过引入参考电压实现信号电压偏移,以适应单电源ADC的输入范围。文章结合实战案例,详细推导了偏移电压公式,并强调了电阻匹配、运放选型及PCB布局对精度和共模抑制比的关键影响,帮助硬件工程师避免常见设计陷阱。

weixin_29288313的博客 634

数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2&Innovus)

数字IC后端设计实现中到底应该如何控制cell density和congestion?(ICC2和Innovus两种解决方案)

weixin_37584728的博客 7113

AOP面向切面

什么是AOP AOP是Aspect Oriented Programming的缩写 Aspect表示切面,给业务方法增加的功能,叫做切面。切面一般都是非业务功能,而且切面功能一般都是可以复用的。例如日志功能,事务功能,权限检查,参数检查,统计信息等等 Oriented 面向 Programming 编程 AOP中的一些术语 Aspect:切面,指给业务方法增加的功能 JoinPoint:连接点,连接切面的业务方法,在这个业务方法执行时会同时执行切面的功能 Poingcut:切入点,是一个或多个连接点的集合,

weixin_44001317的博客 2914

从混乱到清晰:用QJsonObject重构你的Qt网络API数据解析层(避坑指南)

本文详细介绍了如何使用QJsonObject重构Qt网络API数据解析层,避免常见的JSON解析陷阱。通过安全解析模式、数据绑定和性能优化技巧,帮助开发者构建高效、健壮的解析逻辑,提升代码可维护性和可读性。特别适用于处理复杂嵌套的JSON响应数据场景。

weixin_29011667的博客 230

Spring深入解析之AOP(一)

Spring深入解析之AOP AOP:Aspect Oriented Programming 面向切面编程 OOP:Object Oriented Programming 面向对象编程 面向切面编程:基于OOP基础之上新的编程思想,OOP面向的主要对象是类,而AOP面向的主要对象是切面,在处理日志、安全检查、权限认证、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点,虽然IOC容器没有依赖AOP,但是AOP提供了非常强大的功能,用来对IOC做补充。通...

qq_33807330的博客 653

麒麟V10 ARM环境离线部署MySQL:从依赖缺失到服务自启的完整避坑指南

本文详细介绍了在麒麟V10 ARM环境下离线部署MySQL的完整流程,包括依赖缺失解决方案、目录配置、服务自启设置及性能调优。特别针对国产操作系统和ARM架构的兼容性问题,提供了实用的避坑指南和优化建议,帮助用户高效完成MySQL部署与维护。

weixin_28741413的博客 409

YOLOv11改进 | 注意力篇 | YOLOv11引入24年动态卷积块注意力(Dynamic-CBAM),并构建C2PSA_DynamicCBAM

1.Dynamic-CBAM介绍1.1 摘要:重度抑郁症是一种普遍而严重的心理健康状况,对您的情绪,思想,行动和对世界的整体感知产生负面影响。由于抑郁症的症状不明显,确定一个人是否抑郁是很复杂的。然而,他们的声音可能是我们可以识别抑郁症迹象的因素之一。抑郁的人会表现出不适、悲伤,他们可能说话缓慢、颤抖,声音中失去情感。在这项研究中,我们提出了动态卷积块注意力模块(DynamicCBAM),用于在注意力-GRU网络中通过分析人类的音频信号来分类情感。

tsg6698的博客 1002

spring中的AOP编程思想详解

一.AOP编程思想介绍 1.servlet的AOP体现: AOP意思就是面向切面编程,可以用一句话概况AOP编程思想,即横向重复,纵向抽取。我们知道,软件工程一个基本原则就是代码复用,为了实现这个目标,我们可以用类,用方法,同样,AOP也是代码复用的一种方式。我们现在用下面这样一种例子来具体解释什么叫做面向切面编程。熟悉 java web的朋友可能清楚,我们在编写servlet需要解决一系列的

wonabi的博客 7304

Claude Code 100个真实案例 - 用AI设计Arduino PCB电路板(硬件小白也能画板)

本案例展示如何使用 Claude Code 配合 KiCad 的 Python 脚本接口,从零设计一块 Arduino 传感器扩展板 PCB。从原理图符号创建、网表生成到 PCB 布局布线,全程自动化完成,最终输出可直接发给工厂打样的 Gerber 文件。

yueyeguzhuo的专栏 442

深入理解Aop编程思想

Aop(Aspect-Oriented Programming,面向切面编程),可以说是oop(面向对象编程)的一个补充和完善,为啥这样说呢?我们都知道oop将我们的程序很好的用继承,封装,多态实现了对象的清晰的层次结构,面向对象的思想允许我们在不同对象之间定义自上而下的关系,但是,当我们要对这些所有对象设置公共行为时,oop思想就无法做到了,我们无法用面向对象向他们全部添加公共行为。好比日志功能

u010214269的专栏 8406

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

如何通过现实场景轻松理解spring中的AOP编程思想?

利用生活场景的比喻帮你快速理解spring中的AOP编程思想!!!

2301_80447892的博客 1178

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

理解POP,OOP,AOP编程思想

如何理解POP,OOP,AOP之间的关系1.POP2.OOP3.AOP 1.POP pop即Process-oriented programming ,是一种面向过程编程。 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。 面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思...

qq_41833275的博客 1370

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

理解AOP的编程思想

Spring框架在国内的软件开发早已是全面普及了,开发中使用Spring主要是为了它的三种特点:1. IOC容器管理各层的组件 2.AOP配置声明式事务 3.整合其它框架。上一篇我们探究了一下IOC是怎么回事,这回我们来探究另一个Spring的重要思想:面向切面编程。首先假设一个情景:我们要编写一款银行的业务软件,要求可以实现查询、取款、存款等功能,那么不用多说,你也肯定知道大致的流程和下面差不多...

程序员不做死肥宅 1763

深入理解Aop的编程思想

AOP(Aspect-Oriented Programming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。

AILAN_的专栏 1368

编程思想的理解(POP,OOP,SOA,AOP)

1)POP--面向过程编程(Process-oriented programming ): 面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是系统的数据被加工和处理的过程,在程序设计中主要以函数或者过程为程序的基本组织方式,系统功能是由一组相关的过程和函数序列构成。面向过程强调的是功能(加工),数据仅仅作为输入和输出存在。这种过程化的思想是一种很朴素和普遍的思想和方法,人类很多

三人行必有我师,手写三行必有所悟 4万+

简单模拟Spring AOP功能 (1) AOP编程思想的理解

AOP概述   AOP是软件开发思想的一个飞跃,AOP

良之才的专栏 805

php中aop编程思想,编程思想的理解(POP,OOP,SOA,AOP)

124月/171)Process-oriented programming):面向过程2)从方法论来讲,我们可以将面向过程与面向对象看做是事物的两个方面--局部与整体(注意:局部与整体是相对的),在实际应用中,两者方法都同样重要。面向过程和面向对象是3)架构面向服务以服务为出发点,组织和协调相关的对象来提供目标服务,对外提供必要的参数输入接口,将服务的结果作为输出,而“服务”本身的计算过程和组织...

weixin_33901614的博客 275

编程思想的理解(SOA,AOP,OOP,POP)

原文地址:https://www.cnblogs.com/javathread/archive/2011/11/29/2634980.html 1)SOA--面向服务架构 面向服务以服务为出发点,组织和协调相关的对象来提供目标服务,对外提供必要的参数输入接口,将服务的结果作为输出,而“服务”本身的计算过程和组织则被封装在一起,对用户透明。其实面向服务也是以功能(服务)为中心,但其强调的

lizhou828的专栏 974
上一篇: 安卓网络请求使用httpclient--post请求方式
下一篇: OGNL基础语法和与struts2的结合使用。
wonabi
博客等级 码龄11年 14粉丝 25原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值