开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第10天
基于xml的AOP实现
因为Spring AOP中的代理对象由IOC容器自动生成,所以我们开发者可以无需关注过多代理对象生成的过程,只需要选择连接点、创建切面、定义切点并在XML文件中添加配置信息即可。
Spring提供了一系列配置Spring AOP的XML元素。
| 元素 | 描述 |
|---|---|
| aop:config | Spring 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——该属性只对元素有效,它用于指定一个形参名,后置通知方法可以通过该形参访问目标方法的返回值