aop execution用法
时间: 2023-03-29 17:03:44 浏览: 105
aop execution是AspectJ框架中的一种切点表达式,用于指定切入点的方法执行。它的语法为execution([修饰符] 返回类型 包名.类名.方法名(参数列表)),其中修饰符、返回类型、包名、类名、方法名和参数列表都可以使用通配符进行匹配。例如,execution(* com.example.service.*.*(..))表示匹配com.example.service包下的所有类的所有方法。
相关问题
spring aop execution表达式
在Spring AOP中,execution表达式是用于定义切点的一种方式。它可以指定一个或多个方法的执行,以便在这些方法执行之前、之后或周围执行切面逻辑。execution表达式的语法如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
其中,各个部分的含义如下:
1. modifiers-pattern: 方法的修饰符模式,例如public、private等。
2. ret-type-pattern: 方法的返回类型模式,例如void、int等。
3. declaring-type-pattern: 方法所属类或接口的模式。
4. name-pattern: 方法名称的模式。
5. param-pattern: 方法参数的模式,用逗号分隔多个参数,可以使用通配符*表示任意类型。
6. throws-pattern: 方法可能抛出的异常的模式。
引用中的示例execution(* service.UserServiceImpl.add(..))表示匹配UserServiceImpl类中的add方法,该方法可以接受任意个数的参数。
引用中的示例execution(* service.UserServiceImpl.add(String))表示匹配UserServiceImpl类中的add方法,该方法只能接受一个String类型的参数。
通过使用execution表达式,我们可以根据需要定义不同的切点,以便在Spring AOP中实现精确的切面逻辑。
自定义aop切点execution
AOP(面向切面编程)是一种编程范式,它允许开发人员在不改变原有代码的情况下,动态地横向扩展代码功能。AOP的核心是切点(Pointcut)、切面(Aspect)、通知(Advice)和织入(Weaving)。
其中,切点是AOP中最重要的概念之一。切点定义了在哪些地方进行切面的织入操作。切点表达式可以使用execution函数来定义,其语法如下:
```
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
```
其中,各参数的含义如下:
- modifiers-pattern:方法修饰符,如public、protected、private等。
- ret-type-pattern:返回值类型,如int、String等。
- declaring-type-pattern:声明类型,如com.example.*Service、\*Service等。
- name-pattern:方法名,如add*、get*等。
- param-pattern:参数类型,如java.lang.String、com.example.*等。
- throws-pattern:异常类型,如java.io.IOException、java.lang.Exception等。
举个例子,以下是一个切点表达式的示例:
```
execution(* com.example.service.*.*(..))
```
该表达式表示,切点匹配com.example.service包中所有类的所有方法。
在Spring中,可以使用@Pointcut注解来定义切点。例如:
```
@Pointcut("execution(* com.example.service.*.*(..))")
public void servicePointcut() {}
```
定义好切点后,就可以在切面类中使用该切点了。例如:
```
@Aspect
public class LoggingAspect {
@Before("com.example.aspect.LoggingAspect.servicePointcut()")
public void logBefore(JoinPoint joinPoint) {
// do something before method execution
}
}
```
上述代码中,@Before注解表示在方法执行前执行通知,括号中的字符串表示切点表达式,指定了在servicePointcut切点匹配的方法执行前执行通知。
阅读全文