zoukankan      html  css  js  c++  java
  • SpringBoot图文教程5—SpringBoot 中使用Aop

    有天上飞的概念,就要有落地的实现

    • 概念+代码实现是本文的特点,教程将涵盖完整的图文教程,代码案例
    • 文章结尾配套自测面试题,学完技术自我测试更扎实
    • 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍

    大哥大姐新年好,点赞转发不要少

    SpringBoot 图文系列教程技术大纲

    鹿老师的Java笔记鹿老师的Java笔记

    SpringBoot 图文教程系列文章目录

    1. SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」
    2. SpringBoot图文教程2—日志的使用「logback」「log4j」
    3. SpringBoot图文教程3—「‘初恋’情结」集成Jsp
    4. SpringBoot图文教程4—SpringBoot 实现文件上传下载

    前言

    在Spring中,不管是学习还是面试,有两个点是永远绕不过去的,一个是IOC,另一个就是Aop,Spring中使用Aop是非常简单的,可以通过xml和注解两种方式写出aop的代码,那么在SpringBoot中有什么变化吗?

    在SpringBoot中使用aop实际上没有太多的变化,关于SpringBoot实际上就是对Spring和SpringMVC的进一步封装,因此在 SpringBoot 中同样支持Spring框架中AOP切面编程,不过在SpringBoot中为了快速开发仅仅提供了注解方式的切面编程。

    SpringBoot 注解式 aop 的使用

    本文所有的内容,将会在下面的demo上进行操作。 请去Git仓库下载:https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

    1.引入依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-aop</artifactId>
    </dependency>

    2.aop相关注解讲解

    /**
        @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中aop的使用

    要掌握SpringBoot更多的用法,请持续关注本系列教程。

    下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,希望你能够成热打铁,将知识夯扎实。

    上期自测面试题答案

    见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

    自测面试题(答案见下期)

    • 注解式Aop的常用注解有哪些

    上期自测实现项目小案例答案

    见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes

    自测实现项目小案例(答案见下期)

    本次需求:

    练习文中demo

    求关注,求点赞,求转发

  • 相关阅读:
    SDN实验2:Mininet 实验——拓扑的命令脚本生成
    2020软工实践第一次作业
    POJ2942-Knights of the Round Table
    POJ1966 ZOJ2182<无向图点连通度 Isap版>
    POJ1523(求割点)
    POJ2391(最大流Isap+Floyd+二分)
    POJ1087 ZOJ1157(最大流Isap+map映射)
    POJ1459(最大流Isap)
    数字的字符串处理 (转)
    POJ2112 最大流(Isap+Floyd+二分)
  • 原文地址:https://www.cnblogs.com/bingyang-py/p/12354037.html
Copyright © 2011-2022 走看看