学习面向切面编程的总结

合集下载

面向切面编程

面向切面编程
ห้องสมุดไป่ตู้
1 面向切面编程
1.1 含义 面向切面编程(Ascent Oriented Programming)AOP,是可 以通过预编译方式和运行期动态代理实现在不修改源代码的情 况下给程序动态统一添加功能的一种技术。 1.2 实现原理 AOP 代表的是一种“横向关系” ,如果说“对象”是一个 圆柱体,其中封装了所属属性和行为,那么 AOP 就是将这个圆 柱体剖开,得到对象内部的消息,然后加上其需要的且与核心 功能无关的行为,最后又这些剖开的切面完美复原,不留痕迹。 为了能够剖开对象得到切面并且还要完美的复原切面, AOP 将 系统分为两个部分:核心关注点、横切关注点。一个关注点就 是一个特定的目的、一块感兴趣的区域、一段需要的逻辑行为。 核心关注点就是业务处理的主要流程,是整个系统程序中的各 个核心逻辑。横切关注点是具有公共逻辑的,与其他模块的核 心逻辑纠缠在一起的行为,它们经常发生在核心关注点的多处, 而且都基本相似。例如对于一个信用卡处理系统,其核心关注 点是借贷/存入处理,其横切关注点则是日志、事务完整性、授 权、 安全等, 这些横切关注点会在核心关注点的多处出现。 AOP 的作用就是将核心关注点和横切关注点很好的分离开来,从而 提供模块化的横切关注点。 1.3 实现方法 1.3.1 关注点分离 实现将核心关注点和横切关注点的识别,可通过三棱镜法 则,将将要透过三棱镜的光束看成为“系统需求” ,将三棱镜看 成为“关注点识别器” ,最后把透过三棱镜后的不同光束看成为 “核心关注点和横切关注点” ,如图 1 所示:
在一个电子商务系统中, “订单管理”和“商品管理”都 需要和权限管理结合,只有获得了权限认证的用户才能进行这 些行为的操作,所以在系统中的流程如图 5 所示:
图 5 电子商务系统的权限验证实现 从图 5 可以看出“订单管理”和“商品管理”就是系统中的核 心关注点, “权限验证”就是系统中的横切关注点。从横向角度 去观察系统的流程,利用 AOP 的动态横切技术先截取业务管理 的内部消息,然后织入权限管理逻辑,当系统执行订单管理的 方法时,需要验证验证用户的权限,因此这个方法就是 AOP 的 连接点(join point) ,而且每个需要权限验证的方法都是一个连 接点(join point) ,如下所示: public class OrderManager { // 订单管理类 连接点(join point)

编程思想总结范文

编程思想总结范文

编程思想总结范文编程思想总结编程思想是一种解决问题的方法,它是程序设计的核心。

不同的编程思想代表了不同的思维方式,每一种思想都有自己的特点和适用场景。

本文将对常见的编程思想进行总结,帮助读者更好地理解和应用编程思想。

1. 面向过程编程思想面向过程编程思想是一种以过程为中心的编程思想。

它通过将程序分解为一系列步骤来解决问题。

面向过程编程思想注重对问题进行分析,然后编写特定的函数以实现解决方案。

这种思想的关键是将程序看作是一系列可执行的步骤或函数,每个函数执行特定的任务并返回结果。

面向过程编程思想的优点在于它简单明了,适用于简单的问题和小规模的程序。

然而,随着程序复杂度的增加,面向过程编程思想的缺点也显现出来。

由于程序中的所有数据都是共享的,很容易发生变量名冲突和数据访问的混乱问题。

2. 面向对象编程思想面向对象编程思想是一种将程序组织为对象的思想。

在面向对象编程思想中,程序由多个对象组成,每个对象包含数据和对数据的操作。

对象之间通过消息传递来进行通信和交互。

面向对象编程思想的核心概念包括封装、继承和多态。

封装指的是将数据和对数据的操作封装在对象中,只向外部暴露一些接口。

继承指的是派生类可以继承父类的属性和方法。

多态指的是同一类型的对象在不同情况下会表现出不同的行为。

面向对象编程思想的优点在于它可以更好地模拟现实世界的事物和关系,增加程序的可维护性和扩展性。

然而,面向对象编程思想也有一些缺点,如复杂度高、执行效率低等。

3. 函数式编程思想函数式编程思想是一种将程序看作是函数的组合与计算的方法。

函数式编程思想中,函数被视为第一等公民,可以作为参数传递给其他函数,也可以从其他函数返回。

函数式编程思想的核心特点包括不可变性、纯函数和高阶函数。

不可变性指的是函数在执行过程中不会改变输入的参数和其他外部状态。

纯函数指的是同一输入会产生同样的输出,不会对外部环境产生副作用。

高阶函数指的是函数可以接受其他函数作为参数或返回函数。

编程语言的面向切面编程

编程语言的面向切面编程

编程语言的面向切面编程在软件开发领域,面向切面编程(Aspect-oriented programming,AOP)被广泛应用于解决跨多个对象和模块的横切关注点(cross-cutting concerns)。

AOP 是一种程序设计范式,旨在提供一种清晰、模块化的方式来处理此类关注点。

本文将探讨编程语言中的面向切面编程的原理和应用。

一、概述面向切面编程是一种用于封装横切关注点(cross-cutting concerns)的编程技术。

横切关注点是指跨越应用程序的多个组件的功能,这些功能通常涉及日志记录、异常处理、性能监测等。

AOP通过将这些关注点从主业务逻辑中分离出来,提供了一种模块化的方式来处理它们。

二、核心概念1. 切面(Aspect)切面指的是定义了特定横切关注点和相应处理逻辑的模块。

它可以被织入到主业务逻辑中,以提供额外的功能,而无需修改原始代码。

2. 连接点(Join Point)连接点是指程序执行过程中可以插入切面的特定位置。

在面向对象编程中,连接点通常是方法的调用或者异常的处理。

3. 切点(Pointcut)切点用于定义哪些连接点将被织入。

可以使用正则表达式或其他规则来指定切点。

4. 通知(Advice)通知是指切面在特定连接点织入的代码。

根据织入的时机,通知可以分为前置通知、后置通知、异常通知和最终通知。

5. 织入(Weaving)织入是指将切面应用到目标对象中的过程。

织入可以在编译期、类加载期或运行期进行。

三、常见编程语言中的AOP支持1. Java在Java中,AspectJ是最常用的面向切面编程扩展。

它提供了一套注解和关键字,用于定义切面、切点和通知,并使用特定的编译器进行织入。

AspectJ还支持静态织入和动态织入,使得开发人员可以根据需求选择不同的织入方式。

2. C#C# 开发人员可以使用PostSharp等AOP框架来实现面向切面编程。

PostSharp提供了一套优雅的API,可以通过自定义属性或者在配置文件中指定切面和通知。

python面向对象编程实验总结

python面向对象编程实验总结

python面向对象编程实验总结摘要:1.实验目的2.实验内容3.实验过程4.实验收获5.实验反思正文:python面向对象编程实验总结一、实验目的本次实验旨在加深对Python面向对象编程的理解和应用,通过实践掌握类、对象、继承、多态等概念,提高编程能力和解决实际问题的能力。

二、实验内容本次实验主要涉及以下内容:1.定义类和对象:学会如何创建类,实例化对象,并使用属性和方法对对象进行操作。

2.继承和多态:理解继承关系,实现多态,以便在一个父类中定义多个子类。

3.封装和初始化:掌握如何使用封装性来隐藏对象内部的实现细节,以及如何使用初始化方法对对象进行初始化。

4.异常处理:学习如何在面向对象的程序中处理异常,提高程序的健壮性。

三、实验过程1.编写第一个类:定义一个名为“Person”的类,包含姓名、年龄等属性,以及初始化方法和说话方法。

2.创建对象:实例化一个Person对象,并使用对象的方法和属性。

3.添加继承关系:定义一个名为“Student”的类,继承自Person类,添加学生特有的属性(如:班级、成绩等),并重写说话方法。

4.创建学生对象:实例化一个Student对象,并使用对象的方法和属性。

5.异常处理:在Student类中添加一个方法,当调用该方法时,如果成绩低于及格线,则抛出异常并显示警告信息。

6.测试实验:编写测试代码,验证各个类的功能是否正常运行。

四、实验收获通过本次实验,我对Python面向对象编程有了更深入的了解,掌握了类、对象、继承、多态等概念,提高了编程能力。

同时,我也学会了如何在面向对象的程序中处理异常,使程序更加健壮。

五、实验反思在本次实验中,我发现在编写代码的过程中,要注意类的封装性,避免在其他地方直接修改类的属性。

此外,在编写异常处理时,要确保异常信息清晰明了,便于程序调试。

最后,我要不断提高自己的编程能力,将所学知识应用到实际项目中。

总之,本次实验对我的编程技能提升有很大帮助,让我更加熟练地运用Python面向对象编程。

aop获取方法

aop获取方法

aop获取方法(实用版3篇)目录(篇1)1.AOP(面向切面编程)简介2.AOP 获取方法的方式3.利用 AOP 获取方法的优势和应用场景4.示例代码正文(篇1)1.AOP(面向切面编程)简介面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种编程范式,它允许程序员通过预定义的切面(aspect)来实现跨足关注点(cross-cutting concerns),即那些与业务逻辑无关但又需要关注的问题,如日志、事务管理、安全等。

AOP 的目标是提高代码的重用性和可维护性,让开发者能够更加专注于业务逻辑的实现。

2.AOP 获取方法的方式在 AOP 中,获取方法通常有两种方式:(1)使用 AOP 框架提供的 API许多 AOP 框架,如 Spring AOP、AspectJ 等,都提供了相应的 API 来获取方法。

以 Spring AOP 为例,可以通过以下方式获取方法:```javaMethod[] methods = YourClass.class.getDeclaredMethods();```(2)利用 AspectJ 的反射机制AspectJ 提供了强大的反射机制,可以通过`ng.reflect.Method`类来获取方法。

以下是一个示例:```javaMethod[] methods = YourClass.class.getMethods();```3.利用 AOP 获取方法的优势和应用场景利用 AOP 获取方法的优势主要体现在以下几点:(1)解耦:AOP 能够将切面代码与业务逻辑代码分离,提高代码的可读性和可维护性。

(2)重用性:通过预定义的切面,可以实现代码的复用,避免重复编写相同的代码。

(3)灵活性:AOP 允许开发者在运行时动态地添加或移除切面,从而满足不同的需求。

应用场景包括但不限于:日志记录、事务管理、安全性检查、性能监控等。

目录(篇2)1.AOP 的概念和作用2.AOP 获取方法的途径3.AOP 获取方法的具体步骤4.AOP 获取方法的注意事项5.总结正文(篇2)1.AOP 的概念和作用AOP(面向切面编程)是一种编程范式,它允许程序员在不修改原有代码的基础上,对程序进行横向切面的功能扩展。

abp_面向切面的编程_概述说明以及概述

abp_面向切面的编程_概述说明以及概述

abp 面向切面的编程概述说明以及概述1. 引言1.1 概述本篇文章将详细介绍ABP面向切面编程(Aspect-Oriented Programming,AOP)的概念和应用。

ABP是一种流行的软件框架,它通过AOP技术提供了一种简洁高效的方式来实现面向切面编程。

1.2 文章结构本文将按照以下结构进行阐述:引言部分对ABP面向切面编程进行概述说明;ABP面向切面编程概述部分介绍了ABP和AOP的基本概念;ABP面向切面编程说明部分探讨AOP的原理、ABP中如何实现AOP以及常用的切点和通知类型;ABP的优势和应用案例分析部分评估了ABP在项目开发中的价值,并提供了一些实际应用中的例子;最后,结论和总结部分回顾了整个文章内容,并展望了ABP在软件开发中的前景与挑战。

1.3 目的本文旨在提供关于ABP面向切面编程概述以及其应用场景、原理等方面全面而清晰地说明,同时对其优势和挑战进行合理评估。

读者可以通过本文深入了解并学习如何在自己的项目中使用ABP进行面向切面编程,从而提高软件开发的效率和质量。

2. ABP面向切面编程概述:2.1 什么是ABP:ABP( Boilerplate)是一个开源的应用程序框架,它基于 和Entity Framework等工具,旨在帮助开发人员快速构建现代化的Web应用程序和服务。

ABP提供了一套通用的架构、模式和最佳实践,使开发过程更加简单高效。

2.2 面向切面编程的概念:面向切面编程(Aspect-Oriented Programming,AOP)是一种软件开发技术,其核心思想是将跨越不同模块或对象的特定功能称为“切面”,并在需要时将其应用到目标代码中。

通过这种方式可以有效地提取出系统中共享的关注点,并将其独立处理,从而实现代码逻辑的解耦和重用。

2.3 ABP中面向切面编程的应用场景:ABP框架使用了AOP作为一个核心特性,在许多场景中广泛应用。

以下是一些ABP中常见的应用场景:- 日志记录:通过AOP可以很方便地对各个模块进行日志记录,例如请求日志、异常日志等,在系统运行过程中帮助定位问题并分析性能。

面向切面编程的概念-概述说明以及解释

面向切面编程的概念-概述说明以及解释

面向切面编程的概念-概述说明以及解释1.引言1.1 概述概述部分的内容可以从以下几个角度来进行撰写:1. 引入面向切面编程的概念:面向切面编程(Aspect-Oriented Programming,AOP)是一种编程思想和方法,它从程序的操作流程中提取出横跨多个模块的通用功能,被称为切面(Aspect),并将其独立于业务逻辑进行封装和管理。

切面编程通过将横切关注点与主要业务逻辑分离,提供了一种更加模块化和可维护的编程方式。

2. AOP的核心原理:AOP的核心原理是通过将程序划分为主要业务逻辑和横切关注点两个部分,并在运行时通过动态代理或字节码操作等技术将横切关注点织入到主要业务逻辑中。

这样可以避免代码中的冗余和重复,同时也提供了一种更灵活和可扩展的方式来管理和维护通用功能。

3. AOP与OOP的关系:AOP与面向对象编程(Object-Oriented Programming,OOP)并不是互斥的。

实际上,AOP可以作为一种补充和扩展,与OOP结合使用,以提供更加细粒度和模块化的功能。

AOP可以处理跨多个对象和类的横切关注点,而OOP则更聚焦于对象的属性和行为。

4. AOP的应用领域:AOP可以应用于各种软件系统和应用领域。

例如,在日志记录、事务管理、性能监控、安全控制等方面,AOP可以提供一种统一的解决方案。

通过将这些通用功能模块化并抽取为切面,可以方便地在需要的地方进行统一的管理和调用。

5. 文章结构:本文将从切面编程的定义和原理,切面编程的应用场景,以及切面编程的优势和局限性,未来切面编程的发展方向等方面进行探讨。

通过对AOP的深入研究,可以帮助读者更好地理解和应用切面编程的概念。

1.2 文章结构文章结构部分的内容如下:文章结构部分旨在介绍本文的大纲和组织结构。

通过明确文章的结构安排,读者可以更好地理解整篇文章的内容和逻辑关系。

本文分为引言、正文和结论三个部分。

引言部分包括概述、文章结构和目的三个小节。

软件开发实习报告:面向对象编程的实践与总结

软件开发实习报告:面向对象编程的实践与总结

软件开发实习报告:面向对象编程的实践与总结1. 引言面向对象编程(OOP)是一种软件开发方法,它将程序组织成对象的集合,每个对象都有自己的状态和行为。

在本次的软件开发实习中,我有幸参与了一个采用面向对象编程的项目,下面我将分享我在实习中的实践经验和总结。

2. 实践过程2.1 项目背景本次实习项目是开发一个图书管理系统,主要功能包括图书的借阅、归还、查询等。

这是一个比较典型的应用场景,适合用面向对象的方法进行开发。

2.2 全局设计在开始编写代码之前,我们首先进行了全局设计。

根据需求,我们确定了几个类:图书、用户、图书管理员等。

每个类都有自己的属性和方法,它们通过交互实现系统的功能。

2.3 类的设计与实现在面向对象编程中,类是编程的基本单元。

我们首先根据全局设计确定了各个类的属性和方法,然后逐个实现。

在实现的过程中,我们充分运用了面向对象编程的特性,例如封装、继承、多态等,使得程序的结构更加清晰,代码的复用性更高。

2.4 单元测试与调试在实现每个类的时候,我们使用了单元测试的方法进行验证。

通过编写测试用例,我们可以验证代码的正确性,及时发现和修复潜在的bug。

此外,我们还使用了调试工具来辅助排查程序中的错误。

3. 实践总结3.1 优点面向对象编程具有很多优点,我们在实践中也感受到了它带来的好处。

首先,面向对象编程使得程序的结构更加清晰。

每个类都有自己的职责,通过类与类之间的交互,完成系统的功能。

这种分而治之的思想使得代码的逻辑更加清晰,可读性更高。

其次,面向对象编程提供了良好的代码复用性。

通过继承和多态,我们可以重复使用已有的代码,减少了代码的重复编写,提升了开发效率。

最后,面向对象编程使得代码更加容易维护。

由于代码的结构清晰,我们可以更快地定位和修复bug,同时也降低了修改代码带来的影响。

3.2 不足尽管面向对象编程有许多优点,但也存在一些不足之处。

首先,面向对象编程比较抽象和复杂,对于初学者来说学习成本较高。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

AOP(面向切面编程)可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。

OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。

当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。

也就是说,OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。

例如日志功能。

日志代码往往水平地散布在所有对象层次中,而与它所散布到的对象的核心功能毫无关系。

对于其他类型的代码,如安全性、异常处理和透明的持续性也是如此。

这种散布在各处的无关的代码被称为横切(cross-cutting)代码,在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

而AOP技术则恰恰相反,它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。

所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

AOP代表的是一个横向的关系,如果说“对象”是一个空心的圆柱体,其中封装的是对象的属性和行为;那么面向方面编程的方法,就仿佛一把利刃,将这些空心圆柱体剖开,以获得其内部的消息。

而剖开的切面,也就是所谓的“方面”了。

然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹。

使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。

业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。

横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。

比如权限认证、日志、事务处理。

Aop的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

正如Avanade公司的高级方案构架师Adam Magee所说,AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。

”实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

然而殊途同归,实现AOP的技术特性却是相同的,分别为:1、join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。

它是一个抽象的概念,在实现AOP时,并不需要去定义一个join point。

2、point cut(切入点):本质上是一个捕获连接点的结构。

在AOP中,可以定义一个point cut,来捕获相关方法的调用。

3、advice(通知):是point cut的执行代码,是执行“方面”的具体逻辑。

4、aspect(方面):point cut和advice结合起来就是aspect,它类似于OOP 中定义的一个类,但它代表的更多是对象间横向的关系。

5、introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。

有的AOP工具又将其称为mixin。

上述的技术特性组成了基本的AOP技术,大多数AOP工具均实现了这些技术。

它们也可以是研究AOP技术的基本术语。

2.2.2 横切技术“横切”是AOP的专有名词。

它是一种蕴含强大力量的相对简单的设计和编程技术,尤其是用于建立松散耦合的、可扩展的企业系统时。

横切技术可以使得AOP 在一个给定的编程模型中穿越既定的职责部分(比如日志记录和性能优化)的操作。

如果不使用横切技术,软件开发是怎样的情形呢?在传统的程序中,由于横切行为的实现是分散的,开发人员很难对这些行为进行逻辑上的实现或更改。

例如,用于日志记录的代码和主要用于其它职责的代码缠绕在一起。

根据所解决的问题的复杂程度和作用域的不同,所引起的混乱可大可小。

更改一个应用程序的日志记录策略可能涉及数百次编辑——即使可行,这也是个令人头疼的任务。

在AOP中,我们将这些具有公共逻辑的,与其他模块的核心逻辑纠缠在一起的行为称为“横切关注点(Crosscutting Concern)”,因为它跨越了给定编程模型中的典型职责界限。

2.2.2.1 横切关注点一个关注点(concern)就是一个特定的目的,一块我们感兴趣的区域,一段我们需要的逻辑行为。

从技术的角度来说,一个典型的软件系统包含一些核心的关注点和系统级的关注点。

举个例子来说,一个信用卡处理系统的核心关注点是借贷/存入处理,而系统级的关注点则是日志、事务完整性、授权、安全及性能问题等,许多关注点——即横切关注点(crosscutting concerns)——会在多个模块中出现。

如果使用现有的编程方法,横切关注点会横越多个模块,结果是使系统难以设计、理解、实现和演进。

AOP能够比上述方法更好地分离系统关注点,从而提供模块化的横切关注点。

例如一个复杂的系统,它由许多关注点组合实现,如业务逻辑、性能,数据存储、日志和调度信息、授权、安全、线程、错误检查等,还有开发过程中的关注点,如易懂、易维护、易追查、易扩展等,图2.1演示了由不同模块实现的一批关注点组成一个系统。

图2.1 把模块作为一批关注点来实现通过对系统需求和实现的识别,我们可以将模块中的这些关注点分为:核心关注点和横切关注点。

对于核心关注点而言,通常来说,实现这些关注点的模块是相互独立的,他们分别完成了系统需要的商业逻辑,这些逻辑与具体的业务需求有关。

而对于日志、安全、持久化等关注点而言,他们却是商业逻辑模块所共同需要的,这些逻辑分布于核心关注点的各处。

在AOP中,诸如这些模块,都称为横切关注点。

应用AOP的横切技术,关键就是要实现对关注点的识别。

如果将整个模块比喻为一个圆柱体,那么关注点识别过程可以用三棱镜法则来形容,穿越三棱镜的光束(指需求),照射到圆柱体各处,获得不同颜色的光束,最后识别出不同的关注点。

如图2.2所示:图2.2 关注点识别:三棱镜法则上图识别出来的关注点中,Business Logic属于核心关注点,它会调用到Security,Logging,Persistence等横切关注点。

public class BusinessLogic{public void SomeOperation(){//验证安全性;Securtity关注点;//执行前记录日志;Logging关注点;DoSomething();//保存逻辑运算后的数据;Persistence关注点;//执行结束记录日志;Logging关注点;}}AOP的目的,就是要将诸如Logging之类的横切关注点从BusinessLogic类中分离出来。

利用AOP技术,可以对相关的横切关注点封装,形成单独的“aspect”。

这就保证了横切关注点的复用。

由于BusinessLogic类中不再包含横切关注点的逻辑代码,为达到调用横切关注点的目的,可以利用横切技术,截取BusinessLogic类中相关方法的消息,例如SomeOperation()方法,然后将这些“aspect”织入到该方法中。

例如图2.3:图2.3 将横切关注点织入到核心关注点中通过利用AOP技术,改变了整个系统的设计方式。

在分析系统需求之初,利用AOP的思想,分离出核心关注点和横切关注点。

在实现了诸如日志、事务管理、权限控制等横切关注点的通用逻辑后,开发人员就可以专注于核心关注点,将精力投入到解决企业的商业逻辑上来。

同时,这些封装好了的横切关注点提供的功能,可以最大限度地复用于商业逻辑的各个部分,既不需要开发人员作特殊的编码,也不会因为修改横切关注点的功能而影响具体的业务功能。

为了建立松散耦合的、可扩展的企业系统,AOP应用到的横切技术,通常分为两种类型:动态横切和静态横切。

2.2.2.2 动态横切动态横切是通过切入点和连接点在一个方面中创建行为的过程,连接点可以在执行时横向地应用于现有对象。

动态横切通常用于帮助向对象层次中的各种方法添加日志记录或身份认证。

在很多应用场景中,动态横切技术基本上代表了AOP。

动态横切技术的核心主要包括join point(连接点),point cut(切入点),advice (通知)和aspect(方面)。

在前面,我已经概要地介绍了这些术语分别代表的含义。

接下来,我将以一个具体的实例来进一步阐述它们在AOP动态横切中实现的意义。

考虑一个电子商务系统,需要对订单进行添加、删除等管理操作。

毫无疑问,在实际的应用场景中,这些行为应与权限管理结合,只有获得授权的用户方能够实施这些行为。

采用传统的设计方法,其伪代码如下:public class OrderManager{private ArrayListm_Orders;public OrderManager(){m_Orders = new ArrayList();}public void AddOrder(Order order){if (permissions.Verify(Permission.ADMIN)){m_Orders.Add(order);}}public void RemoveOrder(Order order){if (permissions.Verify(Permission.ADMIN)){m_Orders.Remove(order);}}}同样的,在该电子商务系统中,还需要对商品进行管理,它采用了同样的授权机制:public class ProductManager{private ArrayListm_Products;public ProductManager(){m_Products = new ArrayList();}public void AddProduct(Product product){if (permissions.Verify(Permission.ADMIN)){m_Products.Add(product);}}public void RemoveProduct(Product product){if (permissions.Verify(Permission.ADMIN)){m_Products.Remove(product);}}}如此以来,在整个电子商务系统中,核心业务包括订单管理和商品管理,它们都需要相同的权限管理,如图2.4所示:图2.4 电子商务系统的权限验证实现毫无疑问,利用AOP技术,我们可以分离出系统的核心关注点和横切关注点,从横向的角度,截取业务管理行为的内部消息,以达到织入权限管理逻辑的目的。

当执行AddOrder()等方法时,系统将验证用户的权限,调用横切关注点逻辑,因此该方法即为AOP的join point。

相关文档
最新文档