`

面向切面编程(AOP)的理解-几个关键概念的理解(转)

 
阅读更多

    在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录、事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码。当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心业务逻辑处理才那么几行,如图6-4所示。方法复方法,类复类,就这样子带着无可奈何遗憾地度过了多少个春秋。这倒也罢,倘若到了项目的尾声,突然决定在权限控制上需要进行大的变动时,成千上万个方法又得一一"登门拜访",痛苦"雪上加霜"



    如果能把图6-4中众多方法中的所有共有代码全部抽取出来,放置到某个地方集中管理,然后在具体运行时,再由容器动态织入这些共有代码的话,最起码可以解决两个问题:

  Ø  Java EE程序员在编写具体的业务逻辑处理方法时,只需关心核心的业务逻辑处理,既提高了工作效率,又使代码变更简洁优雅。

   Ø  在日后的维护中由于业务逻辑代码与共有代码分开存放,而且共有代码是集中存放的,因此使维护工作变得简单轻松。

   面向切面编程AOP技术就是为解决这个问题而诞生的,切面就是横切面,如图6-5所示,代表的是一个普遍存在的共有功能,例如,日志切面、权限切面及事务切面等。

    

 

  下面我们以用户管理业务逻辑组件UserServiceAOP实现过程(见图6-6)为例,深度剖析一下AOP技术的实现原理。

  AOP技术是建立在Java语言的反射机制与动态代理机制之上的。业务逻辑组件在运行过程中,AOP容器会动态创建一个代理对象供使用者调用,该代理对象已经按Java EE程序员的意图将切面成功切入到目标方法的连接点上,从而使切面的功能与业务逻辑的功能同时得以执行。从原理上讲,调用者直接调用的其实是AOP容器动态生成的代理对象,再由代理对象调用目标对象完成原始的业务逻辑处理,而代理对象则已经将切面与业务逻辑方法进行了合成。

   

 

  现将图6-6中涉及到的一些概念解释如下。

  切面(Aspect):其实就是共有功能的实现。如日志切面、权限切面、事务切面等。在实际应用中通常是一个存放共有功能实现的普通Java类,之所以能被AOP容器识别成切面,是在配置中指定的。

   通知(Advice):是切面的具体实现。以目标方法为参照点,根据放置的地方不同,可分为前置通知(Before)、后置通知(AfterReturning)、异常通知(AfterThrowing)、最终通知(After)与环绕通知(Around5种。在实际应用中通常是切面类中的一个方法,具体属于哪类通知,同样是在配置中指定的。

 

   连接点(Joinpoint):就是程序在运行过程中能够插入切面的地点。例如,方法调用、异常抛出或字段修改等,但Spring只支持方法级的连接点。

    切入点(Pointcut):用于定义通知应该切入到哪些连接点上。不同的通知通常需要切入到不同的连接点上,这种精准的匹配是由切入点的正则表达式来定义的。

   目标对象(Target):就是那些即将切入切面的对象,也就是那些被通知的对象。这些对象中已经只剩下干干净净的核心业务逻辑代码了,所有的共有功能代码等待AOP容器的切入。

 

   代理对象(Proxy):将通知应用到目标对象之后被动态创建的对象。可以简单地理解为,代理对象的功能等于目标对象的核心业务逻辑功能加上共有功能。代理对象对于使用者而言是透明的,是程序运行过程中的产物。

   织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

  

 

  • 大小: 54.9 KB
  • 大小: 74.5 KB
  • 大小: 55.7 KB
分享到:
评论

相关推荐

    面向切面编程aop简介

    面向切面编程(AOP,Aspect Oriented Programming)是Spring框架的重要组成部分,它提供了一种在不修改原有业务代码的基础上,插入额外功能的编程模型。Spring AOP使得开发者能够更方便地实现如日志记录、事务管理、...

    AOP面向切面编程实例

    面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它旨在提高软件的模块化程度,通过将关注点分离到不同的“切面”中来实现。在.NET环境中,AOP通常通过拦截器(Interceptor)或动态代理...

    AOP_使用spring框架进行面向切面编程

    面向切面编程(AOP)是一种编程范式,它旨在减少代码中的重复部分,特别是那些与核心业务逻辑无关但又必须处理的交叉关注点,如日志、事务管理、安全控制等。Spring框架是Java领域中实现AOP的常用工具,它通过提供...

    面向切面编程--AspectJDemo

    面向切面编程(AOP)是一种程序设计范式,它旨在增强软件开发的模块化,通过将关注点分离,使得代码更加整洁、可维护。AspectJ是Java平台上的一个开源框架,它为Java应用程序提供了全面的面向切面编程支持。在...

    基于框架的Web开发-面向切面编程AOP入门.doc

    总的来说,面向切面编程AOP是一种强大的工具,用于管理横切关注点,它使我们能够编写更加模块化、可重用的代码,特别是在大型企业级应用中,如Web开发,它可以极大地提升代码质量和开发效率。通过合理使用AOP,我们...

    面向切面编程的介绍有优点

    面向切面编程(Aspect-Oriented Programming,简称 AOP)是一种编程范式,它通过将横切关注点(cross-cutting concerns)从业务逻辑中分离出来,并将其封装为独立的组件,来降低软件系统的耦合度。AOP 的核心思想是...

    面向切面的编程(AOP)及在Spring中的应用

    总的来说,面向切面编程AOP是一种强大的设计模式,它通过Spring框架的实现,使得在Java应用中实现关注点分离变得更加容易。正确地运用AOP,可以极大地提升代码的整洁性和可维护性,同时降低系统的复杂度。

    java-AOP面向切面编程

    面向切面编程(AOP)是Java开发中的一个重要概念,它是对传统的面向对象编程(OOP)的一个补充。AOP的主要目标是将关注点分离,让系统中的核心业务逻辑与系统服务(如日志、事务管理等)解耦。通过AOP,开发者可以将...

    Spring切面AOP编程的简单模拟实现

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从核心业务逻辑中分离出来,例如日志记录、事务管理等。本教程将通过模拟Spring AOP来阐述如何实现一个简单的切面编程。我们将讨论...

    Spring面向切面编程示例代码

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、安全检查等。本示例代码主要展示了如何在Spring框架...

    面向切面编程 1

    AOP 的实现通常涉及到以下几个关键概念: 1. **切点(Join Point)**:程序执行过程中特定的点,如方法调用、异常处理等,这些点是切面可以插入的地方。 2. **切面(Aspect)**:包含了横切关注点的一组相关处理...

    Spring 面向切面编程AOP实现详解

    Spring 面向切面编程AOP实现详解 面向切面编程(AOP)是一种编程技术,旨在将横切关注点从业务逻辑中分离出来,提高系统的可扩展性和可维护性。Spring 作为一个流行的 Java 框架,提供了完备的 AOP 实现机制。 1. ...

    面向方面编程AOP

    为了更好地理解AOP的工作原理,我们需要了解以下几个核心概念: 1. **Aspect(切面)**:代表了一个横切关注点,即那些分散在整个应用中的、与核心业务逻辑无关的功能,如日志记录或事务管理。 2. **Joinpoint...

    Java Spring AOP 面向切面编程的4种实现

    动态代理是一种在运行时创建代理对象的技术,通常用于实现AOP(面向切面编程)中的横切关注点,比如日志、性能监控等。以下是几种常见的动态代理实现: JDK动态代理: Java通过java.lang.reflect.Proxy类提供了一种...

    SpringBoot整合aop面向切面编程过程解析

    SpringBoot整合AOP面向切面编程过程解析 AOP(Aspect Oriented Programming),即面向切面编程,是一种编程技术,通过预编译方式和运行期动态代理实现程序功能的统一维护。AOP是Spring框架中的一个重要内容,它通过...

    Spring AOP切面编程简介

    在Java世界中,面向切面编程(Aspect-Oriented Programming,简称AOP)是一种编程范式,它允许我们分离关注点,将横切关注点(如日志、事务管理、性能监控等)与业务逻辑代码解耦。Spring框架中的AOP模块提供了实现...

    aopalliance-1.0 jar包

    在Java开发领域,AOP(Aspect Oriented Programming,面向切面编程)是一种强大的设计模式,它允许程序员将关注点分离,比如日志、事务管理等横切关注点,从核心业务逻辑中解耦。aopalliance-1.0.jar是AOP Alliance...

    AOP入门------------------实例

    **AOP(面向切面编程)入门实例** AOP,全称为Aspect-Oriented Programming,是一种编程范式,旨在减少代码中的重复性,提高代码的模块化和可维护性。在Java开发中,AOP主要应用于日志记录、事务管理、性能监控等横...

Global site tag (gtag.js) - Google Analytics