AOP是什么? ( 转自 板桥里人 http://www.jdon.com 2004/01/09)

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

为什么要区分J2EE容器和J2EE应用系统?

  我们知道,J2EE应用系统只有部署在J2EE容器中才能运行,那么为什么划分为J2EE容器和J2EE应用系统? 通过对J2EE容器运行机制的分析(见我的电子教材“EJB实用原理”),我们可以发现:实际上J2EE容器分离了一般应用系统的一些通用功能,例如事务机制、安全机制以及对象池或线程池等性能优化机制。

  这些功能机制是每个应用系统几乎都需要的,因此可以从具体应用系统中分离出来,形成一个通用的框架平台,而且,这些功能机制的设计开发有一定难度,同时运行的稳定性和快速性都非常重要,必须经过长时间调试和运行经验积累而成,因此,形成了专门的J2EE容器服务器产品,如Tomcat JBoss、Websphere、WebLogic等。

  从J2EE系统划分为J2EE容器和J2EE应用系统两个方面,我们已经看到一种分散关注的思路(separation of concerns)。

分散关注

  将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。

   AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。

AOP是什么?

  AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。

  举例:假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。

  为了完成上述并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问。

  使用传统的编程习惯,我们会创建一个抽象类,所有的访问类继承这个抽象父类,如下:

abstract class Worker{

  abstract void locked();
  abstract void accessDataObject();
  abstract void unlocked();

}


  缺点:
  • accessDataObject()方法需要有“锁”状态之类的相关代码。
  • Java只提供了单继承,因此具体访问类只能继承这个父类,如果具体访问类还要继承其它父类,比如另外一个如Worker的父类,将无法方便实现。
  • 重用被打折扣,具体访问类因为也包含“锁”状态之类的相关代码,只能被重用在相关有“锁”的场合,重用范围很窄。

    仔细研究这个应用的“锁”,它其实有下列特性:
  • “锁”功能不是具体访问类的首要或主要功能,访问类主要功能是访问数据对象,例如读取数据或更改动作。
  • “锁”行为其实是和具体访问类的主要功能可以独立、区分开来的。
  • “锁”功能其实是这个系统的一个纵向切面,涉及许多类、许多类的方法。如下图:

  因此,一个新的程序结构应该是关注系统的纵向切面,例如这个应用的“锁”功能,这个新的程序结构就是aspect(方面)

  在这个应用中,“锁”方面(aspect)应该有以下职责:

  提供一些必备的功能,对被访问对象实现加锁或解锁功能。以保证所有在修改数据对象的操作之前能够调用lock()加锁,在它使用完成后,调用unlock()解锁。

AOP应用范围

  很明显,AOP非常适合开发J2EE容器服务器,目前JBoss 4.0正是使用AOP框架进行开发。
  具体功能如下:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging  调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence  持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务

AOP有必要吗?

  当然,上述应用范例在没有使用AOP情况下,也得到了解决,例如JBoss 3.XXX也提供了上述应用功能,但是没有使用AOP。

  但是,使用AOP可以让我们从一个更高的抽象概念来理解软件系统,AOP也许提供一种有价值的工具。可以这么说:因为使用AOP结构,现在JBoss 4.0的源码要比JBoss 3.X容易理解多了,这对于一个大型复杂系统来说是非常重要的。

  从另外一个方面说,好像不是所有的人都需要关心AOP,它可能是一种架构设计的选择,如果选择J2EE系统,AOP关注的上述通用方面都已经被J2EE容器实现了,J2EE应用系统开发者可能需要更多地关注行业应用方面aspect。


AOP具体实现

  AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java),目前AOP具体实现有以下几个项目:

  AspectJ (TM): 创建于Xerox PARC. 有近十年历史,成熟
  缺点:过于复杂;破坏封装;需要专门的Java编译器。

  动态AOP:使用JDK的动态代理API或字节码Bytecode处理技术。

  基于动态代理API的具体项目有:
  JBoss 4.0 JBoss 4.0服务器
  nanning 这是以中国南宁命名的一个项目,搞不清楚为什么和中国相关?是中国人发起的?

  基于字节码的项目有:
  aspectwerkz 
  spring ?

在以后其它文章中,我将继续对AOP概念进行分析,和大家一起学习进步。

参考资料:
http://www.jdon.com/AOPdesign/decomposition
Aspect-Oriented_Java_Development.pdf

AOP(Aspect Oriented Programming)是什么? AOP是什么? 板桥里人 http://www.jdon.com 2004/01/09为什么要区分J2EE容器和J2EE应用系统?  我们知道,J2EE应用系统只有部署在J2EE容器中才能运行,那么为什么划分为J2EE容器和J2EE应用系统? 通过对J2EE容器运行机制的分析(见我的电子教材“EJB实用原理”),我们可以发现:实际上J2EE容器分离了一般应用系统的一 阅读详情

相关推荐

什么是AOP

AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构OOP(Object Oriented Programming)面向对象编程作用:在不惊动原始设计的基础上为其进行功能增强。简单的说就是在不改变方法源代码的基础上对方法进行功能增强。Spring理念:无入侵式/无侵入式。

m0_70619994的博客 7030

AOP是什么?

3、连接点【Joinpotint】

weixin_54877075的博客 7703

AOP是什么?如何使用AOP

AOP就是面向切面编程,或者叫面向方面编程,或者开玩笑的说叫面向方便面编程在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。用我的话讲,比如一个方法,他只能计

weixin_64572002的博客 3万+

1.什么是AOP?2. 为什么使用AOP 3.AOP应用场景4. AOP的结构 5.如何使用AOP5.1切面通知处理

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。AOP:它是面向切面编程的语言,它可以让你的业务代码和非业务代码进行隔离。

weixin_64636083的博客 1074

AOP(面向切面编程)全面解析

AOP(Aspect-Oriented Programming),即面向切面编程,是一种通过分离应用中的横切关注点(Cross-Cutting Concerns)来实现模块化的软件开发范式。AOP的核心思想是将某些通用功能(如日志、事务管理、异常处理等)从业务逻辑代码中剥离出来,形成独立的切面模块。AOP允许我们在不修改原始代码的情况下为程序添加额外的功能,从而实现代码的解耦和复用。通俗地说,AOP是通过切面来定义和隔离特定操作的编程方式,使得开发者可以在程序的不同部分“切入”这些操作。

hello.reader 7029

什么是 AOPAOP 的作用是什么?

面向切面编程是一种强大的编程范式,通过将横切关注点从主要业务逻辑中抽离出来,提高了代码的模块化、可维护性和可扩展性。AOP的实现方式多种多样,开发人员可以根据具体需求选择合适的方式。使用AOP时需要注意合理划分切面,避免过度使用AOP导致系统难以理解和调试。同时,对于不同的横切逻辑,可以考虑使用不同的通知类型,以便更好地组织和管理代码。总体而言,AOP是现代软件开发中的一项重要技术,它为开发人员提供了一种新的思路和工具,帮助我们更好地构建可维护、可扩展的软件系统。

Itmastergo的博客 3593

AOP和动态代理之间的关系

1.什么是AOP AOP的全称是Aspect-Oriented Programming,即面向切面编程(也称面向方面编程)。它是面向对象编程(OOP)的一种补充,目前已成为一种比较成熟的编程方式。 在传统的业务处理代码中,通常都会进行事务处理、日志记录等操作。虽然使用OOP可以通过组合或者继承的方式来达到代码的重用,但如果要实现某个功能(如日志记录),同样的代码仍然会分散到各个方法中。这样,如果想...

qq_37745636的博客 9744

AOP详解

AOP详解

weixin_64811434的博客 2629

设计模式之面向方面(AOP

简介 AOP(Aspect-OrientedProgramming,面向方面编程),它是OOP(Object-Oriented Programing,面向对象编程)的补充和完善。 OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。 OOP允许你定义从上到下的关系,但并不适合定义从左到右的关系。例如日...

大道至简 1907

spring专题系列之AOP的理解和分析

今天是五一收假以来的第一天,距离下一周一共还有四天,这周主要是对Spring的重学习。这四天内我将从以下几个角度进行分析和理解。 (1)AOP的理解和分析 (2)IOC的理解和分析 (3)对bean的理解和分析 (4)spring配置文件的理解和分析 首先今天对AOP的理解和分析,对aop的理解也分开阐述,对一个技术的思考,基本上都是从上学时候课本阐述一个新知识的顺序进行的。 第一:什么是AOP? 第二:为什么要引入AOP?或者是AOP解决了什么问题? 第三:如何简单的实现AOP? 第四:AOP对我们写代码

冯冬冬的博客 677

理解AOP

Aspect Oriented Programming  面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。 具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流。 AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能。最常见的就是事务控制。工作之余,对于使用的工具,不免需要了解其所以然。

原创学无止尽 316

Aop是什么?

/1声名是一个切面类//2 交给ioc管理//3.添加日志记录@Aspect@Component@Slf4j//定义一个通知log.info("方法放行前");//环绕通知的方法放行log.info("方法放行后");在springboot的专门 测试类SpringbootJavawebMybatisApplicationTests中定义单元测试调用TestAopImpl里实现的方法//注入依赖@Autowired@Test。

m0_67646306的博客 3357

什么是AOP

笔记

jlcheerful的博客 1657

设计模式--谈谈AOP 面向切面编程

1. AOP AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的一种技术。 AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。 利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率 面向方面编程(AOP)通过提供考虑程序结构的另一种方法来补充面向对象编程(OOP)。OOP中模块化的关键单元是

penriver的博客 2412

AOP详细说明以及基本使用

AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

Hvitur的博客 598

Spring-----AOP简介

需要了解Spring的AOP(面向切面编程),必须要了解一种设计模式——代理模式。 1、代理模式 SpringAOP的底层 代理模式的分类: 静态代理 动态代理 1.1、静态代理 角色: 抽象角色:一般使用接口或者抽象类 真实角色:被代理的角色 代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作 客户:访问代理对象的人! 代理模式的好处 可以使真实角色操作更纯粹,不用去关注一些公共的业务 公共业务交给了代理角色,实现了业务的分工 公共业务发生扩展的时候,方便集中管理 1.2、动

qq_44769557的博客 407

spring面试复习-0715

spring面试复习-0715

qq_51131591的博客 1037
上一篇: 自己编写JAVA环境下的文件上传组件
Ryan76
博客等级 码龄24年 0粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值