面向切面编程之研究与探讨

.NET MVC之AOP,filter过滤器,作用去action、控制器、全局 MVC中的过滤器可以说是MVC框架中的一种灵魂所在,它是MVC框架中AOP思想的具体体现,所以它以面向切面的形式无侵入式的作用于代码的业务逻辑,与业务逻辑代码分离,一经推出,广受开发者的喜爱。从上图①可知,过滤器分四类,总共重写了六个方法,在这六个方法里可以处理相应的业务逻辑,那么如果四种过滤器的六个重写方法同时存在,它们的执行顺序是什么呢?方案二:新建一个父类控制器,在父类控制器中重写过滤器的方法,然后子类控制器继承该父类控制器,则该该过滤器作用于子类控制器中的。 阅读详情

今天看了李丽萍的关于面向切面编程的文章,有些东西想记录下来。

面向切面编程主要是为了解决程序中的一些不核心但是却很重要的辅助功能的设计问题。除了业务逻辑外,在一个完整的系统中,必定有记录平时系统运行时抛出的异常, 需要我们去记录, 以便我们对系统尽快地修复, 这就是我们常用的日志。 如果对一些要求比较重要的数据操作, 事务是不可少的, 如金融系统, 这样的数据很重要, 每步操作都很重要, 我们就应该用到事务处理。这就是我们常用的事务处理。可根据你的系统数据的重要性,有选择地应用。还有一个常用的就是安全验证了, 它也是常用的, 对于不同的页面, 访问的身份也不一样。 这就是我们常用的身份验证。 以上这些不是针对特定哪个业务模块的, 可能针对所有的模块。它们只是一些附加的功能, 相对模块的主功能而言, 如果在每个模块中都夹杂着这些不是核心业务的代码,看起来与核心业务有点关系, 但这样处理, 会对以后的维护比较头疼。同时也违背了面向对象的一条原则, 自己对自己负责, 本不属于这个方法的业务也放在了其中。 这样的代码不仅难维护, 重用性也不好, 耦合度也比较大, 内聚性也比较低。 这样的代码眼前可能不会有什么麻烦, 但给后期的维护人员带来了麻烦。由于 AOP 技术本身的插件式特点, 采用这种机制进行系统设计和程序开发能够为软件带来极大的灵活性和扩展性。
目前, 运用 AOP 对系统进行功能扩展主要关注的方面是: 1、 Trans-actions 事务, 2、 logging 日志, 3、 性能分析和监控, 4、 权限, 包括鉴权、 安全控制等, 5、 缓存, 6、 错误处理, 7、 性能优化等等。 比如我们最常见的就是日志记录了, 举个例子, 我们现在提供一个服务查询学生信息的, 但是我们希望记录有谁进行了这个查询。如果按照传统的 OOP 实现的话, 那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类 (StudentInfoServiceImpl.java ) , 同时为了要进行记录, 那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话, 假如我们要实现的服务有多个呢? 那就要在每个实现的类都添加这些记录过程。 这样做就会有点繁琐, 而且每个实现类都与记录服务日志的行为紧耦合, 违反了面向对象的规则。 那么怎样才能把记录服务的行为从业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行, 但是背后日志记录对这些行为进行记录, 但是查询学生的服务不知道存在这些记录过程, 这就是我们要讨论 AOP 的目的所在。 AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离, 这样与一批对象之间降低了耦合性, 可以就某个功能进行编程。我们直接从代码入手, 要实现以上的目标, 我们可以使用一个动态代理类
(Proxy), 通过拦截一个对象的行为并添加我们需要的功能来完成。

在系统的设计中,应该将业务的核心关注点与系统横切关注点分开。横切关注点的划分通常满足下面的3个条件:

1、关注点要实现的功能往往横跨了多个模块

2、关注点与核心业务相互独立,不属于同一问题域

3、关注点一般不属于系统的业务功能范畴。


学习aop ,首先要了解下面几个概念

1、连接点(Joinpoint)

连接点是指一个类,一段代码拥有边界性质的特定点,比如,类的初始化前,类的初始化后,某个方法调用前,某个方法调用后,方法抛出异常后这些位置。spring仅支持方法的连接点,即仅能在方法的调用前,方法调用后,方法抛出异常执行织入。我们知道黑客在攻击系统的时候需要找到突破口,没有突破口就没法进行攻击。因此,从某种程度上说,AOP算是一个黑客(因为它要向目标类中嵌入额外的代码逻辑),而连接点就是AOP向目标类中打入锲子的候选点。

2、切点(pointcut)

每个类都拥有多个连接点。比如一个类有两个方法,这两个方法都是连接点。在众多的连接点中,AOP通过切点来定位到特定的连接点。 举个形象的例子,通过数据库查询的概念来理解切点和连接点的关系:连接点相当于数据库中的记录,而切点相当于查询的条件,切点和连接点并不是一对一的条件,一个切点可以匹配多个连接点。

在Spring中,切点通过org.springframwork.aop.Pointcut接口进行查询,他使用类和方法作为连接点的查询条件。spring aop 的规则解析引擎负责解析切点所设定的查询条件,找到对应的连接点。确切说,并不是连接点,因为连接点是方法执行前,执行后等包括方位信息的具体程序执行点,而切点只能定位到某个方法上,所以说,如果要定位到某个方法上,还需要提供方位信息。

3、增强(Advice)

增强就是目标类中的连接点中织入的一段代码,像黑客一样,往业务逻辑中装入木马。spring中,增强除了用于描述一段程序代码之外,还拥有另一个和连接点相关的信息,这边是执行点的方位。结合执行点方位信息和切点信息,就可以找到特定的连接点了。正因为增强包含了用于添加到目标连接点的一段执行逻辑,又包含了用于定位连接点的方位信息,所以spring提供的接口都是带方位名的: BeforeAdvice(表示方法调用前的位置)   AfterReturningAdvice(表示访问返回后的位置)  ThrowsAdvice 等。只有结合切点和增强 才能确定特定的连接点并实施增强逻辑。

4、目标对象(Target)

增强逻辑的织入类。如果没有AOP,目标业务类需要自己实现所有的逻辑,而在AOP的帮助下,我们只需实现那些非横切逻辑的程序逻辑,而性能监视和事务管理这些横切逻辑则可以使用AOP动态织入特定的连接点上。

5、引介(Introduction)

引介是一种特殊的增强,它为类添加一些属性和方法。这样,即使一个业务类原本没有实现某个接口,通过AOP的引入功能,也可以动态地为该业务类添加接口的实现逻辑,让业务类成为这个接口的实现类。

6、织入(weaving)

织入是将增强添加到目标类具体连接点上的过程,AOP像一台织布机,将目标类、增强或者引介通过AOP这台织布机编织到一起。根据不同的实现技术,大致有3种织入方式。

76、利用面向切面编程为P2P JXTA套接字和服务提供动态适应性 本文探讨了如何利用面向切面编程(AOP)为P2P JXTA套接字和服务提供动态适应性与可重用性。通过在服务器端和客户端使用AspectJ实现切面,将横切关注点从核心业务逻辑中分离,提升了系统的可维护性和可扩展性。同时,性能评估表明AOP在某些场景下能够优化执行效率。文章还分析了AOP在P2P JXTA服务中的应用流程、实际案例、注意事项以及未来发展方向,展示了其在构建灵活、高效、自适应P2P系统中的重要作用。 阅读详情

相关推荐

6、面向切面编程(AOP)的探索与替代方案

本文深入探讨了面向切面编程(AOP)及其相关技术,包括 AspectJ 和 Spring AOP 的实现与工具支持。同时,分析了 AOP 在处理横切关注点方面的优势,并详细比较了框架、代码生成、设计模式和动态语言等替代方案。文章还对这些技术与 AOP 的协同使用进行了探讨,并提供了在实际开发中选择合适方案的考量因素。通过全面的分析与对比,帮助开发者更好地理解 AOP 及其替代方案的应用场景与实践方法。

r7s8t的博客 136

什么是面向切面编程?实战解释:AOP实现一个日志记录

虽然静态代理简单,但是每个需要被代理的类都需要一个代理类,如果应用中有多个类需要被代理,就会产生大量的代理类,维护起来相对复杂。动态代理可以实现通用的代理类,避免了静态代理中每个类都需要一个代理类的问题。等技术实现动态代理。动态代理通常结合切面和连接点的概念,根据切面和连接点的定义,在目标对象的方法执行前后插入相应的通知。,可以集中管理应用中的横切关注点,这使得修改和更新这些关注点变得更加方便,减少了重复代码的产生。):代理是一个包装了目标对象的对象,它拦截对目标对象的访问,并在必要时应用一个或多个切面。

一个专注于技术研究创新的程序员 1826

7、自主机器人控制软件测试与面向切面编程容错机制实现

本文探讨了自主机器人控制软件的测试方法与容错机制实现。在测试方面,采用程序生成(PCG)方法构建多样化测试场景,有效发现软件故障,并通过案例分析验证了其高真阳性率和低假阴性率;同时对比了现有相关工作的局限性,突出了PCG在机器人测试中的优势。在容错机制方面,利用面向切面编程(AOP)及其AIRIA扩展,通过微方面实现可配置的主备份复制协议,并提出基于可执行断言的干扰检测方法以确保方面组合的正确性。文章还总结了当前方法的优缺点,并展望了未来在高保真模拟、评分系统校准、算法拓展应用等方面的研究方向,旨在提升机器

salt的博客 60

AOP技术介绍--(.Net平台AOP技术研究)

4.1.Net平台AOP技术概览.Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上,常常为人所诟病。就目前而言,.Net平台并没有提供AOP技术的直接实现,而微软在未来对于.Net的发展战略目标,我们仍未可知。但我相信微软对于目前炙手可热的AOP技术应该不会视而不见。也许在

niuyongjie的专栏 1万+

面向切面编程与Javassist的实践探索

本文深入探讨了面向切面编程(AOP)和Javassist工具的实践应用。章节内容从后面向对象编程视角出发,强调了AOP在简化程序协议和接口方面的重要性。Javassist作为一个类库,为Java提供了模拟AOP的编程接口,以实现框架组件间的简单清晰接口。文章还提出了进一步研究的方向,包括编程语言的描述程序转换和模型驱动架构(MDA)的应用。

weixin_30838971的博客 469

探索软件设计中的关注点分离与面向切面编程

本文深入探讨了软件系统设计中关注点分离的重要性,特别是面向切面编程(AOP)在解决传统软件分解问题中的应用。随着软件系统复杂性的增加,传统方法如面向对象编程(OOP)在并发编程中遇到挑战,导致了代码纠缠和模块化难度。文章介绍了一种新兴的解决方案——面向切面编程(AOP),它在软件生命周期的分析和设计阶段提出了解决方案,通过实现机制在实现层面上进行组件和方面的组合,解决了代码纠缠问题。...

weixin_42513870的博客 299

切面环绕通知异常没有返回值 导致404_SpringAOP-什么是面向切面编程?

前言:相信你知道什么是面向对象编程(OOP),但是你了解面向切面编程(AOP)思想吗?AOP作为Spring框架中的一个重要特性,我们一起来打开AOP之门吧!一.什么是面向切面编程AOP简介AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。为什么使用AOP编程范式?分离功能性需求和非功能性需求...

weixin_39929646的博客 559

PTA 编程题(C语言)-- 然后是几点

PTA 编程题(C语言)-- 然后是几点

LCCprogrammer 5074

.Net平台AOP技术研究

1、引言2、AOP技术基础3、Java平台AOP技术研究4、.Net平台AOP技术研究4.1.Net平台AOP技术概览.Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上,常常为人所诟病。就目前而言,.Net平台并没有提供AOP技术的直接实现,而微软在未来对于.Net

半亩方塘 797

Camera 基础知识

Raw Sensor输出的Data格式为Raw,图像的效果处理使用BB端的ISP,BB端接收Raw data后进行一系列的图像处理(OB,Shading,AWB,Gamma,EE,ANR等),效果方面由BB端控制,需要针对不同的模组进行效果调试,Raw sensor是目前的主流,数据量比YUV Sensor小(RAW10 格式的sensor 1个pixel 10个bit)使用平台ISP处理,能支持较大的size。不过,相位对焦并不是那么完美,它对光线的要求就比较高,在弱光拍摄环境下,相位对焦就无能威力了。

手机-手表蓝牙开发工程师的博客 3062

海外支付实战:虚拟信用卡订阅ChatGPT Plus等服务的完整指南

在跨境数字服务消费中,支付环节常因地区限制、银行风控等因素受阻。其核心原理在于国际信用卡交易需通过发卡行风控系统,而国内银行对高频、小额或商户名非常规的境外线上交易敏感,导致成功率不稳定。为解决这一痛点,虚拟信用卡技术应运而生,它通过服务商生成关联预充值账户的虚拟卡号,提供地域灵活性与资金可控性,显著提升了支付通过率。这项技术的价值在于以较低学习成本,为个人用户打通了访问ChatGPT Plus、Midjourney、Claude Pro等前沿AI服务的支付通道。其典型应用场景包括订阅各类海外SaaS、内容

weixin_42531579的博客 1021

鬼谷子 书摘_书摘和访谈:依赖注入

鬼谷子 书摘 Dhanji R. Prasanna的依赖注入 是一本书 试图 详细探讨DI习语,并在Spring和Guice中介绍技术。 丹吉 是一位Google软件工程师,从事Google Wave的工作,还为Guice,MVEL和其他开源项目做出了贡献。 这本书分为11章。 第1-4章介绍了可测试性以及使用依赖项注入的原因,其各种设计模式和使用习惯,尤其是如何选择这...

cunfu6353的博客 259

Verilog十大基本功2(testbench的设计 文件读取和写入操作 源代码)

需求说明:Verilog设计基础 内容       :testbench的设计 读取文件 写入文件 来自       :时间的诗 十大基本功之 testbench 1. 激励的产生 对于 testbench 而言,端口应当和被测试的 module 一一对应。 端口分为 input,output 和 inout 类型产生激励信号的时候, input  对

时间的诗 5万+

Spring——AOP面向切面编程&SpringAOP与AspectJ比较

​最近跟着源码研究了下Spring使用三级缓存处理循环依赖的原理,里面涉及到Spring AOP的概念;本篇介绍AOP相关的知识点,AOP下的概念名词比较多,尽量使用通俗的概念来逐个解释,内容包括:对AOP(面向切面编程)的理解、AOP下的名词概念、Spring AOP与AspectJ的比较等;这部分知识对于学习Spring框架或者面试,都非常重要,需要掌握; ​...

娜娜米的博客 1285

搭建自己的MQTT服务器,实现设备上云(Ubuntu+EMQX)

这篇文章教大家在ECS云服务器上部署EMQX,搭建自己私有的MQTT服务器,配置EMQX实现设备上云,设备数据转发,存储;服务器我采用的华为云的ECS服务器,系统选择Ubuntu系统。

2万+

DeepSeek揭秘:构建高效反洗钱智能监控系统的全流程与代码实例

在金融领域,反洗钱(AML)是一项至关重要的任务。随着金融交易的复杂性和规模不断增长,传统的手工监控方法已无法满足现代金融系统的需求。因此,开发一个智能监控系统来自动识别和报告可疑交易变得尤为重要。本文将详细介绍如何使用DeepSeek技术构建一个高效的反洗钱智能监控系统,并提供相关的代码实例。

理论都是虚的,代码才是王道。 884

ASP.NET MVC Filter的思考

思考了一下AOP的具体实现,后来想到ASP.NET MVC过滤器其实就是AOP的一种,于是从Filter下手研究AOP. 暂时先考虑AuthorizationFilter,ActionFilter,ResultFilter三种,剩下的两种其实也差不多。AuthorizationFilter的实现最好是派生自AuthorizeAttribute类,而不是派生IAuthorizationF...

anfeng4628的博客 95

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

Unity 面试篇⚠️ | Unity性能优化好,山寨机都能跑~

m0_58523831的博客 1万+

【Spring AOP】面向切面编程,面向切面编程是面向对象编程的孪生兄弟嘛?且听我细细道来! ! !

【Spring AOP】面向切面编程,面向切面编程是面向对象编程的孪生兄弟嘛?且听我细细道来! ! !

程序员良辰 587

完整功能-《网络安全创新实践》:设计并实现一种基于Npcap的网络嗅探器(直接能运行cpp的MFC代码+实验报告)

《网络安全创新实践》:设计并实现一种基于Npcap的网络嗅探器。(直接能跑的MFC)监听所有数据包,以及监听指定IP地址的数据包;(2)能够显示完整的IP数据包首部信息,例如:版本、首部长度、数据包长度、数据包类型(协议字段)、TTL、源IP地址、目的IP地址等;(3)能够显示完整的TCP报文段信息,例如:源端口、目的端口、序号、确认号、数据部分等;(4)能够自动检测SQL注入攻击等Web攻击行为;(5)能够将监听到的数据包信息保存到文件中,以及从文件中读取并显示数据包信息;(6)具有图形化操作界面。

weixin_46531010的博客 660

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

AOP(面向切面编程)的介绍与作用

AOPAspect Oriented Programming(AOP)是较为热门的一个话题。AOP,国内大致译作“面向切面编程”。“面向切面编程”,这样的名字并不是非常容易理解,且容易产生一些误导。笔者不止一次听到类似“OOP/OOD11即将落伍,AOP是新一代软件开发方式”这样的发言。而在AOP中,Aspect的含义,可能更多的理解为“切面”比较合适。所以笔者更倾向于“面向切面编程”的译法。可以...

lj1994104的博客 6850

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

AOP(面向切面编程):从概念到实战的全面解析

简单来说,就是把一些通用的功能(如日志、事务)从业务代码中提取出来,形成独立的模块(称为切面),然后将这些切面“织入”到业务代码中。本文将从AOP的基本概念入手,结合Spring框架的实际应用,深入探讨AOP的核心原理、实现方式以及在现代软件开发中的重要性。无论你是刚接触AOP的小白,还是希望进一步提升对AOP理解的开发者,这篇文章都将为你提供全面的指导。AOP能够有效地提高代码的复用性和系统的维护性,在实际项目中具有广泛的应用价值。随着微服务架构的普及,AOP在分布式系统中的应用将会更加广泛。

Leaton的博客 1093

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

aop—面向切面编程

起源 研究人员就对面向对象思想的局限性进行了分析。他们研究出了一种新的编程思想,借助这一思想或许可以通过减少代码重复模块从而帮助开发人员提高工作效率。随着研究的逐渐深入,AOP也逐渐发展成一套完整的程序设计思想,各种应用AOP的技术也应运而生。AOP思想 定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。AOP 在Spring框架中被作为核心组

Aldeo 1874

了解AOP(面向切面编程)与OOP(面向对象编程)

AOP,他是一种思想,是OOP的延展。 1, 说OOP就来说下之前的OPP,最早开始的程序,一个函数(方法)或者说是功能做一个事情,这种思想划分的是一个功能一个功能的来组合解决问题。 后来人们发现,功能解决问题是解决了,但是功能太多了,人脑实在是有限,太劳财伤命了,而且跟人们看世界的方法有点差异,人们都习惯把某一类的习性划分一起,作为一个整体研究,而不是把某一个...

qq_40893331的博客 774

Spring:从需求出发,读懂AOP如此easy -- 面向切面编程

闲言碎语:Spring中比较重要的两个点就是 IOC 和 AOP,前面有篇博客专门介绍了IOC的思想及使用,这篇文主要是通过实际的需求对 AOP 进行深入的研究,接地气的案例,我们一起来读懂 AOP。 文章目录AOP1、AOP场景:1.1 添加日志记录:1.2 动态代理实现日志记录:1.3 Spring 弥补了动态代理的缺陷:2、AOP 相关专业术语:3、AOP 的简单配置:3.1 使用步骤:3.1.1 导包:3.1.2 配置3.1.3 测试:3.2 AOP 中的细节问题:3.2.1 ioc 容器中保.

潘小蓝的博客 429
上一篇: eclipse git push 冲突问题解决
下一篇: hibernate--HQL语法与详细解释
lin___
博客等级 码龄12年 23粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值