Spring AOP术语介绍(转载)

本文通过实例解析AOP(面向切面编程)的核心概念,如Cross-cutting concerns, Aspect, Advice, Joinpoint, Pointcut等,并通过动态代理技术进行实践演示,帮助读者掌握如何将这些概念应用于实际编程中。

原文链接:http://blog.sina.com.cn/s/blog_3ff3946a01009k5z.html

 

AOP全名为Aspect-Oriented Programming,有关于AOP的许多名词术语都过于抽象,单从字面上并不容易理解其名词意义,这边将以之前介绍代理机制的范例来逐一对照以介绍AOP的术语与观念:

    * Cross-cutting concern

在DynamicProxyDemo专案的例子中,记录的动作原先被横切(Cross-cutting)入至HelloSpeaker本身所负责的商务流程之中,另外类似于日志这类的动作,如安全(Security)检查、交易(Transaction)等系统层面的服务(Service),在一些应用程式之中常被见到安插至各个物件的处理流程之中,这些动作在AOP的术语中被称之为Cross-cutting concerns。

以图片说明可强调出Cross-cutting concerns的意涵,例如原来的商务流程是很单纯的:

 

Cross-cutting concerns若直接撰写在负责某商务的物件之流程中,会使得维护程式的成本增高,例如若您今天要将物件中的记录功能修改或是移除该服务,则必须修改所有撰写曾记录服务的程式码,然后重新编译,另一方面,Cross-cutting concerns混杂于商务逻辑之中,使得商务物件本身的逻辑或程式的撰写更为复杂。

现在为了要加入日志(Logging)与安全(Security)检查等服务,物件的程式码中若被硬生生的写入相关的Logging、Security程式片段,则可使用以下图解表示出Cross-cutting与Cross-cutting concerns的概念:

 

* Aspect

将散落于各个商务物件之中的Cross-cutting concerns收集起来,设计各个独立可重用的物件,这些物件称之为Aspect,例如在动态代理中将日志的动作设计为一个LogHandler类别,LogHandler类别在AOP的术语就是Aspect的一个具体实例,在AOP中着重于 Aspect的辨认,将之从商务流程中独立出来,在需要该服务的时候,缝合(Weave)至应用程式之上,不需要服务的时候,也可以马上从应用程式中脱离,应用程式中的可重用元件不用作任何的修改,例如在动态代理中的HelloSpeaker所代表的角色就是应用程式中可重用的元件,在它需要日志服务时并不用修改本身的程式码。

另一方面,对于应用程式中可重用的元件来说,以AOP的设计方式,它不用知道处理提供服务的物件之存在,具体的说,与服务相关的API不会出现在可重用的应用程式元件之中,因而可提高这些元件的重用性,您可以将这些元件应用至其它的应用程式之中,而不会因为目前加入了某些服务而与目前的应用程式框架发生耦合。

    * Advice

Aspect的具体实作称之为Advice,以日志的动作而言,Advice中会包括真正的日志程式码是如何实作的,像是动态代理中的LogHandler类别就是Advice的一个具体实例,Advice中包括了Cross-cutting concerns的行为或所要提供的服务。

    *  Joinpoint

Aspect在应用程式执行时加入商务流程的点或时机称之为Joinpoint,具体来说,就是Advice在应用程式中被呼叫执行的时机,这个时机可能是某个方法被呼叫之前或之后(或两者都有),或是某个例外发生的时候。

    * Pointcut

Pointcut是一个定义,藉由这个定义您可以指定某个Aspect在哪些Joinpoint时被应用至应用程式之上。具体的说,您可以在某个定义档中撰写Pointcut,当中说明了哪些Aspect要应用至应用程式中的哪些Joinpoint。

    * Target

一个Advice被应用的对象或目标物件,例如动态代理中的HelloSpeaker就是LogHandler这个Advice的Target。

    * Introduction

对于一个现存的类别,Introduction可以为其增加行为,而不用修改该类别的程式,具体的说,您可以为某个已撰写、编译完成的类别,在执行时期动态加入一些方法或行为,而不用修改或新增任何一行程式码。

    * Proxy

在《Expert One-on-One J2EE Development WIthout EJB》一书中,Rod Johnson、Juergen Hoeller在第八章中有提到,AOP的实作有五个主要的策略: Dynamic Proxies、Dynamic Byte Code Generation、Java Code Generation、Use of a Custon Class Loader、Language Extensions。

在之前 从代理机制初探 AOP 与 动态代理中,已经使用实际的程式范例介绍过代理机制的实现,Spring的AOP主要是透过动态代理来完成。

    * Weave

Advice被应用至物件之上的过程称之为缝合(Weave),在AOP中缝合的方式有几个时间点:编译时期(Compile time)、类别载入时期(Classload time)、执行时期(Runtime)。

结合 动态代理的实例,将以上介绍过的AOP相关名词具体的使用图片来加以表示,有助于您对每一个名词的理解与认识:

 

特别说明:本人转载文章纯为技术学习,总结经验,并无其他目的,若有他人继续转载,请链接原作者的地址,而不是本文的地址,以示对作者的尊重。最后对原作者的辛勤劳动表示感谢!

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍了基于Matlab的建模与仿真方法。通过对四轴飞行器的动力学特性进行分析,构建了非线性状态空间模型,并实现了姿态与位置的动态模拟。研究涵盖了飞行器运动方程的建立、控制系统设计及数值仿真验证等环节,突出非线性系统的精确建模与仿真优势,有助于深入理解飞行器在复杂工况下的行为特征。此外,文中还提到了多种配套技术如PID控制、状态估计与路径规划等,展示了Matlab在航空航天仿真中的综合应用能力。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程技术人员,尤其适合研究生及以上层次的研究者。; 使用场景及目标:①用于四轴飞行器控制系统的设计与验证,支持算法快速原型开发;②作为教学工具帮助理解非线性动力学系统建模与仿真过程;③支撑科研项目中对飞行器姿态控制、轨迹跟踪等问题的深入研究; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,重点关注动力学建模与控制模块的实现细节,同时可延伸学习文档中提及的PID控制、状态估计等相关技术内容,以全面提升系统仿真与分析能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值