有天上飞的概念,就要有落地的实现
大哥大姐新年好,点赞转发不要少 SpringBoot 图文系列教程技术大纲
鹿老师的Java笔记
SpringBoot 图文教程系列文章目录
在Spring中,不管是学习还是面试,有两个点是永远绕不过去的,一个是IOC,另一个就是Aop,Spring中使用Aop是非常简单的,可以通过xml和注解两种方式写出aop的代码,那么在SpringBoot中有什么变化吗?
在SpringBoot中使用aop实际上没有太多的变化,关于SpringBoot实际上就是对Spring和SpringMVC的进一步封装,因此在 SpringBoot 中同样支持Spring框架中AOP切面编程,不过在SpringBoot中为了快速开发仅仅提供了注解方式的切面编程。
本文所有的内容,将会在下面的demo上进行操作。请去Git仓库下载:https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
/**
@Aspect 用来类上,代表这个类是一个切面
@Before 用在方法上代表这个方法是一个前置通知方法
@After 用在方法上代表这个方法是一个后置通知方法
@Around 用在方法上代表这个方法是一个环绕的方法
@Around 用在方法上代表这个方法是一个环绕的方法
@order(数字)用在类上,数字越小进入越早
**/
/**
环绕,前置,后置全部存在
先进入环绕,在进入前置,离开前置,离开环绕,进入后置,离开后置
**/
/**
* @Aspect 用来类上,代表这个类是一个切面
* @Component 用来告诉SpringBoot 给当前类创建对象 等价于@Service
*/
@Aspect
@Component
public class MyAspect {
//@Before 用在方法上代表这个方法是一个前置通知方法 注解的参数是切点表达式
@Before("execution(* com.lu.service.*.*(..))")
public void before(JoinPoint joinPoint){
System.out.println("前置通知");
//JoinPoint 通过该对象可以获取到被切入的对象的信息
joinPoint.getTarget();//目标对象
joinPoint.getSignature();//方法签名
joinPoint.getArgs();//方法参数
}
}
@Aspect
@Component
public class MyAspect {
@After("execution(* com.lu.service.*.*(..))")
public void before(JoinPoint joinPoint){
System.out.println("后置通知");
joinPoint.getTarget();//目标对象
joinPoint.getSignature();//方法签名
joinPoint.getArgs();//方法参数
}
}
注意: 前置通知和后置通知都没有返回值,方法参数都为joinpoint
@Aspect
@Component
public class MyAspect {
@Around("execution(* com.lu.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
以上就是SpringBoot中aop的简单使用,今天实际上只是简单的测试了aop的Api,关于aop的应用,例如:通过Aop记录日志信息,通过Aop操作redis缓存等实战应用,会在后续文章中写出。
让我们再次回顾本文的学习目标
要掌握SpringBoot更多的用法,请持续关注本系列教程。
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,希望你能够成热打铁,将知识夯扎实。
见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
本次需求:
练习文中demo