面向过程编程离我们已经有些遥远,面向对象编程正主宰着软件世界。当每个新的软件设计师都被要求掌握如何将需求功能转化成一个个类,并且定义它们的数据成员、行为,以及它们之间复杂的关系的时候,面向方面编程(Aspect-Oriented Programming,AOP)为我们带来了新的想法、新的思想、新的模式。
如果说面向对象编程是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系的话;那么面向方面编程则是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。
面向方面编程是一个令人兴奋不已的新模式。就开发软件系统而言,它的影响力必将会和有着十数年应用历史的面向对象编程一样巨大。面向方面编程和面向对象编程不但不是互相竞争的技术而且彼此还是很好的互补。面向对象编程主要用于为同一对象层次的公用行为建模。它的弱点是将公共行为应用于多个无关对象模型之间。而这恰恰是面向方面编程适合的地方。有了 AOP,我们可以定义交叉的关系,并将这些关系应用于跨模块的、彼此不同的对象模型。AOP 同时还可以让我们层次化功能性而不是嵌入功能性,从而使得代码有更好的可读性和易于维护。它会和面向对象编程合作得很好。
AOP 的应用范围
传统的程序通常表现出一些不能自然地适合单一的程序模块或者是几个紧密相关的程序模块的行为,AOP 将这种行为称为横切,它们跨越了给定编程模型中的典型职责界限。横切行为的实现都是分散的,软件设计师会发现这种行为难以用正常的逻辑来思考、实现和更改。最常见的一些横切行为如下面这些:
日志记录,跟踪,优化和监控
事务的处理
持久化
性能的优化
资源池,如数据库连接池的管理
系统统一的认证、权限管理等
应用系统的异常捕捉及处理
针对具体行业应用的横切行为
目前,前面几种横切行为都已经得到了密切的关注,也出现了各种有价值的应用,但也许今后几年,AOP 对针对具体行业应用的贡献会成为令人关注的焦点。
AOP 的具体实现
AOP 是一个概念,一个规范,本身并没有设定具体语言的实现,这实际上提供了非常广阔的发展的空间。AspectJ是AOP的一个很悠久的实现,它能够和 Java 配合起来使用。
介绍 AspectJ 的使用和编码不是本文的目的,你可以在 Google 上找到很多有关它的材料。
这里只是重温 AspectJ 中几个必须要了解的概念:
Aspect: Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
Joint point:表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
Pointcut:表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice:Advice 定义了在 pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
下面要讨论的这些问题,也许正是接触了 AOP 之后所困惑的。
AOP 帮助我们解决了新的问题没有?
AOP 并没有帮助我们解决任何新的问题,它只是提供了一种更好的办法,能够用更少的工作量来解决现有的一些问题,并且使得系统更加健壮,可维护性更好。同时,它让我们在进行系统架构和模块设计的时候多了新的选择和新的思路。
AOP 和 OOP 到底是什么关系
很多人在初次接触 AOP 的时候可能会说,AOP 能做到的,一个定义良好的 OOP 的接口也一样能够做到,我想这个观点是值得商榷的。AOP和定义良好的 OOP 的接口可以说都是用来解决并且实现需求中的横切问题的方法。但是对于 OOP 中的接口来说,它仍然需要我们在相应的模块中去调用该接口中相关的方法,这是 OOP 所无法避免的,并且一旦接口不得不进行修改的时候,所有事情会变得一团糟;AOP 则不会这样,你只需要修改相应的 Aspect,再重新编织(weave)即可。 当然,AOP 也绝对不会代替 OOP。核心的需求仍然会由 OOP 来加以实现,而 AOP 将会和 OOP 整合起来,以此之长,补彼之短。
AOP 适合工业化的应用吗?
这个问题很难回答,其实最好的答案就是尝试,用成功的项目或是产品来回答。Jboss 4.0 就是完全采用 AOP 的思想来设计的 EJB 容器,它已经通过了 J2EE 的认证,并且在工业化应用中证明是一个优秀的产品。相信在不远的将来,会出现更多采用 AOP 思想设计的产品和行业应用。
小结
AOP 正向我们走来,我们需要关注的是怎么样使得它能够为我们的软件系统的设计和实现带来帮助。本文旨在给大家一点启发,能够在更多的领域更深入的应用 AOP 的思想。
分享到:
相关推荐
当我们谈到“AOP开发环境jar包”时,通常是指一组能够支持AOP编程的库和工具,这些库包括Spring框架中的AOP模块或其他AOP实现。 描述中的“这个不会出现jar包版本不匹配问题,我可是弄了一天啊”可能意味着发布者...
此外,使用AOP后,代码能够更好地反映设计意图,因为业务逻辑和横切关注点被清晰地划分开来。 在现实世界中,已有庞大的C++代码库,这些代码经常需要维护和扩展。使用AOP,开发者可以更容易地对这些代码进行维护,...
总的来说,AOP为软件开发带来了一种全新的视角,使得开发者能够专注于业务逻辑的实现,而将那些横切关注点交由AOP来处理。通过AOP,我们可以更加模块化地开发和维护大型应用程序,提高软件的整体质量和可维护性。在...
**AOP概述** AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,旨在将关注点分离,使得程序中的...在实际开发中,我们需要权衡AOP带来的便利性和可能带来的问题,合理地利用AOP来优化我们的系统。
总的来说,AOP-7104B和AOP-7108B视频采集卡是专业级的视频处理硬件,配合对应的驱动程序和服务器软件,能够为用户带来高效、高质量的视频采集和编辑体验。对于媒体制作、直播、监控等领域来说,这类设备是不可或缺的...
### 通过AOP重新解读23个经典GOF模式 ...尤其是在模式解决方案结构涉及到某种形式的交叉关注点时,AOP的应用能够带来最为显著的效果。因此,对于软件开发者来说,学习和掌握面向切面编程的技术是非常有价值的。
然而,AOP也会带来一些挑战,如理解并正确配置切面可能会增加复杂性,以及可能影响程序的运行效率。因此,开发者需要根据实际项目需求来权衡是否使用AOP,并合理设计切面。 总之,AOP是软件设计的一种补充,它提供...
Spring AOP(面向切面编程)是Spring框架的重要组成...通过实际操作,我们能够体会到AOP带来的便利,以及如何通过解耦关注点来提升代码的可维护性和可扩展性。对于初学者来说,这是掌握Spring AOP的一个很好的起点。
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下...通过合理配置和使用aspectj-1.7.4.jar和aspectjweaver-1.7.4.jar,开发者可以在Java 7环境中享受到AOP带来的诸多益处。
总之,Spring 对 AOP 的支持让我们能够优雅地处理横切关注点,使代码更加模块化,提高了代码的可读性和可维护性。通过结合 AspectJ 的注解和 Spring 的自动代理机制,我们可以方便地实现面向切面的编程,为我们的...
《Spring AOP 4.0.0.RELEASE:深度解析与应用》 Spring AOP(Aspect Oriented Programming,面向切面编程)是...理解并掌握这些核心概念和实践技巧,能够帮助我们更好地利用Spring AOP构建健壮且易于维护的系统。
为了解决这一问题,LarsHoss和DonBrown开发了SAIF(Struts Action Invocation Framework),这是一种插件机制,能够为Struts框架引入AOP的能力。SAIF通过提供一种拦截器机制,允许开发者在不修改原始Action代码的情况...
通过以上步骤,我们可以实现一个基于AOP的读写分离系统。然而,需要注意的是,虽然读写分离能提高性能,但也会增加系统复杂性,可能带来数据一致性问题。因此,在设计和实施时,要充分权衡利弊,根据实际业务需求...
**AOP(面向切面编程)**是一种编程范式,旨在将关注点分离,使得系统中的业务逻辑与横切关注点(如日志、事务管理、权限验证等)能够解耦。AOP通过在程序运行时动态插入代码片段来实现这一目标,这些插入的代码被...
AspectJ是Java平台上的一个开源框架,它提供了强大的AOP支持,使得开发者能够方便地定义和实现切面。 **AspectJ关键概念** 1. **切面(Aspect)**:切面是AOP的核心,它封装了特定的关注点,如日志、事务等。一个...
在AOP事务切面中,我们需要处理好异常,确保在异常情况下能够正确回滚事务。 8. **AOP框架集成**:如果你的项目使用了某种IoC(Inversion of Control)容器(如Autofac、Unity或Ninject),那么可以利用它们的AOP...
通过使用切点表达式和织入机制,AOP框架能够精确地控制切面何时、何地以及如何影响程序的执行。 在实际应用中,AOP可以显著提高代码的清晰度和可维护性。例如,通过定义一个日志切面,我们可以确保所有需要记录操作...
《Spring AOP 深入理解与应用》 在Java EE开发中,Spring框架因其强大的功能和灵活性,已经成为事实上的标准。...掌握Spring AOP能够帮助我们编写更整洁、更易于维护的代码,提高软件的可扩展性和可复用性。