AOP,面向切面编程。
举一个最简单的例子说明什么是面向切面编程,银行柜员机程序,它实现的商业逻辑很简单,如果客户取钱就在客户的帐户上做减法,如果存钱就做加法。这样的开发任务交给程序员他最开心,因为这对他来说小菜一碟。
而实际上银行和客户对只实现这2个功能的程序是不放心的,于是就引进了事务处理保证操作的完整性、日志功能完成报表稽核,这时程序员就要郁闷了:要分析每一个商业逻辑,在代码开始的部分声明事务开始、代码结束的部分声明事务结束,还要捕获中间发生的异常,进行异常处理;对于涉及到资金变化的逻辑结束的时候要写日志,这个相对简单,但是成百上千的ctrl+c\ctrl+v对程序员来说是也是不能忍受的。
从上面的例子可以看到,我们真正需要的可能就那么一两条代码,而实际上我们已经写了一二十行。AOP就是来解决这种问题的。让程序员只关注核心代码,切面代码(上面的事务处理、日志记录就是切面,后面还会讲到)进行模块化。实际使用大概是这样的:对于事务处理,程序运行到核心代码处,拦截器(AOP框架提供的)激活,触发事务处理切面代码声明事务开始,核心代码结束,拦截器再次激活,触发事务处理切面代码事务提交。
这样我们可以让高级程序员先编写事务处理切面模块,测试通过后就可以给初级程序员用了;初级程序员们负责编写各种各样的商业核心逻辑代码,测试通过后提交给配置程序员,配置程序员将商业代码和切面模块进行组合配置,最后进行合并测试,测试通过,结束。按这种方式开发,方便测试、程序模块之间低耦合、非侵入式,是不是老板开心、程序员也开心呢?
刚开始看AOP的时候总是被它的那些概念搞得一头雾水,这里是我的一些理解:
- Concern(要素):程序关注的一个区域。比如,有适合AOP的像事务处理和不适合的像产品组合分类(适合OOP)。
- Crosscutting Concern(横切要素):Concern的一种,其实就是适合AOP的Concern,横切我理解是和OOP相对的意思,OOP一般都是继承树,而横切就将有相同需要的类放到了一个平面进行处理。好像父类生物,下面继承有大白菜、猪,我们横切这2个类,放到我们的食品工厂要进行食品罐装加工(第一步清洗杀菌...最后一步打印生产日期)这样就分别生产出了韩国泡菜和午餐肉。
- Aspect(切面),Crosscutting Concern的模块化,将抽象的东西Crosscutting Concern具体了一下。如事务处理、食品罐装加工。
- Join Point(连接点):程序或类执行过程中的一个点。一般是核心商务逻辑的某一个方法,好像银行柜员机程序的资金入库方法saveMoney()。
- Advice(通知):在Join Point上执行的一个动作,通知一般通过拦截器调用。有这几种类型的Advice,around(包围型)、before、after。事务处理就是around型,日志记录是after型。
- Pointcut(切入点):这个东东很有用,它是一系列的Join Point,用通配符或者正则表达式表示,比如save*表示所有以save开头的方法,Pointcut和Advice绑定,这样Advice就可以通知满足条件的一类Join Point。比如所有事务处理切面around以save开头和update开头的方法,而select开头的方法不受影响。
- Introduction(引入):不是很理解,以后补充吧。
- Target Object(目标对象):包含Join Point的对象,也就是被就Advice的类,也就是是商务逻辑对象,比如银行柜员机类。这个对象永远是一个被代理的对象。
- AOP Proxy(AOP代理):由AOP框架创建的对象,实现advice的执行。
- Weaving(织入):将Aspec模块织入核心商务逻辑,比如,将事务处理模块和银行柜员机程序通过配置结合起来,决定什么情况下事务处理模块被通知调用。
分享到:
相关推荐
`SpringAop.ppt`文件很可能包含了一个详细的讲解,涵盖了Spring AOP的基本概念、配置方式、使用注解声明切面、基于XML的配置以及如何自定义切面。PPT通常会通过图表、代码示例和流程图来帮助理解复杂的概念,使得...
在本实例代码中,我们将深入探讨Spring AOP的基本概念、核心组件以及如何在实际项目中应用。 首先,了解AOP的基本理念是理解其工作原理的关键。AOP是一种编程范式,旨在减少代码重复,提高可维护性和可读性。在传统...
本文将深入探讨Spring AOP的基本概念、核心术语以及如何通过实例来应用它。 ### 1. Spring AOP 概念 - **切面(Aspect)**: 切面是关注点的一个模块化,它包含了横切关注点的定义。在Spring中,切面可以是独立的类...
AOP 基本概念 AOP 的 existence 目的是为了解耦,使得一组类可以共享相同的行为。在 OOP 中只能通过继承类和实现接口来实现,但是这样的缺点是会使代码的耦合度增加,且类继承只能为单继承,阻碍更多行为添加到一组...
1. **AOP基本概念**:介绍AOP的核心概念,包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切入点(Pointcut)和织入(Weaving)。 2. **Spring AOP简介**:讲解Spring框架如何提供AOP支持,包括基于...
1. **AOP基本概念**:首先,我们会理解什么是面向切面编程,它与传统的面向对象编程的区别,以及它为何能在解决系统中横切关注点问题上表现出优越性。 2. **Spring AOP实现方式**:Spring提供了两种AOP实现,一种是...
首先,我们来理解一下AOP的基本概念。AOP的核心是切面(Aspect)和通知(Advice)。切面是跨越多个对象的行为或责任的模块化,它封装了多个类中相似的代码。通知则是在特定连接点(Join Point)执行的代码,如方法...
1. aop.doc - 这可能是关于AOP的一份文档,可能包含了AOP的基本概念、核心概念(如切面、通知、连接点等)、实现机制和优势。 2. Aspect-Oriented Programming in Java.mht - 这个文件名表明它是一个关于Java语言中...
### 二、Spring AOP的基本概念 1. **切面(Aspect)**:切面是封装了横切关注点的模块,它包含通知(advice)和切入点(pointcut)。 2. **通知(Advice)**:在特定的连接点(Join Point)执行的代码,如方法调用...
通过阅读这些文档,开发者不仅可以了解Spring的基本概念和使用方法,还能深入探索其高级特性,提高在实际项目中的应用能力。同时,中文版的资料使得中文环境下的学习更为方便,消除了语言障碍,有助于国内开发者更好...
首先,了解AOP的基本概念。AOP通过将关注点与业务逻辑分离,提高了代码的可读性和可维护性。在Spring中,AOP主要分为两种实现方式:基于XML配置和基于注解。本示例主要探讨注解方式。 1. **定义切面(Aspect)** ...
本文将详细讲解与标题"AOP需要的Jar包"相关的知识点,包括AOP的基本概念、Spring AOP的实现机制以及相关依赖库的作用。 首先,AOP(Aspect Oriented Programming)是一种编程范式,它允许程序员将关注点分离到单独...
首先,了解AOP的基本概念。AOP是一种编程范式,旨在解决程序中分散的、与业务逻辑不直接相关的部分,如日志记录、事务管理、性能监控等。通过AOP,这些关注点可以被定义为“切面”,并在运行时自动应用到合适的位置...
1. AOP的基本概念:解释什么是切面、通知(advice)、连接点(join point)、切入点(pointcut)和织入(weaving)。 2. Spring AOP的实现方式:介绍基于代理的AOP(包括JDK动态代理和CGLIB代理)以及基于注解的AOP...
首先,我们来理解Spring AOP的基本概念。AOP的核心是代理,Spring提供了两种代理方式:JDK动态代理和CGLIB代理。JDK动态代理基于接口,当目标对象实现了接口时使用;而CGLIB代理则是在运行时动态创建目标类的子类,...
在IT行业中,Spring AOP(面向切面编程)和Ehcache是两个非常重要的概念,它们经常被结合在一起用于实现高效的应用程序缓存系统。在这个"AOP Cache源代码"项目中,我们可以看到如何利用这两者来提升应用性能。下面将...
首先,了解AOP的基本概念。面向切面编程是一种编程范式,旨在减少代码重复,并将关注点分离。它将那些与业务逻辑不直接相关的部分(如日志、异常处理、性能统计等)抽取出来,形成独立的“切面”,然后在运行时动态...
1. **Activiti简介**:解释Activiti的基本概念,如流程定义、流程实例、任务等。 2. **AOP基础**:介绍AOP的核心概念,如切面、通知、切入点表达式等。 3. **整合Activiti与AOP**:讲解如何在Activiti流程中引入AOP...
在深入讲解JBoss AOP之前,我们需要了解AOP的基本概念。AOP是一种编程范式,它允许程序员定义“切面”,切面封装了跨越多个对象的行为或责任。这些切面可以被插入到应用程序的多个点,这些点被称为“连接点”(Join ...
通过系统学习,你不仅可以理解Spring的基本概念和核心功能,还能掌握实际项目中的应用技巧,从而在开发过程中更加游刃有余。无论是初学者还是经验丰富的开发者,都可以从中受益,不断提升自己的技术水平。