aop是spring的两大功能模块之一,功能非常强大,为解耦提供了非常优秀的解决方案。
现在就以springboot中AOP的使用来了解一下AOP
导入对AOP的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
首先创建一个切面类,通过@Aspect来定义,为了使该类被正确被spring加载,必须增加@Component
@Aspect
@Component
public class LogAspect {
/**
* 定义需要切入的类或者方法
*/
@Pointcut("execution(public * com.zy.springboot.demo.controllers.*.*(..))")
public void webLog() {
System.out.println("web log executing");
}
/**
* 执行切面类前执行
*
* @param joinPoint
*/
@Before("webLog()")
public void doBefore(JoinPoint joinPoint) {
}
/**
* 执行结束后
* @param joinPoint
*/
@After("webLog()")
public void doAfter(JoinPoint joinPoint) {
System.out.println("after web log");
}
@AfterReturning(returning = "ret", pointcut = "webLog()")
public void afterReturning(Object ret) {
System.out.println(ret);
}
}
执行顺序:
after > before > afterReturning