分散关注
将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,
只要修改这个行为就可以。
AOP概述
AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延
续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
AOP具体实现
AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java),目前AOP具体实现有以下几个项目:
AspectJ (TM): 创建于Xerox PARC. 有近十年历史,技术成熟。缺点:过于复杂;破坏封装;需要专门的Java编译器。
动态AOP:使用JDK的动态代理API或字节码Bytecode处理技术。
连接点(JoinPoint)
指那些被拦截到的点,在spring中,这些点指的是方法,因为spring只支持方法类型的连接点。
基本每个方法的前、后(两者都有也行),或抛出异常时都可以是连接点
通知(Advice)
指拦截到joinpoint之后所要做的事情,分为 前置通知、后置通知、异常通知(例外通知和最终通知)、环绕通知
例如:
public Object intercept(Object proxy, Method method, Object[] args,
MethodProxy methodProxy) throws Throwable {//环绕通知(整个方法)
PersonServiceImp personServiceImp=(PersonServiceImp)this.targetObject;
Object result=null;
if(personServiceImp.getUser()!=null){
//前置通知
try{
result=methodProxy.invoke(this.targetObject, args);
//后置通知
}catch(Exception e){
//例外通知
}finally{
//最终通知
}
}
return result;
}
切入点(Pointcut)
上面说的连接点的基础上,来定义切入点,你的一个类里,有15个方法,那就有几十个连接点了对把,但是你并不想在所有方法附近都使用通知,
你只想让其中的几个,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
切面(Aspect)
切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。
通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
引入(introduction)
允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗
目标(target)
引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。
代理(proxy)
实现整套aop机制
织入(weaving)
把切面应用到目标对象来创建新的代理对象的过程。有3种方式,spring采用的是运行时
分享到:
相关推荐
首先,了解AOP的基本概念。面向切面编程是一种编程范式,旨在减少代码重复,并将关注点分离。它将那些与业务逻辑不直接相关的部分(如日志、异常处理、性能统计等)抽取出来,形成独立的“切面”,然后在运行时动态...
本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你深入理解这一强大的编程模式。 一、AOP概念 1. Joinpoint(连接点):在Spring AOP中,Joinpoint指的是程序执行的某个特定点...
首先,我们要理解AOP的基本概念。AOP是一种编程范式,它允许开发者定义“切面”,这些切面可以包含业务逻辑的各个部分,比如日志、安全检查等。在运行时,这些切面会被“织入”到其他对象中,使得关注点分离,提高了...
在本教程中,我们将深入探讨Spring AOP的基本概念、配置以及如何在实践中应用。 首先,Spring AOP的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切入点(Pointcut)和织入(Weaving)。切...
- `aspectjrt.jar`:AspectJ运行时库,实现了AOP的核心概念,如切面、通知、连接点等。 - `aspectjweaver.jar`:AspectJ的织入器,可以在编译时或运行时动态地将切面织入到目标代码中。 - `aopalliance.jar`:一...
C#中的AOP(Aspect-Oriented Programming,面向切面编程)是一种编程范式,它旨在提高代码的可重用...这个案例不仅涵盖了基本的AOP概念,还可能涉及实际开发中的一些最佳实践和技巧,对于提升软件设计能力非常有帮助。
首先,我们来理解Spring AOP的基本概念。AOP的核心是代理,Spring提供了两种代理方式:JDK动态代理和CGLIB代理。JDK动态代理基于接口,当目标对象实现了接口时使用;而CGLIB代理则是在运行时动态创建目标类的子类,...
AOP的基本元素** - **切点(Pointcut)**:定义拦截的执行点,如方法的执行。 - **通知(Advice)**:定义在切点上执行的具体行为,如前后置通知、异常通知等。 - **切面(Aspect)**:包含切点和通知的组合。 - **...
首先,让我们深入了解AOP的基本概念: 1. **切面(Aspect)**:切面是关注点的模块化,它封装了跨越多个对象的行为或责任。在Spring中,切面可以通过定义一个包含通知和切入点的类来创建。 2. **通知(Advice)**:...
首先,让我们深入了解Spring AOP的核心概念。AOP通过切面(Aspect)来组织代码,切面是关注点的模块化,这些关注点通常涉及多个对象。在Spring中,切面可以由一个或多个通知(Advice)组成,通知在特定的连接点...
AOP的基本概念** AOP是一种编程范式,它将关注点模块化为独立的“切面”,每个切面封装了特定的职责,如日志记录、安全检查或事务处理。通过AOP,我们可以定义这些关注点,并在运行时将它们织入到应用程序的多个点...
首先,让我们了解一下AOP的基本概念。AOP的核心是切面(Aspect),它将关注点(如日志、事务)与业务逻辑分离,形成独立的模块。切点(Join Point)是程序执行过程中的特定点,如方法调用。通知(Advice)是在特定...
**基本概念:** 1. **切面(Aspect)**:代表横切关注点的模块化。它是AOP的核心概念之一,可以视为对系统中多个点共享的行为的封装。 2. **连接点(Joinpoint)**:程序执行过程中的特定位置,例如方法调用或异常抛出...
切面是面向切面编程的基本单元,它封装了横切关注点的实现逻辑。例如,日志记录、事务管理等可以在不同的类和方法中重用的功能。 #### 2.2 Interceptors - 拦截器 拦截器是在目标对象的方法调用前后执行的代码。...
总的来说,虽然Spring的AOP功能强大且易于使用,但通过理解JDK动态代理,我们可以在不依赖Spring的情况下实现基本的AOP功能,这对于理解AOP的概念和工作原理非常有帮助。在实际开发中,结合设计模式如装饰者模式、...
#### 二、AOP基本概念 AOP是一种编程范式,其目的是提高模块化程度,特别是将那些对很多类都具有影响的公共行为封装起来,以便减少系统的耦合度,并且增加可重用性。Spring AOP是在Spring框架的基础上实现的一种面向...
本文将深入探讨Spring AOP的基本概念、核心组件以及实际应用。 一、Spring AOP概述 1.1 面向切面编程 面向切面编程是一种编程范式,旨在将关注点分离,使程序结构更清晰,提高代码重用性和可维护性。在Spring AOP...
Spring AOP的基本概念** - **切面(Aspect)**:切面是封装了特定关注点的一组通知(advises)和连接点(join points)的集合。例如,日志记录、事务管理、性能监控等都可以作为独立的切面来处理。 - **通知...
这个库定义了如MethodInterceptor和Pointcut等基本的AOP概念,使得Spring和其他AOP框架如AspectJ可以共享相同的接口。在Spring中,你可以通过实现这些接口来创建自定义的切面,实现拦截器功能。 其次,aspectjrt-...