Spring Aop:面向切面编程

简介: Spring Aop:面向切面编程

一:什么是Spring Aop?

Aop:面向切面编程,它是一种思想,他是对某一类事情的集中处理,针对某一方面的问题进行集中处理。

Spring Aop是一种框架,提供了对Aop思想的实现。

二:Aop常见的使用场景

1:用户登录判断

2:统一日志记录(计算方法的执行次数)

3:统计方法执行时间统计(分析和排查系统的问题)

4:统一的返回格式设置(前后端数据一致性)

  eg:一个前端对应四个后端,四个后端返回数据的格式不一样,前端必须处理四个后端的数据格式,很麻烦,所以要统一的返回格式相同。

5:统一的异常处理

6;事务的开启和提交

三:开启学习Spring Aop之旅

3.1:Aop的组成

3.1.1:切面

切面:由切点和通知组成,既包含了横切逻辑的定义,也包含连接点的定义。

       切面是包含了通知,切点,切面的类,相当于Aop实现某个功能的集合。

3.1.2:连接点

连接点:应用执行过程中能够插入的一个点。

3.1.3:切点

切点:是匹配连接点的谓词。

        提供一组规则,来匹配连接点,给满足的连接点添加通知。

3.1.4:通知

通知:切面也是有它的目标的,即要完成的工作。切面的工作被称为通知。

3.1.4.1:前置通知

前置通知:在目的方法执行前执行的通知,叫做前置通知。

 以上图为例,假设user要发送文章,要经过两步,先进行登录,再发送文章。在没学习Aop之前,我们会在添加文章的方法里面添加登录方法。即发送 文章的方法为目标方法,而登录这一操作可以放在Aop当中,被称为前置通知,如果登录成功,则发送文章,如果登录失败,则返回错误提示。

3.1.4.2:后置通知

后置通知:将目标方法执行完之后,所执行的通知成为后置通知。

举个栗子:

             当jdbc使用完之后,释放资源,此时,释放资源可以放在aop中。

3.1.4.3:异常通知

异常通知:在执行目标方法时,执行的通知。

3.1.4.4:返回通知

返回通知:目标方法执行了返回数据(return),执行的通知。

3.1.4.5:环绕通知

环绕通知: 在目标方法执行前中后,都可以执行的通知,就叫做环绕通知。

3.2:实现Spring Aop

3.2.1添加Aop框架支持

手动在pom.xml添加Aop依赖

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

3.2.2定义切面和切点

注意:

      1:在根目录下创建切面

      2:此类随着框架的启动而启动,所以要加5大类注解吗,此处推荐组件的注解

      3:此类是一个切面,需要在类的上面添加@Aspect这个注解,告诉spring是一个切面

@Component//随着框架的启动而启动
@Aspect//告诉spring框架,是一个切面的类
public class UserAspect {
    //定义切点,定义拦截的规则
    @Pointcut("execution(* com.example.demo12.controller.UserController.*(..))")
    public void pointcut(){};
}

3.2.3:定义通知

在切面这个类进行添加通知:

//定义通知
    //前置通知。这个通知针对哪个切点的
    @Before("pointcut()")
    public void BeforeAdvice(){
        System.out.println("执行了前置通知");
    }
   //后置通知
    @After("pointcut()")
    public void AfterAdvice(){
        System.out.println("执行了后置通知");
    }

运行结果:执行了目的方法的前置通知之后,执行了目的方法,再执行后置方法。

3.3.4定义环绕通知

@Around("pointcut()")
    public Object aroundAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
        System.out.println("进入环绕通知了");
        Object obj=null;
        //执行目标方法
         obj = joinPoint.proceed();
        System.out.println("退出环绕通知");
        return obj;
    }

3.3.5:切点表达式

相关文章
|
10天前
|
XML Java 数据安全/隐私保护
Spring Aop该如何使用
本文介绍了AOP(面向切面编程)的基本概念和术语,并通过具体业务场景演示了如何在Spring框架中使用Spring AOP。文章详细解释了切面、连接点、通知、切点等关键术语,并提供了完整的示例代码,帮助读者轻松理解和应用Spring AOP。
Spring Aop该如何使用
|
17天前
|
安全 Java 编译器
什么是AOP面向切面编程?怎么简单理解?
本文介绍了面向切面编程(AOP)的基本概念和原理,解释了如何通过分离横切关注点(如日志、事务管理等)来增强代码的模块化和可维护性。AOP的核心概念包括切面、连接点、切入点、通知和织入。文章还提供了一个使用Spring AOP的简单示例,展示了如何定义和应用切面。
51 1
什么是AOP面向切面编程?怎么简单理解?
|
30天前
|
存储 缓存 Java
Spring高手之路23——AOP触发机制与代理逻辑的执行
本篇文章深入解析了Spring AOP代理的触发机制和执行流程,从源码角度详细讲解了Bean如何被AOP代理,包括代理对象的创建、配置与执行逻辑,帮助读者全面掌握Spring AOP的核心技术。
37 3
Spring高手之路23——AOP触发机制与代理逻辑的执行
|
15天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
27 1
|
21天前
|
XML Java 开发者
论面向方面的编程技术及其应用(AOP)
【11月更文挑战第2天】随着软件系统的规模和复杂度不断增加,传统的面向过程编程和面向对象编程(OOP)在应对横切关注点(如日志记录、事务管理、安全性检查等)时显得力不从心。面向方面的编程(Aspect-Oriented Programming,简称AOP)作为一种新的编程范式,通过将横切关注点与业务逻辑分离,提高了代码的可维护性、可重用性和可读性。本文首先概述了AOP的基本概念和技术原理,然后结合一个实际项目,详细阐述了在项目实践中使用AOP技术开发的具体步骤,最后分析了使用AOP的原因、开发过程中存在的问题及所使用的技术带来的实际应用效果。
48 5
|
11天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
24 0
|
1月前
|
Java 编译器 Spring
Spring AOP 和 AspectJ 的区别
Spring AOP和AspectJ AOP都是面向切面编程(AOP)的实现,但它们在实现方式、灵活性、依赖性、性能和使用场景等方面存在显著区别。‌
68 2
|
1月前
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
127 9
|
1月前
|
Java 数据库连接 Spring
【2021Spring编程实战笔记】Spring开发分享~(下)
【2021Spring编程实战笔记】Spring开发分享~(下)
26 1
|
1月前
|
Java 容器
AOP面向切面编程
AOP面向切面编程
42 0