一文带你迅速了解下Spring中的AOP

这篇具有很好参考价值的文章主要介绍了一文带你迅速了解下Spring中的AOP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 什么是AOP?

AOP(Aspect Oriented Programming):面向切面编程。
面向切面编程是一种思想,其实就是对某一类事情进行统一的处理。而 SpringAOP就是一种AOP的具体实现的框架。这就好比 IOC 和 DI 一样的关系。
一文带你迅速了解下Spring中的AOP,SSM,spring,java,后端
上述就是对登录功能进行了一个统一的处理!

2. AOP能用来干些什么?

除了上面的判断登录之外,还有:

  • 统一日志记录
  • 统一的方法执行时间统计
  • 统一的返回格式设置
  • 统一的异常处理
  • 事务的开启和提交

3. 学习AOP

3.1 AOP的组成

3.1.1 切面(Aspect)

切面:定义的是事件,也就是AOP是用来做啥的。
例如:用来做用户登录校验

3.1.2 切点(Pointcut)

切点:定义具体拦截规则。
例如:哪些接口需要判断用户登录,哪些不需要

3.1.3 通知(Advice)

通知:定义AOP具体的执行方法。
例如:从 Session 中获取用户信息,如果获取到则是登录,没获取到表示未登录。

3.1.4 连接点(Jion Point)

连接点:有可能触发切点的所有点,也就是所有接口。

3.2 SpringAOP实现

3.2.1 添加依赖

        <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-aop -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

3.2.2 定义切面

@Aspect  // 表示这个为切面
@Component 
public class UserAspect {
}

上述中,@Aspect注解表示这个类为切面类。@Component表示这个类随着SpringBoot启动而启动。

3.2.3 定义切点

@Aspect  // 表示这个为切面
@Component
public class UserAspect {

    // 定义切点
    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")
    public void pointcut(){}
}

使用@Pointcut注解进行定义切点,格式为 :
excution(<修饰符><返回类型><包.类.⽅法(参数)><异常>) ,一般修饰符和异常可省略。

3.2.4 执行通知

@Aspect  // 表示这个为切面
@Component
public class UserAspect {

    // 定义切点
    @Pointcut("execution(* com.example.springaop.controller.UserController.*(..))")
    public void pointcut(){}

    // 前置通知
    @Before("pointcut()")
    public void doBefore(){
        System.out.println("执行了前置通知");
    }

    // 后置通知
    @After("pointcut()")
    public void doAfter(){
        System.out.println("执行了后置通知");
    }

    // 返回之后通知
    @AfterReturning(value = "pointcut()",returning = "")
    public void doAfterReturning(){
        System.out.println("执行了返回之后通知");
    }

    // 异常通知
    @AfterThrowing("pointcut()")
    public void doAfterThrowing(){
        System.out.println("执行了异常通知");
    }
    // 环绕通知
    @Around("pointcut()")
    public Object doAroud(ProceedingJoinPoint joinPoint){
        Object result = null;
        System.out.println("环绕通知执行之前");
        try {
            // 执行目标方法
            result = joinPoint.proceed();
        } catch (Throwable e) {
            throw new RuntimeException(e);
        }
        System.out.println("环绕通知执行之后");
        return result;
    }
}

可以通过下面看到执行顺序:
一文带你迅速了解下Spring中的AOP,SSM,spring,java,后端

4. SpringAOP实现原理

SpringAOP是构建在动态代理的基础上实现的,因此 Spring 对 AOP 支持局限于方法级别上。

  • JDK Proxy:默认情况下,实现了接口的类,使用 AOP 基于 JDK 生成代理类
  • CGLIB:默认情况下,没有实现接口的类,通过实现代理类的子类来实现动态代理(被final修饰的类不能代理)
  • 两者底层都是通过反射

JDK 和 CGLIB 区别:文章来源地址https://www.toymoban.com/news/detail-645253.html

  • JDK来自JAVA;CGLIB属于三方
  • JDK:是通过实现类接口的类来生成代理类;CGLIB是通过实现了代理类的子类来实现动态地理
  • JDK7之后版本,JDK Proxy性能高于 CGLIB;JDK7之前,CGLIB 性能远远高于 JDK Proxy

到了这里,关于一文带你迅速了解下Spring中的AOP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring与Mybatis集成且Aop整合(放飞双手,迅速完成CRUD及分页)

    目录  一、概述 二、集成 ( 1 ) 为什么 ( 2 ) 优点 ( 3 ) 实例 三、整合 3.1 讲述 3.2 整合进行分页 带我们带来的收获 集成是指将不同的组件、系统或框架整合在一起,使它们能够协同工作,共同完成某个功能或提供某种服务。在软件开发中,集成通常指的是将多个独立的模块或

    2024年02月11日
    浏览(32)
  • 一文了解SpringBoot中的Aop

    目录 1.什么是Aop 2.相关概念 3.相关注解 4.为什么要用Aop 5.Aop使用案例 1.什么是Aop AOP :Aspect Oriented Programming, 面向切面 ,是Spring三大思想之一,另外两个是 IOC-控制反转 DI-依赖注入 ( @Autowired、@Qualifier、@Resource ) 2.相关概念 切面(aspect): 横切面对象,一般为一个具体类对象(可

    2024年02月11日
    浏览(30)
  • 深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用

    🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 《Spring 狂野之旅:从入门到入魔》 🚀 本专栏带你从Spring入门到入魔   这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.csdn

    2024年03月21日
    浏览(71)
  • [SSM]Spring面向切面编程AOP

    目录 十五、面向切面编程AOP 15.1AOP介绍 15.2AOP的七大术语 15.3切点表达式 15.4使用Spring的AOP 15.4.1准备工作 15.4.2基于AspectJ的AOP注解式开发 15.4.3基于XML配置方式的AOP(了解) 15.5AOP的实际案例:事务处理 15.6AOP的实际案例:安全日志 IoC使软件组件松耦合。AOP让你能够捕捉系统中经

    2024年02月15日
    浏览(37)
  • Spring之AOP(带你一篇文章搞定AOP)

    Spring的核心之一:AOP 用的依赖(包括上篇文章讲诉的IOC依赖): AOP:面向切面编程。利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。通俗来说就是在不修改代码的情况下添加新的功能

    2024年02月16日
    浏览(39)
  • 【Spring(十一)】万字带你深入学习面向切面编程AOP

      今天我们来学习 AOP ,在最初我们学习Spring时说过Spring的两大特征,一个是 IOC ,一个是 AOP ,我们现在要学习的就是这个AOP。   AOP: 面向切面编程 ,一种编程范式,指导开发者如何组织程序结构。   作用:在不惊动原始设计的基础上为其进行 功能增强 。   首先我们先

    2024年01月25日
    浏览(70)
  • 【MySQL】一文带你了解MySQL中的子查询

    子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入 。 SQL 中子查询的使用大大增强了 SELECT 查询的能力 ,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出一个数据结果,然后与这个数据结果(可能是某个标量

    2024年02月08日
    浏览(38)
  • MAVEN利器:一文带你了解MAVEN中的依赖管理

    强大的构建工具——Maven。作为Java生态系统中的重要组成部分,Maven为开发人员提供了一种简单而高效的方式来构建、管理和发布Java项目。无论是小型项目还是大型企业级应用,Maven都能帮助开发人员轻松处理依赖管理、编译、测试和部署等任务。 在上一篇文章中,我们学习

    2024年02月10日
    浏览(28)
  • 一文带你深入了解算法笔记中的前缀与差分(附源码)

    📖作者介绍:22级树莓人(计算机专业),热爱编程<目前在c++阶段, 因为最近参加新星计划算法赛道(白佬),所以加快了脚步,果然急迫感会增加动力 ——目标Windows,MySQL,Qt,数据结构与算法,Linux,多线程,会持续分享学习成果和小项目的 📖作者主页:热爱编程的

    2023年04月12日
    浏览(38)
  • 【Spring】一文带你吃透IOC技术

    个人主页: 几分醉意的CSDN博客_传送门 loC,Inversion ofControl: 控制反转,是一个理论,一个指导思想。指导开发人员如何使用对象,管理对象的。把对象的创建,属性赋值,对象的声明周期都交给代码之外的容器管理。 loC分为控制和反转    ● 控制: 对象创建,属性赋值,对

    2023年04月08日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包