`

AOP几个重要的概念

    博客分类:
  • java
阅读更多

《Spring参考手册》中定义了以下几个AOP的重要概念:

 1.切面(Aspect) :

      官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aspect>来配置。 连接点(Joinpoint) :程序执行过程中的某一行为,例如,AServiceImpl.barA()的调用或者BServiceImpl.barB(String _msg, int _type)抛出异常等行为。

2.通知(Advice) :

     “切面”对于某个“连接点”所产生的动作,例如,TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”

3.切入点(Pointcut) :

       匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定

4.目标对象(Target Object) :

       被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。

5.AOP代理(AOP Proxy) 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <config> 的 proxy-target-class 属性设为true 通知(Advice)类型

 

6.前置通知(Before advice) :

       在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aspect>里面使用<before>元素进行声明。例如,TestAspect中的doBefore方法 后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aspect>里面使用<after>元素进行声明。例如,TestAspect中的doAfter方法,所以AOPTest中调用BServiceImpl.barB抛出异常时,doAfter方法仍然执行

7.返回后通知(After return advice) :

      在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aspect>里面使用<after-returning>元素进行声明。

 8.环绕通知(Around advice) :

      包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aspect>里面使用<around>元素进行声明。例如,TestAspect中的doAround方法。

9.抛出异常后通知(After throwing advice) :

      在方法抛出异常退出时执行的通知。 ApplicationContext中在<aspect>里面使用<after-throwing>元素进行声明。例如,TestAspect中的doThrowing方法。 切入点表达式 通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下: execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?) modifiers-pattern:方法的操作权限 ret-type-pattern:返回值 declaring-type-pattern:方法所在的包 name-pattern:方法名 parm-pattern:参数名 throws-pattern:异常 其中,除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。 通知参数 可以通过args来绑定参数,这样就可以在通知(Advice)中访问具体参数了。例如,<aspect>配置如下 Java代码 <config><aspect id="TestAspect" ref="aspectBean"><pointcut id="businessService" expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)"></pointcut><after pointcut-ref="businessService" method="doAfter"></after></aspect></config><config><aspect id="TestAspect" ref="aspectBean"><pointcut id="businessService" expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)"></pointcut><after pointcut-ref="businessService" method="doAfter"></after></aspect></config> TestAspect的doAfter方法中就可以访问msg参数,但这样以来AService中的barA()和BServiceImpl中的barB()就不再是连接点,因为execution(* com.spring.service.*.*(String,..))只配置第一个参数为String类型的方法。其中,doAfter方法定义如下: Java代码 public void doAfter(JoinPoint jp,String msg) public void doAfter(JoinPoint jp,String msg) 访问当前的连接点 任何通知(Advice)方法可以将第一个参数定义为 org.aspectj.lang.JoinPoint 类型。JoinPoint 接口提供了一系列有用的方法, 比如 getArgs() (返回方法参数)、getThis() (返回代理对象)、getTarget() (返回目标)、getSignature() (返回正在被通知的方法相关信息)和 toString() (打印出正在被通知的方法的有用信息)

分享到:
评论

相关推荐

    AOP的相关概念

    AOP可以通过以下几种方式实现: - **代理模式**:利用动态代理技术为已有类创建代理对象,并在代理对象中添加额外的功能。 - **静态代理**:在编译阶段就已经确定好代理类的实现。 - **动态代理**:在运行时动态创建...

    springAOP 4个jar包

    在提供的四个jar包中,每个都有其特定的功能和作用,对于理解Spring AOP的工作原理至关重要。 1. **aspectj-1.7.3.jar**:这是AspectJ库的一部分,AspectJ是一个全面的面向切面编程(AOP)的Java语言扩展。在Spring ...

    spring aop spring aop

    在Spring AOP中,主要有以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,包含pointcut(切点)和advice(通知)两部分。例如,在上述代码中的`PersonProxy`类就是一个切面,它定义了`before()`和...

    让aop概念更好的理解

    综上所述,AOP 和分布式系统是现代软件开发中非常重要的两个概念。AOP 能够帮助开发者更好地组织和管理代码,提高软件的可维护性和可扩展性;而分布式系统则是处理大规模数据和高并发访问的有效解决方案。两者结合...

    spring aop jar 包

    在Spring AOP中,主要涉及以下几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,比如日志记录、事务管理、性能监控等。在Spring AOP中,切面由通知(Advice)和切点(Pointcut)定义。 2. **通知...

    SPRING AOP详细培训视频

    在Spring AOP中,有以下几个核心概念: 1. 切面(Aspect):切面是AOP的核心,它封装了横切关注点,如日志、事务管理等。一个切面可以包含多个通知(advises)和一个或多个切入点(pointcuts)。 2. 通知(Advice...

    模拟spring aop技术

    在`MySpringAOP`这个Demo中,我们可能看到了以下几个关键部分: 1. **切面类(Aspect Class)**:包含一个或多个通知方法,每个方法都有对应的注解来指定其执行时机。 2. **切点定义(Pointcut Definition)**:...

    springaop.zip

    在Spring AOP中,我们首先需要了解几个核心概念: 1. **切面(Aspect)**:切面是关注点的模块化,它将一组相关或相互作用的对象封装为一个模块,包括了通知(Advice)和切入点(Pointcut)。 2. **通知(Advice)...

    Spring AOP代码示例

    在Spring AOP中,有以下几个核心概念: 1. 切面(Aspect):切面是AOP的核心,它封装了横切关注点,如日志和事务管理。一个切面可以定义多个通知(advisors)和切入点(pointcuts)。 2. 通知(Advice):通知是在...

    一个简单的spring AOP的实现

    在Spring AOP中,主要有以下几个核心概念: 1. 切面(Aspect):切面是AOP的核心,它封装了系统的横切关注点,例如日志记录、事务管理等。在Spring AOP中,切面可以由一个或多个通知(advises)组成。 2. 通知...

    SpringAOP.zip

    在雷丰阳老师的Spring AOP课程中,我们可以期待学习到以下几个关键知识点: 1. **AOP基本概念**:首先,我们会理解什么是面向切面编程,它与传统的面向对象编程的区别,以及它为何能在解决系统中横切关注点问题上...

    springboot+aspect实现springaop拦截指定方法.zip

    1. **Spring AOP**:AOP(Aspect-Oriented Programming,面向切面编程)是Spring框架的一个重要特性,它允许开发者定义“切面”,这些切面可以包含业务逻辑的各个部分,如日志、事务管理等。Spring AOP提供了一种...

    Spring AOP应用Demo

    在Spring AOP中,主要有以下几个关键概念: 1. **切面(Aspect)**:定义了一个关注点的所有组件,包括通知(Advice)、切入点(Pointcut)和织入(Weaving)。 2. **通知(Advice)**:在特定连接点(Join Point...

    深入理解Android之AOP

    AOP的处理流程一般分为以下几个步骤: 1. 定义切点(Pointcut),它用来识别在哪些具体的位置将要织入横切逻辑。 2. 创建切面,切面中包含了通知(Advice),即在切点被触发时所执行的具体逻辑。 3. 通过织入器...

    AOP练习小例子

    在项目中,可能包含以下几个关键部分: 1. **切面(Aspect)**:切面是AOP的核心概念,它封装了一组相关的横切关注点。在C#中,切面通常表现为一个类,其中包含了通知(Advice)。 2. **通知(Advice)**:通知...

    通过AOP重新解读23个经典GOF模式

    每种模式通常包含目的/意图、适用性、解决方案结构以及示例实现等几个关键部分。通过引入AOP,我们可以进一步增强这些模式的模块化特性,提高代码的可读性、可维护性和重用性。 #### 背景与动机 面向切面编程是一...

    sqring aop 必须的四个jar包

    Spring AOP的使用通常包括以下几个步骤: - 定义切面(Aspect):切面是切面编程的基本单元,包含切入点和通知。 - 定义切入点(Pointcut):定义一个或多个切入点表达式,指定哪些方法会被切面影响。 - 编写通知...

    面向切面编程aop简介

    Spring事务管理有以下几个关键概念: - Spring 事务概述:Spring支持编程式和声明式事务管理,其中声明式事务管理更为常用,通过配置即可完成事务控制。 - 声明式事务:通过在方法上添加`@Transactional`注解来指定...

    简易的AOP框架

    该简易AOP框架包含以下几个关键组件: 1. **配置文件**:这是定义切面(aspect)和通知(advice)的地方,切面是关注点的模块化,而通知则是实际要执行的行为。配置文件可能使用XML或某种自定义格式,用于指定哪些...

    Spring通过XML实现AOP

    在 Spring 中实现 AOP 通常涉及以下几个步骤: - **定义切面**:创建一个类,该类包含了业务逻辑之外的横切关注点,如日志记录方法。 - **编写通知**:在切面类中定义需要在特定连接点执行的方法,这些方法即为通知...

Global site tag (gtag.js) - Google Analytics