有天上飞的概念,就要有落地的实现java
- 概念+代码实现是本文的特色,教程将涵盖完整的图文教程,代码案例
- 文章结尾配套自测面试题,学完技术自我测试更扎实
- 概念十遍不如代码一遍,朋友,但愿你把文中全部的代码案例都敲一遍
大哥大姐新年好,点赞转发不要少git
SpringBoot 图文系列教程技术大纲面试
SpringBoot 图文教程系列文章目录redis
在Spring中,无论是学习仍是面试,有两个点是永远绕不过去的,一个是IOC,另外一个就是Aop,Spring中使用Aop是很是简单的,能够经过xml和注解两种方式写出aop的代码,那么在SpringBoot中有什么变化吗?spring
在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缓存等实战应用,会在后续文章中写出。框架
恭喜你完成了本章的学习,为你鼓掌!若是本文对你有帮助,请帮忙点赞,评论,转发,这对做者很重要,谢谢。spring-boot
让咱们再次回顾本文的学习目标学习
- 掌握SpringBoot中aop的使用
要掌握SpringBoot更多的用法,请持续关注本系列教程。
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,但愿你可以成热打铁,将知识夯扎实。
见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
本次需求:
练习文中demo
欢迎关注本人公众号:鹿老师的Java笔记,将在长期更新Java技术图文教程和视频教程,Java学习经验,Java面试经验以及Java实战开发经验。