`

面向切面编程(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
分享到:
评论

相关推荐

    不要小瞧面向切面编程

    本文介绍Spring AOP,面向切面编程。在权限验证、保存日志、安全检查和事务控制等多个应用场景之下都会依赖该技术。以下是在自己学习过程中的一些总结,如有错误,还望指正。 面向切面的定义  面向切面编程(AOP)...

    面向切面编程(AOP)的理解

    在传统的编写业务逻辑处理代码时,我们通常会习惯性地做几件事情:日志记录、事务控制及权限控制等,然后才是编写核心的业务逻辑处理代码。当代码编写完成回头再看时,不禁发现,扬扬洒洒上百行代码中,真正用于核心...

    Android切面编程入门讲解

    切面编程AOP(aspect-priented programming)是为了解决OOP中耦合无法解除的问题而产生的。 打个比方现在项目中有负责网络/数据存储/UI几个模块,每个模块都接入了另外一个Log模块。 虽然Log不属于前面三个的功能,但...

    Android切面编程知识点详解

    切面编程AOP(aspect-priented programming)是为了解决OOP中耦合无法解除的问题而产生的。 打个比方现在项目中有负责网络/数据存储/UI几个模块,每个模块都接入了另外一个Log模块。 虽然Log不属于前面三个的功能,但...

    C#进阶系列??AOP

     老规矩,还是先看官方解释:AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方法论,...

    浅谈C# AOP的简单实现

    老规矩,还是先看官方解释:AOP(Aspect-Oriented Programming,面向切面的编程),它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方

    Spring5种增强代码

    面向切面编程(AOP)是一种编程技术,AOP联盟定义了一套用于规范AOP实现的底层API,现在已经推出了几个项目。

    iOS开发你需要知道的

    此资源是本人从事iOS开发以来,实际工作中遇到的问题及坑点的总结。皆在为后来者提供一种思路或解决方案, “授人以鱼,不如授...iOS面向切面编程AOP 框架 Aspects库的使用 Swift技术相关 oc底层技术解密 iOS 动画相关

    Spring框架生态流程框架图-执行运行路程图

    AOP(面向切面编程)功能:Spring框架提供了AOP功能,通过切面(Aspect)来实现横切关注点的模块化。在AOP中,开发人员可以定义切点(Pointcut)和增强(Advice),以在应用程序的不同位置插入额外的逻辑。

    Spring AOP 原理剖析,这一篇就够

    AOP(面向切面编程)方面的知识又是看了忘忘了看,今天有空记录下AOP的知识点。主要分为以下几方面: ​ 1、AOP相关术语 ​ 2、基础知识及示例 ​ 3、增强分类 1、AOP相关术语 连接点(Joinpoint) 一个类拥有...

    使用AOP改善javascript代码

    Aop又叫面向切面编程,用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点,这篇就通过下面这几个小例子,来说说AOP在js中的妙用. 1, 防止[removed]被二次覆盖. 2,无侵入的统计代码. 3, ...

    2023java面试题大全及答案大厂面试经典问题

    一般称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时...

    Java的反射机制讲解案例代码 Class类、 获取类的结构信息:构造函数、方法和字段,动态创建对象、调用方法和设置属性

    内容概要 Java的反射机制是指在运行时通过...实现动态代理和AOP(面向切面编程)等高级特性。 掌握反射机制的目标是能够在运行时获取类的信息,并灵活地利用这些信息来完成所需的操作,以增加程序的灵活性和可扩展性。

    Java框架部分SSM笔记

    Spring框架:依赖注入、面向切面编程(AOP)、事务管理等。 SpringMVC:作为表现层框架,处理HTTP请求和响应。 Spring Boot:简化新Spring应用的初始搭建以及开发过程。 MyBatis:持久层框架,用于数据库交互和SQL映射...

    2021-数据库系统原理试题.docx

    检查点的执行频率如何影响以下几个方面: 1、 没有故障发生时系统的性能。 2、 从系统崩溃中恢复所占用的时间。 3、 从磁盘崩溃中恢复所占用的时间。 八、(10分) 查询优化的方法主要有几类?分别叙述每类方法的...

    java面试题

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

    Java语言基础下载

    目录 第一章:Java开始 1 学习目标 1 Java历史 2 Java技术概述 3 Java技术的优点 3 ...AOP面向切面编程 715 AOP的专业术语 715 Spring事务管理 718 Spring与Struts整合 719 Spring与Hibernate整合 721 独立实践 724

    LMP:模块化DDD快速开发框架DEMO

    一个基于 ASP.NET Boilerplate 开发框架的示例项目 ...思想: DDD(领域驱动设计)、TDD(测试驱动设计)、DI/AOP(依赖注入/面向切面编程)、模块化开发、异步编程、分布式架构、敏捷开发之SCRUM 技术/框架:Asp.ne

    JAVA自学之路

    Spring IOC + AOP, 面向对象 + 面向切面,完善的旅程。 把以前自己的小项目加入Struts、Spring、Hibernate的元素吧。 去研究各种商业项目的业务逻辑吧,才能在你的简历中加入浓重的一笔。 EJB3.0,java在走了...

Global site tag (gtag.js) - Google Analytics