Spring之路(45)–Spring AOP常用的切入点表达式实例

简介: 本文目录1. 背景2. 表达式通配符3. 根据类型匹配4. 根据方法匹配5. 根据注解匹配6. 总结

1. 背景

上一篇演示了如何使用各类通知,这样我们对切入方法的通知比较了解了,还有一个重要工作是如何指定切面切入哪些方法,这里面就涉及切入点匹配的那个表达式,官方一点的说法就是切入点指示符。


Spring AOP的切入点表达式功能很强大,用法也很多,本篇只能是初探,把常用的用法给大家提下,有个初步印象,在做项目的时候,能知道有哪些切入方式。


2. 表达式通配符

需要先认识下切入点表达式中可以使用的通配符


通配符 说明

… 匹配方法定义中任何数量的参数,还可匹配类定义中任何数量的包

+ 匹配类的任何子类

* 匹配任何数量的字符

3. 根据类型匹配

使用within关键字可匹配类型(包括接口、类、包名)信息,例如:


表达式 含义

within(MyInterface+) 匹配实现MyInterface接口的类中的所有方法

within(org.maoge.service.UserService) 匹配UserService类中的所有方法

within(org.maoge.service…*) 将匹配org.maoge.service包(含子包)中所有类中的所有方法

注意,最终匹配的落脚点还是方法。


4. 根据方法匹配

使用execution关键字可匹配方法信息,例如:


表达式 含义

execute(* org.maoge.service.UserService.*(…)) 匹配UserService中的所有方法

execute(public * org.maoge.service.UserService.*(…)) 匹配UserService类中的所有public方法

execute(public String org.maoge.service.UserService.*(…)) 匹配UserService类中的所有返回值为String类型的public方法

execution(public org.maoge.xbo.ResultBO *(…)) 匹配所有返回值为ResultBO类型的public方法

execution(execution(public**(…)) 匹配任何返回类型、类名和参数的公共方法

5. 根据注解匹配

有时候需要指定一些特殊的方法进行匹配,可以指定匹配方法的注解。


表达式 含义

@annotation(org.maoge.DoneTimeAnnotation) 匹配使用了DoneTimeAnnotation注解的方法

6. 总结

落脚点都是方法,但是可以根据类型、方法、注解进行筛选。

相关文章
|
5天前
|
Java 开发者 Spring
Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
【5月更文挑战第1天】Spring AOP的切点是通过使用AspectJ的切点表达式语言来定义的。
16 5
|
5天前
|
XML Java 数据格式
Spring AOP
【5月更文挑战第1天】Spring AOP
22 5
|
6天前
|
Java 编译器 开发者
Spring的AOP理解
Spring的AOP理解
|
6天前
|
XML Java 数据格式
如何在Spring AOP中定义和应用通知?
【4月更文挑战第30天】如何在Spring AOP中定义和应用通知?
12 0
|
6天前
|
安全 Java 开发者
在Spring框架中,IoC和AOP是如何实现的?
【4月更文挑战第30天】在Spring框架中,IoC和AOP是如何实现的?
17 0
|
6天前
|
Java 测试技术 开发者
【亮剑】如何通过自定义注解来实现 Spring AOP,以便更加灵活地控制方法的拦截和增强?
【4月更文挑战第30天】通过自定义注解实现Spring AOP,可以更灵活地控制方法拦截和增强。首先定义自定义注解,如`@MyCustomAnnotation`,然后创建切面类`MyCustomAspect`,使用`@Pointcut`和`@Before/@After`定义切点及通知。配置AOP代理,添加`@EnableAspectJAutoProxy`到配置类。最后,在需拦截的方法上应用自定义注解。遵循保持注解职责单一、选择合适保留策略等最佳实践,提高代码可重用性和可维护性。记得测试AOP逻辑。
|
7天前
|
缓存 监控 Java
【Spring系列笔记】AOP
面向切面编程就是面向特定方法编程。通过将横切关注点(cross-cutting concerns)从主要业务逻辑中分离出来,提供一种更好的代码模块化和可维护性。 横切关注点指的是在应用程序中横跨多个模块或层的功能,例如日志记录、事务管理、安全性、缓存、异常处理等。
19 0
|
10天前
|
XML 缓存 Java
Spring核心AOP详解
Spring核心AOP详解
7 0
|
10天前
|
XML Java 测试技术
手写spring第九章-Spring中整合AOP
手写spring第九章-Spring中整合AOP
9 0
|
2月前
|
Java 应用服务中间件 Maven
SpringBoot 项目瘦身指南
SpringBoot 项目瘦身指南
47 0