Spring Boot实战之AOP切面编程(五)
程序员文章站
2022-05-24 09:48:41
...
切面编程
1 引言
springboot是对原有项目中spring框架和springmvc的进一步封装,因此在springboot中同样支持spring框架中AOP切面编程,不过在springboot中为了快速开发仅仅提供了注解方式的切面编程.
2 使用
2.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.2 相关注解
@Aspect 用来类上,代表这个类是一个切面
@Before 用在方法上代表这个方法是一个前置通知方法
@After 用在方法上代表这个方法是一个后置通知方法 @Around 用在方法上代表这个方法是一个环绕的方法
@Around 用在方法上代表这个方法是一个环绕的方法
2.3 前置切面
@Aspect
@Component
public class MyAspect {
@Before("execution(* com.baizhi.service.*.*(..))")
public void before(JoinPoint joinPoint){
System.out.println("前置通知");
joinPoint.getTarget();//目标对象
joinPoint.getSignature();//方法签名
joinPoint.getArgs();//方法参数
}
}
2.4 后置切面
@Aspect
@Component
public class MyAspect {
@After("execution(* com.baizhi.service.*.*(..))")
public void before(JoinPoint joinPoint){
System.out.println("后置通知");
joinPoint.getTarget();//目标对象
joinPoint.getSignature();//方法签名
joinPoint.getArgs();//方法参数
}
}
> 注意: 前置通知和后置通知都没有返回值,方法参数都为joinpoint
2.5 环绕切面
@Aspect
@Component
public class MyAspect {
@Around("execution(* com.baizhi.service.*.*(..))")
public Object before(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
System.out.println("进入环绕通知");
proceedingJoinPoint.getTarget();//目标对象
proceedingJoinPoint.getSignature();//方法签名
proceedingJoinPoint.getArgs();//方法参数
Object proceed = proceedingJoinPoint.proceed();//放行执行目标方法
System.out.println("目标方法执行之后回到环绕通知");
return proceed;//返回目标方法返回值
}
}
注意: 环绕通知存在返回值,参数为ProceedingJoinPoint,如果执行放行,不会执行目标方法,一旦放行必须将目标方法的返回值返回,否则调用者无法接受返回数据
上一篇: JSF的国际化
推荐阅读
-
荐 微服务之Spring Boot2—降低开发复杂度之面向切面AOP
-
Java Spring之AOP切面编程(多个实例分析)
-
Spring之重点知识 IOC(控制反转)和AOP(面向切面编程)学习小结
-
Spring面向切面编程(AOP)三之AOP的使用及配置
-
Spring框架(Framework)之IOC(控制反转)和AOP(面向切面编程)核心特性学习
-
Spring面向切面编程(AOP)原理一之使用JDK实现动态代理
-
Spring之注解实现aop(面向切面编程)
-
Spring之注解实现aop(面向切面编程)
-
spring框架之AOP(面向切面编程)
-
Spring Boot实战之AOP切面编程(五)