`
FreezeTheWorld
  • 浏览: 1697 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论

AOP的解读

阅读更多

Aspect Oriented Programming(AOP)是近来较为热门的一个话题。AOP,国内大致译作“面向方面编程”。

“面向方面编程”,这样的名字并不是非常容易理解,且容易产生一些误导。笔者不止一次听到类似“OOP/OOD11即将落伍,AOP是新一代软件开发方式”这样的发言。显然,发言者并没有理解AOP的含义。
Aspect,没错,的确是“方面”的意思。不过,华语传统语义中的“方面”,大多数情况下指的是一件事情的不同维度、或者说不同角度上的特性,比如我们常说:“这件事情要从几个方面来看待”,往往意思是:需要从不同的角度来看待同一个事物。这里的“方面”,指的是事务的外在特性在不同观察角度下的体现。
而在AOP中,Aspect的含义,可能更多的理解为“切面”比较合适。所以笔者更倾向于“面向切面编程”的译法。
另外需要提及的是,AOP、OOP在字面上虽然非常类似,但却是面向不同领域的两种设计思想。OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。
上面的陈述可能过于理论化,举个简单的例子,对于“雇员”这样一个业务实体进行封装,自然是OOP/OOD的任务,我们可以为其建立一个“Employee”类,并将“雇员”相关的属性和行为封装其中。而用AOP设计思想对“雇员”进行封装将无从谈起。
同样,对于“权限检查”这一动作片断进行划分,则是AOP的目标领域。而通过OOD/OOP对一个动作进行封装,则有点不伦不类。

换而言之,OOD/OOP面向名词领域,AOP面向动词领域。
AOP和OOD/OOP并不冲突,我们完全可以在一个应用系统中同时应用OOD/OOP和AOP设计思想,通过OOD/OOP对系统中的业务对象进行建模,同时通过AOP对实体处理过程中的阶段进行隔离处理。即使不是OOD/OOP,而是在传统的POP(面向过程编程)中,AOP也能起到同样的作用。
将不同阶段领域加以分隔,这是否就算是AOP呢?
AOP还有另外一个重要特点:源码组成无关性。
倘若应用中通过某个具体的业务逻辑类实现了独立的权限检查,而请求调度方法通过预编码调用这个权限模块实现权限管理。那么这也不算是AOP。对于AOP组件而言,很重要的一点就是源码组成无关性,所谓源码组成无关性,体现在具体设计中就是AOP组件必须与应用代码无关,简单来讲,就是应用代码可以脱离AOP组件独立编译。
为了实现源码组成无关性,AOP往往通过预编译方式(如AspectJ)和运行期动态代理模式(如Spring AOP 和JBoss AOP)实现。
稍后章节中我们会就Spring Framework中的AOP实现机制进行更加深入的探讨。
下面先来看AOP中几个比较重要的概念:
1. 切面(Aspect)
切面,对象操作过程中的截面。这可能是AOP中最关键的一个术语。
我们首先来看一个应用开发中常见的切面:用户权限检查。大概只要是完整的应用,都少不了用户权限检查这个模块,不同身份的用户可以做什么,不可以做什么,均由这个模块加以判定。而这个模块调用的位置通常也比较固定:用户发起请求之后,执行业务逻辑之前。
针对权限检查这一模块进行分离,我们就得到了一个切面:
   
切面意义何在?
   
首先根据上例,假设我们实现了一个通用的权限检查模块,那么就可以在这层切面上进行统一的集中式权限管理。而业务逻辑组件则无需关心权限方面的问题。也就是说,通过切面,我们可以将系统中各个不同层次上的问题隔离开来,实现统一集约式处理。各切面只需集中于自己领域内的逻辑实现。
   
这一方面使得开发逻辑更加清晰,专业化分工更加易于进行;另一方面,由于切面的隔离,降低了耦合性,我们就可以在不同的应用中将各个切面组合使用,从而使得代码可重用性大大增强。

 

分享到:
评论

相关推荐

    spring-aop源码解读

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,通过添加额外的行为(即“切面”)来增强应用程序的功能。在Spring AOP中,主要有三个核心概念:Advice、Pointcut和...

    通过AOP重新解读23个经典GOF模式

    ### 通过AOP重新解读23个经典GOF模式 #### 概述 本文旨在探讨如何利用面向切面编程(AOP)的概念和技术来重新审视并优化23个经典的GoF设计模式中的17个模式。GoF设计模式是软件工程领域内广泛认可的一系列优秀实践...

    Spring高级源码解读与AOP应用实践

    内容概要:本文详细介绍了Spring高级框架的核心概念和技术,包括Spring概述、IoC和AOP的基本原理和实现方式。通过对源码的深度剖析,帮助读者理解和掌握Spring框架的设计和运行机制。此外,文章还探讨了AOP的实现和...

    Aop之AspectJ详解解读demo

    **Aop之AspectJ详解解读** 在软件开发中,面向切面编程(AOP)是一种设计模式,它允许程序员将关注点分离到不同的模块,从而提高代码的可维护性和复用性。AspectJ是Java平台上的一个开源AOP框架,它提供了一种强大...

    Spring之AOP配置文件详解

    接下来我们将对这段配置进行详细的分析与解读。 ##### 2.1 配置文件头 ```xml ``` 这是XML文档的声明部分,指明了文档采用的XML版本为1.0,并且使用的字符编码方式为UTF-8。 ##### 2.2 命名空间声明 ```xml ...

    spring-aop.rar_aop1270_spring_spring aop

    《深入解析Spring AOP:源码解读与应用实践》 Spring AOP,即Spring的面向切面编程,是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下,对程序进行功能增强或统一处理的方法。本文将围绕Spring AOP...

    你真的了解AOP? 解读Spring Aop 官方文档(附视频)-附件资源

    你真的了解AOP? 解读Spring Aop 官方文档(附视频)-附件资源

    spring和struts的整合-aop的使用

    具体用途需要根据文件内容来解读。 总之,Spring与Struts2的整合能够提升应用的灵活性和可扩展性,而AOP的使用则进一步增强了代码的可维护性和透明度。通过深入理解和实践这些技术,开发者可以构建出更强大、更健壮...

    spring-aop.pdf 源码电子书

    以上是对Spring AOP电子书标题和描述中提到的关键知识点的详细解读。由于篇幅限制,这里只能提供一个概览。深入理解这些概念,结合具体的源码阅读和实践操作,将有助于编程人员深入掌握Spring AOP的内部工作原理,...

    spring aop

    压缩包中的文件 "spring aop源代码分析.doc" 可能包含了对Spring AOP源代码的详细解读,分析了其关键类和方法,比如`org.springframework.aop.framework.ProxyFactoryBean`、`org.springframework.aop.aspectj....

    简单的AOP实现,希望对大家有用

    以下是对"简单的AOP实现"的详细解读。 1. **AOP概念**: - 切面(Aspect):AOP的核心概念,包含业务逻辑和横切关注点。切面定义了感兴趣的点(例如方法调用),以及如何处理这些点。 - 连接点(Join Point):...

    AOP_microsoft.practices包

    以下是对压缩包中包含的几个dll文件的详细解读: 1. **Microsoft.Practices.EnterpriseLibrary.Common.dll**:这是Enterprise Library的基础库,包含了各种公共类和服务,如配置管理、依赖注入、异常处理等。它为...

    偏振成像中AoP的计算和色调映射

    通过本文的介绍和部分内容的解读,我们可以了解到偏振成像技术中AoP的计算和色调映射的重要性,以及如何克服编程语言在实现上遇到的数学限制。在该研究领域内,通过色彩空间转换和色调映射技术的应用,可以实现对...

    AOP在JAVA多线程监控中的应用

    #### 摘要解读与背景介绍 随着软件复杂度的不断提高以及分布式和并发程序的大规模应用,理解程序的运行行为变得愈发困难。传统的面向对象编程(OOP)监控方法通常将监控代码与核心业务逻辑混杂在一起,这不仅使得...

    菜鸟 Spring 源码解读 推荐流程

    Spring框架是Java开发中广泛应用的一个开源框架,以其依赖注入(DI)和面向切面编程(AOP)为核心,极大地简化了企业级应用的开发。在本文中,我们将深入探讨Spring的源码,尤其是针对"菜鸟"级别的开发者如何逐步...

    spring源码解读-地址.txt

    根据提供的文件信息,本次解读将围绕Spring框架的核心概念与源码分析进行展开。Spring框架作为Java企业级开发中不可或缺的一部分,其源码的学习对于深入理解框架机制、提高开发效率具有重要意义。下面,我们将从以下...

    Spring源码解读.pptx

    Spring Framework的源码解读是一个复杂而深邃的主题,涵盖了诸如Bean的生命周期管理、AOP的实现、IoC容器的工作原理、事件模型等多个方面。理解这些概念不仅有助于提升我们的编码技能,还能帮助我们更好地设计和维护...

    Android设计思想解读开源框架.pdf

    ### Android设计思想解读开源框架 #### 第一章:热修复设计 **第一节:AOT/JIT & dexopt与dex2oat** ##### AOT与JIT - **AOT(Ahead Of Time)**:提前编译,指的是在程序运行之前完成编译的过程。这种编译方式常见...

    android设计思想解读开源框架8.pdf

    组件化框架设计章节,介绍了如何利用阿里巴巴开源的ARouter进行路由管理,APT编译时期的代码生成与动态类加载机制,Java SPI机制,以及AOP(面向切面编程)和IOC(控制反转)的概念及其在Android开发中的应用。...

Global site tag (gtag.js) - Google Analytics