《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下:
切面(Aspect) :官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aop:aspect>来配置。
连接点(Joinpoint) :程序执行过程中的某一行为,例如,AServiceImpl.barA()的调用或者BServiceImpl.barB(String _msg, int _type)抛出异常等行为。
通知(Advice) :“切面”对于某个“连接点”所产生的动作,例如,TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”,例如TestAspect
切入点(Pointcut) :匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定
目标对象(Target Object) :被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。
AOP代理(AOP Proxy) 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <aop:config> 的 proxy-target-class 属性设为true
通知(Advice)类型
前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。例如,TestAspect中的doBefore方法
后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。例如,TestAspect中的doAfter方法,所以AOPTest中调用BServiceImpl.barB抛出异常时,doAfter方法仍然执行
返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。
环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。例如,TestAspect中的doAround方法。
抛出异常后通知(After throwing advice) : 在方法抛出异常退出时执行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。例如,TestAspect中的doThrowing方法。
切入点表达式
通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下:
Java代码
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)中访问具体参数了。例如,<aop:aspect>配置如下
Java代码
<aop:config>
<aop:aspect id="TestAspect" ref="aspectBean">
<aop:pointcut id="businessService"
expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)" />
<aop:after pointcut-ref="businessService" method="doAfter"/>
</aop:aspect>
</aop:config>
TestAspect的doAfter方法中就可以访问msg参数,但这样以来AService中的barA()和BServiceImpl中的barB()就不再是连接点,因为execution(* com.spring.service.*.*(String,..))只配置第一个参数为String类型的方法。其中,doAfter方法定义如下:
Java代码
public void doAfter(JoinPoint jp,String msg)
访问当前的连接点
任何通知(Advice)方法可以将第一个参数定义为 org.aspectj.lang.JoinPoint 类型。JoinPoint 接口提供了一系列有用的方法, 比如 getArgs() (返回方法参数)、getThis() (返回代理对象)、getTarget() (返回目标)、getSignature() (返回正在被通知的方法相关信息)和 toString() (打印出正在被通知的方法的有用信息。
分享到:
相关推荐
这个名为“spring最基本jar”的压缩包很可能包含了Spring框架的基础组件,让我们来详细探讨一下Spring框架的相关知识点。 1. **IoC容器**:Spring的核心是IoC容器,它负责管理对象的生命周期和依赖关系。通过配置...
"spring 基本包 jar"指的是Spring框架的核心组件,这些组件构成了Spring应用程序的基础。下面我们将深入探讨Spring的基本包及其核心概念。 1. **IoC(Inversion of Control)容器**:Spring的核心是IoC容器,它负责...
本压缩包文件“SpringCloud基本框架+完整示例工程”提供了全面的学习资源,帮助开发者快速理解和上手SpringCloud。 1. **SpringCloud Eureka**:作为服务发现组件,Eureka实现了服务注册与发现的功能。服务提供者在...
在给定的压缩包文件中,包含了一系列Spring的核心组件,这些组件是进行基本Spring开发所必需的。以下是对这些jar包及其作用的详细解释: 1. **spring-context-4.2.3.RELEASE.jar**:这是Spring上下文模块的实现,...
spring Ioc基本包.rar中包含commons-logging-1.2.jar,log4j-1.2.16.jar,spring-beans-4.2.4.RELEASE.jar,spring-context-4.2.4.RELEASE.jar,spring-core-4.2.4.RELEASE.jar,spring-expression-4.2.4.RELEASE....
"spring安装基本包.zip"是一个包含Spring框架基础组件的压缩包,适用于初学者或者需要快速搭建Spring环境的开发者。在Java Spring开发中,正确安装和配置这些基本包至关重要。 首先,让我们来了解一下什么是IOC...
本文将深入探讨Spring装配基本属性的原理,帮助你更好地理解如何在代码中使用和配置这些属性。 首先,Spring装配的基本方式有两种:XML装配和基于注解的装配。XML装配是早期版本Spring的主要装配方式,通过`<bean>`...
spring-beans-4.2.4.RELEASE.jar spring-context-4.2.4.RELEASE.jar spring-core-4.2.4.RELEASE.jar spring-expression-4.2.4.RELEASE.jar 核心容器依赖的日志包 commons-logging-1.1.3.jar log4j-1.2.17.jar ...
spring基本知识点.doc一、编写一个Spring程序1.为什么要使用SpringSpring是一种轻量级框架,轻量级是指该框架是非入侵式的,用Spring开发的系统不需要依赖Spring中类,它不需要容器支持。2.Spring技术a)Ioc:控制...
Spring的基础jar包包含了运行Spring应用程序所需的核心组件,使得开发者能够快速搭建Spring环境并开始使用其基本功能。下面我们将深入探讨Spring框架的一些核心知识点。 1. **依赖注入(Dependency Injection, DI)...
在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...
"Spring IOC基本操作" Spring IOC(Inversion of Control,控制反转)是一种软件设计模式,它将对象的创建和管理交给容器,实现了对象之间的解耦合。 SpringIOC是Spring Framework中的核心组件之一,负责管理应用...
9. **Spring Boot**:虽然不在“spring-framework基本包”内,但 Spring Boot 是基于 Spring 框架的快速开发工具,它简化了 Spring 应用的初始搭建以及配置过程,引入了“起步依赖”概念,使得开发者能够快速构建...
* 声明式服务调用:使用SpringBlade可以快速实现声明式服务调用,通过简单的步骤可以生成一个基本的微服务系统平台。 * Feign熔断机制:使用SpringBlade可以快速实现Feign熔断机制,通过简单的步骤可以生成一个基本...
java_spring基本教程 Spring是一个开源框架,它的目的是为了简化企业级系统开发而诞生的 Spring从小里说,是个容器,往大里说,就是个框架 Spring是轻量级的,它的Jar包只有1M多一点,而且,它是非侵入式的:你一般...
spring3.2的源代码,至于为什么要下载spring3.2的源代码呢?...虽然每个版本之间有差别,由于我们想要研究的都是spring的一些基本的功能,关于baen解析,bean注入,aop啥的,这些基本的功能每个版本之间差别是非常小的。
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...
Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...
Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...
描述中的“简单小应用,实现了一些基本的功能”可能是指一个基础的Spring项目,包含了核心的IoC容器和一些基本的bean配置。这样的项目通常会涉及创建Bean、声明Bean之间的依赖关系,以及可能的事务管理等。 标签中...