springboot调用service方法使用aop拦截controller
时间: 2024-05-08 16:16:53 浏览: 122
在Spring Boot中使用AOP拦截Controller,需要以下步骤:
1. 创建注解
创建一个自定义注解,用于标记需要被拦截的Controller方法:
```java
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LogAnnotation {
String value() default "";
}
```
2. 创建切面类
创建一个切面类,用于拦截被@LogAnnotation注解标记的Controller方法:
```java
@Aspect
@Component
public class LogAspect {
private static final Logger logger = LoggerFactory.getLogger(LogAspect.class);
@Pointcut("@annotation(com.example.demo.annotation.LogAnnotation)")
public void logPointCut() {}
@Before("logPointCut()")
public void before(JoinPoint joinPoint) {
logger.info("调用了" + joinPoint.getTarget().getClass().getName() + "的" + joinPoint.getSignature().getName() + "方法");
}
}
```
3. 在Controller方法中使用注解
在需要被拦截的Controller方法上添加@LogAnnotation注解:
```java
@RestController
public class TestController {
@Autowired
private TestService testService;
@GetMapping("/test")
@LogAnnotation("测试方法")
public String test() {
return testService.test();
}
}
```
这样,在调用test方法时,AOP会拦截并执行LogAspect类中的before方法,输出调用信息。
需要注意的是,切面类需要使用@Aspect和@Component注解。@Pointcut注解指定了被@LogAnnotation注解标记的方法为切点,@Before注解指定了在切点之前执行before方法。
阅读全文