spring中@Aspect注解
时间: 2023-09-13 14:08:12 浏览: 157
spring的注解方式
@Aspect注解是Spring框架中用于定义切面的注解。通过在一个类上添加@Aspect注解,该类就成为了一个切面。在该类中,我们可以定义各种各样的通知(Advice),如@Before、@After、@Around等等,来拦截、增强目标方法的执行。
@Aspect注解需要和其他注解配合使用,其中最常用的注解是@Pointcut和@Before/@After/@Around等通知注解。@Pointcut注解用于定义切点,即需要被拦截的目标方法,而@Before/@After/@Around等通知注解则用于定义具体的拦截逻辑。
例如,我们可以在一个类中定义如下的@Aspect切面:
```java
@Aspect
@Component
public class LogAspect {
@Pointcut("execution(* com.example.demo.service..*.*(..))")
public void serviceMethod() {}
@Before("serviceMethod()")
public void before(JoinPoint joinPoint) {
// 在目标方法执行之前执行的逻辑
...
}
@AfterReturning("serviceMethod()")
public void afterReturning(JoinPoint joinPoint) {
// 在目标方法执行之后执行的逻辑
...
}
@AfterThrowing("serviceMethod()")
public void afterThrowing(JoinPoint joinPoint) {
// 在目标方法抛出异常时执行的逻辑
...
}
@Around("serviceMethod()")
public Object around(ProceedingJoinPoint pjp) throws Throwable {
// 在目标方法执行前后执行的逻辑
...
Object result = pjp.proceed();
...
return result;
}
}
```
在上述代码中,我们使用@Pointcut注解定义了一个切点serviceMethod(),该切点匹配所有com.example.demo.service包及其子包中的所有方法。然后我们使用@Before、@AfterReturning、@AfterThrowing和@Around注解定义了各种通知,来实现在目标方法执行前后、抛出异常时执行相关逻辑的功能。最后,我们将该类标注为@Component,使得Spring容器可以自动扫描并加载该切面。
阅读全文