@Pointcut中的args
时间: 2023-08-02 07:38:01 浏览: 83
@Pointcut 注解中的 args 是用于匹配方法参数的表达式。在 AOP 中,我们可以使用 args 表达式来拦截指定参数类型的方法。
args 表达式的语法为:args(type1, type2, ...),其中 type 表示参数类型,可以是类名、类全名、基本类型、数组类型等。
举个例子,如果我们要拦截 UserService 中的 addUser 方法,并且该方法只有一个 String 类型的参数,可以使用如下的 @Pointcut 注解:
```java
@Pointcut("execution(* com.example.service.UserService.addUser(String)) && args(name)")
public void addUserPointcut(String name) {}
```
在上面的表达式中,我们使用了 args(name) 来匹配 addUser 方法中的参数,其中 name 表示参数名,也可以使用通配符 *,例如 args(*, String) 表示匹配两个参数的方法,其中第二个参数是 String 类型。注意,在使用 args 表达式时,必须将参数名或通配符作为参数传入切入点方法中,否则无法获取参数值。
需要注意的是,args 表达式只能用于匹配方法参数类型,无法匹配参数值。如果需要匹配参数值,可以使用 JoinPoint.getArgs() 方法获取方法参数列表,然后根据参数值进行判断。
相关问题
@Pointcut路径怎么写
@Pointcut 注解用于定义切入点,它可以根据表达式来选择连接点。表达式的写法如下:
1. execution:用于匹配方法执行的连接点,语法为:execution(修饰符模式 返回类型 包名.类名.方法名(参数列表) 异常模式)
例如:@Pointcut("execution(public * com.example.demo.service.*.*(..))") 表示匹配com.example.demo.service包下所有类的所有公共方法。
2. within:用于匹配指定包内的连接点,语法为:within(包名.类名)
例如:@Pointcut("within(com.example.demo.service.*)") 表示匹配com.example.demo.service包下所有方法。
3. this:用于匹配当前AOP代理对象类型的连接点,语法为:this(类型名)
例如:@Pointcut("this(com.example.demo.service.UserService)") 表示匹配实现UserService接口的对象。
4. target:用于匹配当前目标对象类型的连接点,语法为:target(类型名)
例如:@Pointcut("target(com.example.demo.service.UserService)") 表示匹配UserService接口的实现对象。
5. args:用于匹配当前执行的方法传入的参数为指定类型的连接点,语法为:args(类型名)
例如:@Pointcut("args(java.lang.String)") 表示匹配传入参数为String类型的方法。
6. @annotation:用于匹配使用指定注解的连接点,语法为:@annotation(注解类型)
例如:@Pointcut("@annotation(org.springframework.web.bind.annotation.GetMapping)") 表示匹配使用GetMapping注解的方法。
7. bean:用于匹配指定bean名称的连接点,语法为:bean(名称)
例如:@Pointcut("bean(userService)") 表示匹配名称为userService的bean的方法。
需要注意的是,以上语法中的*号表示任意字符,..表示任意多个字符,+表示类及其子类,&&表示与,||表示或。
@Pointcut指定方法名
@Pointcut指定方法名是在使用Spring AOP时,用于定义切点的注解。根据提供的引用内容,我们可以看到三种不同的@Pointcut注解的使用方式。中的@Pointcut注解使用了自定义注解MyAnno作为切点的匹配条件,中的@Pointcut注解使用了args()函数作为切点的匹配条件,而中的@Pointcut注解使用了target()函数和具体的类名作为切点的匹配条件。这些注解都可以在AOP中用于指定方法名作为切点条件。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [Spring AOP中@Pointcut切入点表达式使用介绍](https://blog.csdn.net/weixin_39977988/article/details/128701302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
阅读全文