`
kulinglei
  • 浏览: 99434 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

aop的思想和用途

阅读更多
转自http://blog.csdn.net/puny/archive/2007/05/26/1627084.aspx


上个月月底刚完成一个web项目,这个项目一期和二期一共花1年左右时间,跨度达3年之久;3年之中共参与了2个web项目和2个C/S项目,都没有时间空闲下来总结下东西。最近在整理一个项目的需求,之间要反复评审所以可以腾出来一些时间,想把一些积累都整理下。(CSDN的BLOG不敢恭维经常写一大段保存时候程序出问题,没有拷贝还得重新写!)这段时间已经整理出一个轻量级的ORM,下个项目准备使用castle的AOP(aspect#),所以这段时间把AOP的资料整清楚.

AOP是aspect oriented programming的缩写,是面向方面的思想. 那什么是面向方面?它主要运用在什么领域呢?我们已经对面向过程和面向对象(OOP)已经非常耳熟了,从面向过程到面向对象是一种飞跃;我们可以用面向对象思想取代以前的面向过程的思想,但从面向对象发展到面向方面,不是一种取代而是一种补充.面向对象最重要的作用就是解耦,一个系统中用面向对象思想可以解决大部分的东西,但还有一些点和面还不能用OOP(面向对象)来解决,而AOP可以解决OOP不好处理的角落和方面,所以AOP决不是OOP的代替品,是OOP的一种强力补充.

一、面向方面剖析

   在面向对象中我们把重点放在对象上,当然面向方面要在'方面'上做文章.面向方面就是要我们只关注方面,比如有一个需求,我们把它分解成几个方面,包括主业务方面和其他辅助方面;这样在构架某个方面时只专注于该方面,不用在乎其他方面的内容;每个方面都独立钩架清楚了我们再通过AOP框架把它们整合起来.使用AOP能大幅度地降低了各个方面的耦合程度,使在设计各个模块(方面)时能更加高效独立,结构更清晰.举个例子:

我们要做个文章管理系统,传统的做法可以分解成几个模块:文章登记管理主业务功能和日志管理及权限管理;日志管理和权限不相关的话可以独立处理,但处理主业务功能时就要参合日志管理和权限管理,这样模块之间的耦合就非常紧密,如下图:



上图,在设计主业务功能时就要涉及日志管理和权限管理,造成主业务功能模块比较混乱,结构不清晰.以此类推:如果其他模块也相互使用和依赖的话,那模块设计时不只考虑本模块的因素还要考虑其他模块的因素,就变得很复杂了!

当我们引入并使用AOP后,把这个系统分解成三个方面:主业务功能方面(主方面)  日志管理方面和权限管理方面(后面两个是辅助方面).在设计及处理的时候我们可以把这三个方面分配三个不同处理,每个人只需要关心自己方面的内容而不用担心其他方面对他的影响,所有方面都是独立设计的!最后通过AOP框架把这些方面组合起来,满足系统需求.



上图看出, 每个方面都可以独立处理,然后通过AOP把这些方面联系起来.这方式最后生成的系统与传统的做法最后生成系统是一样,但AOP中每个模块的设计更加独立 耦合小 结构清晰 业务处理也很清楚.

二、主要应用领域及用途

目前AOP应用比较多的是在日志管理、权限管理、数据同步和其他业务管理引擎方面;之前我接触的工作流比较多,对这方面的东西比较有经验了,去年设计了这个工作流引擎组件,后来发现如果在这个组件里应用AOP技术相关引伸出来的思想或者技术会非常理想的(这个组件准备这几个月把它完善起来)!所以可以看出AOP应用还是比较广泛的,不仅仅局限于它本身的应用,还可以从其相关应用技术引伸出来思想的使用。

三、AOP相关技术领域

实现AOP思想技术有好几种,目前比较流行的是动态代理和静态织入。静态织入就是在程序编译时把辅助方面的业务关系直接插入到主业务方面代码里面,我认为这种技术将来一定会比较流行的,但现在用这个实现的少(目前好象也不好实现);动态代理是在运行时产生一个 代码类来代理处理各个方面的关系,dotnet现在大多数AOP框架都用这个,比如:sprint.net的AOP框架和castle中的AOP框架(aspect#)都是以动态代理为基础来实现AOP的。后面的文章会持续分析CASTLE的AOP的原理及其使用。

四、总结

这几年框架使用比较多是MVC、ORM、IOC。但AOP还没被广泛使用,很多人都持观望态度;通过这几年的发展AOP框架在不断完善,也逐渐得到认可,其思想和技术也不断延伸。AOP是一种很好的技术和思想,即使你现在不想使用这种框架,了解AOP对你的程序构架也有莫大的好处!

分享到:
评论

相关推荐

    AOP思想和事务注解应用

    AOP思想和事务注解应用

    Android-一个使用AOP思想的Android动态请求框架

    一个使用AOP思想的Android动态请求框架

    论文研究-AOP思想及其在开源框架中的应用 .pdf

    AOP思想及其在开源框架中的应用,吴义芝,高春鸣,AOP(Aspect Oriented Programming)是一种新的编程技术, 它为开发者提供了一种描述横切关注点的机制, 并能够自动将横切关注点编织到面向对象的

    aop介绍

    AOP 的主要思想是将关注点从横向切面转移到纵向切面,例如某个系统的安全机制、事务机制、日志机制等,这些机制都是纵向切面的关注点。AOP 使得编程更加灵活、可维护、可扩展。 AOP 的应用范围 AOP 非常适合开发 ...

    Java动态代理在AOP中的应用

    本文首先介绍了AOP 的基本思想,然后针对它在JAVA 语言 中的实现,具体介绍了JAVA 的动态代理来怎样实现一个简单的AOP 容器

    进击的编程思想!带你学Spring AOP核心编程思想教程 新角度学面向切面编程

    AOP 采取横向抽取机制,取代了传统纵向继承体系的重复性代码,其应用主要体现在事务处理、日志管理、权限控制、异常处理等方面。 目前最流行的 AOP 框架有两个,分别为 Spring AOP 和 AspectJ。Spring AOP 使用纯 ...

    IOC(DI)与AOP概念的理解

    AOP的主要思想是,将关注点分离。关注点是指某个对象或模块所关心的事情。例如,在一个web应用程序中,安全验证、日志记录、事务处理等都是关注点。AOP的目标就是将这些关注点分离出来,避免了对象之间的紧耦合。 ...

    AOP技术及其在J2EE中动态代理实现

    随着软件技术的发展及需求的增加,OOP逐渐表现出其不足之处,AOP在继承OOP基础之上很好地解决了00P ...理,说明了其可行性,体现了AOP技术应用价值和发展前景。 关键词:AOP;动态代理;横切关注点

    Spring教程(Spring3 AOP部分)(私塾在线)视频配套学习资料

    从零到精通Spring3的开发知识;IoC/DI的思想、IoC/DI的运行流程、IoC/DI的开发指导、AOP的思想、AOP的运行流程、AOP应用的设计、Spring对JDBC和Hibernate的支持、Spring的事务、SSH的集成应用

    Android 热更新——非侵入AOP框架

    该框架基于AOP思想,支持经典的AOP使用场景,可应用于日志记录,性能统计,安全控制,事务处理,异常处理等方面。 针对Android平台,Dexposed支持函数级别的在线热更新,例如对已经发布在应用市场上的宿主APK,当...

    java 实现AOP

     按照AOP的思想,我们应该把日志记录代码分离出来。要将这些代码分离就涉及到一个问题,我们必须知道商业逻辑代码何时被调用,这样我们好插入日志记录代码。一般来说要截获一个方法,我们可以采用回调方法或者动态...

    AopAutoTryCatch:使用Javassist(一个自定义的Gradle插件)来实现自动try-catch。 AOP思想取代预防性try-catch

    AopAutoTryCatch 使用Javassist(一个自定义的Gradle插件)来实现自动try-catch用Javassist实现AOP思想,达到一个注解即可自动加try-catch的目的,当然,AOP的应用场景还有很多,这里抛砖引玉,希望给大家一些参考。...

    利用AOP的思想,通过方法交换(Method Swizzle黑魔法思考类似需求的处理方案.zip

    利用AOP的思想,通过方法交换(Method Swizzle黑魔法,修改 ios 系统类库方法)的做法,对登陆权限的统一管理,避免判断逻辑的分散。可以举一反三,思考类似需求的处理方案.zip 软件开发设计:PHP、QT、应用软件开发、...

    Android中AOP的应用实践之过滤重复点击

    与OOP(面向对象编程)万物模块化的思想不同,AOP则是将涉及到众多模块的某一类问题进行统一管理,AOP的优点是将业务逻辑与系统化功能高度解耦,让我们在开发过程中可以只专注于业务逻辑,其他一些系统化功能(如路由、日志...

    Spring框架研究与探讨

    其发展历史从学术领域和研发机构 的运用开始,目前流行的Spring应用程序框架将AOP思想融入了整个框架的设计开发与应用当中。使用Spring框架固然给 我们的编程带来了好处与便利,但是同时存在着一个问题,对于...

    AOP技术基础

    随着研究的逐渐深入,AOP也逐渐发展成一套完整的程序设计思想,各种应用AOP的技术也应运而生。AOP技术在Java平台下是最先得到应用的。就在PARC对于面向方面编程进行研究的同时,美国NortheasternUniversity的博士生...

    ios-iOS架构实践干货:AOP替代基类 MVVM ReactiveObjC JLRoutes组件化.zip

    1. 采用AOP思想,使用 Aspects 来完成替换 Controller ,View,ViewModel基类,和基类说拜拜 2. View层采用 MVVM 设计模式,使用 ReactiveObjC 进行数据绑定 3 .网络层使用 YTKNetwork 配合 ReactiveCocoa 封装...

    Spring AOP

    为了解决这一问题,AOP思想随之产生。在使用面向切面编程的时候,我们仍然在一个地方定义通用功能,但是可以通过声明的方式定义这个功能要以何种方式在何处应用,而无需修改受影响的类。横切关注点可以被模块化为...

    java面试题

    spring使用AOP面向切面的思想进行事务管理的。 spring和Hibernate继承后,定义事务管理特性的时候查询为什么要定义为read-only? 答:因为添加、删除和更新都涉及到了数据库的修改,而查询并未涉及到数据库修改,...

Global site tag (gtag.js) - Google Analytics