@Aspect 使用示例
时间: 2023-07-18 17:42:21 浏览: 125
mybatis统计每条SQL的执行时间的方法示例
@Aspect 是 AOP 中的一个注解,可以用来定义切面。
下面是一个简单的示例,演示如何使用 @Aspect 注解定义切面,并在方法执行前后打印日志:
首先,我们需要定义一个切面类:
```java
@Aspect
@Component
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("execution(* com.example.demo.controller.*.*(..))")
public void pointcut() {}
@Before("pointcut()")
public void before(JoinPoint joinPoint) {
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
logger.info("Entering method {}.{}", className, methodName);
}
@AfterReturning("pointcut()")
public void afterReturning(JoinPoint joinPoint) {
String className = joinPoint.getTarget().getClass().getName();
String methodName = joinPoint.getSignature().getName();
logger.info("Exiting method {}.{}", className, methodName);
}
}
```
在上面的代码中,我们使用 @Aspect 注解来标注该类,表示它是一个切面类。同时,我们还使用 @Component 注解将该类注册为 Spring 容器中的组件。
在 LogAspect 类中,我们定义了一个名为 pointcut 的切点,它表示匹配 com.example.demo.controller 包下的所有方法。在 before 和 afterReturning 方法中,我们使用 @Before 和 @AfterReturning 注解来定义前置通知和后置通知,分别在方法执行前和执行后打印日志。
最后,我们需要在 Spring 配置文件中启用 AOP:
```xml
<aop:aspectj-autoproxy />
```
通过这样的方式,我们就可以在 Spring Boot 应用中使用 AOP 了。当我们调用 com.example.demo.controller 包下的任何方法时,都会触发 LogAspect 中定义的切点,并在方法执行前后打印日志。
需要注意的是,上述示例中的 AOP 仅仅是演示了 AOP 的基本用法,实际应用中需要根据具体的业务需求进行更加复杂的切面编写。
阅读全文