Spring基于xml的AOP实现

133 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天

基于xml的AOP实现

因为Spring AOP中的代理对象由IOC容器自动生成,所以我们开发者可以无需关注过多代理对象生成的过程,只需要选择连接点、创建切面、定义切点并在XML文件中添加配置信息即可。

Spring提供了一系列配置Spring AOP的XML元素。

元素描述
aop:configSpring AOP配置的根元素
aop:aspect配置切面
aop:advisor配置通知器
aop:pointcut配置切入点
aop:before配置前置通知,在目标方法执行前实施增强,可以应用于权限管理等功能
aop:after配置后置通知,在目标方法执行后实施增强,可以应用于关闭流、上传文件、删除临时文件等功能
aop:around配置环绕方式,在目标方法执行前后实施增强,可以应用于日志、事务管理等功能
aop:after-returning配置返回通知,在目标方法成功执行之后调用通知
aop:after-throwing配置异常通知,在方法抛出异常后实施增强,可以应用于处理异常记录日志等功能
aspect配置切面

在Spring的配置文件中,配置切面使用的是aop:aspect元素,该元素会将一个已定义好的Spring Bean转换成切面Bean,因此,在使用aop:sapect元素之前,要在配置文件中先定义一个普通的Spring Bean。在Spring Bean定义完成后,通过aop:aspect元素的ref属性即可引用该Bean。配置aop:aspect元素时,通常会指定id和red两个属性。

  • id——用于定义该切面的唯一标识
  • ref——用于引用普通的Spring Bean
pointcut配置切入点

在Spring的配置文件中,切入点是通过aop:pointcut元素来定义的。当aop:pointcut元素作为aop:config元素的子元素定义时,标识该切入点是全局的,它可以被多个切面共享;当aop:pointcut元素作为aop:aspect元素的子元素时,表示该切入点只对当前切面有效。定义aop:pointcut元素时,通常会指定id、expression属性。

  • id——用于指定切入点的唯一标识
  • expression——用于指定切入点关联的切入点表达式
Spring AOP切入点表达式的基本格式

execution(修饰符? 返回值类型 类路径? 方法名(参数) 异常类型?)

问号代表选填

<!--匹配包中任意类的任意方法的执行-->
execution(* com.hexiaoxing.jdk.*.*(..))
aspect配置通知

在Spring的配置文件中,使用aop:aspect元素配置了5种常用通知,分别为前置通知、后置通知、环绕通知、返回通知和异常通知

常用属性:

  • pointcut——该属性用于指定一个切入点表达式,Spring将在匹配该表达式的连接点时织入该通知
  • pointcut-ref——该属性指定一个已经存在的切入点名称,如配置代码种的myPointCut。和pointcut只需要选用其中一个即可
  • method——该属性指定一个方法名,指定将切面Bean种的该方法转换为增强处理。
  • throwing——该属性只对元素有效,它用于指定一个形参名,异常通知方法可以通过该形参访问目标方法所抛出的异常
  • returning——该属性只对元素有效,它用于指定一个形参名,后置通知方法可以通过该形参访问目标方法的返回值