首页 > 其他分享 >Spring AOP

Spring AOP

时间:2024-11-21 12:45:43浏览次数:3  
标签:Spring AOP 切点 通知 注解 表达式

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

目录

1. AOP概述

1.1 AOP有哪些可用的实现?

2. Spring AOP程序入门

2.1 配置AOP依赖

2.2 编写AOP程序

​编辑 3. Spring AOP详解

3.1 基础概念

3.2 通知类型 

3.3 @PointCut

1.同一个切面类内 

2.其他切面类

3.4 切⾯优先级@Order 

3.5 切点表达式 

1. execution表达式

2. @annotation 

⾃定义注解 @CostTime

1. @Target

2. @Retention

3. 切⾯类

​编辑4. 添加⾃定义注解

​编辑 Spring AOP的实现⽅式


1. AOP概述

AOP就是⾯向切⾯编程的简称,它是⼀种思想,是对某⼀类事情的集中处理.

什么是SpringAOP?

AOP是⼀种思想,它的实现⽅法有很多,有SpringAOP,也有AspectJ、CGLIB等

Spring AOP是其中的一种实现方式

AOP 的作⽤:在程序运⾏期间在不修改源代码的基础上对已有⽅法进⾏增强

AOP就可以做到在不改动这些原始⽅法的基础上,针对特定的⽅法进⾏功能的增强

1.1 AOP有哪些可用的实现?

基于Java的主要AOP实现有:

  1. AspectJ
  2. Spring AOP
  3. JBoss AOP

2. Spring AOP程序入门

2.1 配置AOP依赖

在pom.xml⽂件中添加配置

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

2.2 编写AOP程序

@Component
@Slf4j
@Aspect
public class TimeRecordAspect {
    @Around("execution(* com.bite.book.controller.*.*(..))")
    public Object timeRecord(ProceedingJoinPoint joinPoint) throws Throwable {
        //记录方法耗时

        //开始时间
        long start = System.currentTimeMillis();
        //执行原始方法
        Object result = joinPoint.proceed();
        //记录耗时时间
        log.info(joinPoint.getSignature()+"耗时" +(System.currentTimeMillis()-start)+"ms");
        return result;
    }
}

执行查看日志 

对程序进⾏简单的讲解:

1. @Aspect:标识这是⼀个切⾯类

2. @Around: 环绕通知,在⽬标⽅法的前后都会被执⾏.后⾯的表达式表⽰对哪些⽅法进⾏增强.

3. joinPoint.proceed()让原始⽅法执⾏ 

整个代码划分为三部分 :

 3. Spring AOP详解

3.1 基础概念

切点

连接点

通知

切⾯: 切⾯(Aspect)=切点(Pointcut)+通知(Advice)

通过切⾯就能够描述当前AOP程序需要针对于哪些⽅法,在什么时候执⾏什么样的操作

切⾯既包含了通知逻辑的定义,也包括了连接点的定义

切⾯所在的类,我们⼀般称为切⾯类

3.2 通知类型 

@Around:环绕通知,此注解标注的通知⽅法在⽬标⽅法前,后都被执⾏

@Before:前置通知,此注解标注的通知⽅法在⽬标⽅法前被执⾏

@After:后置通知,此注解标注的通知⽅法在⽬标⽅法后被执⾏,⽆论是否有异常都会执⾏

@AfterReturning: 返回后通知,此注解标注的通知⽅法在⽬标⽅法后被执⾏,有异常不会执⾏

@AfterThrowing:异常后通知,此注解标注的通知⽅法发⽣异常后执⾏

3.3 @PointCut

Spring提供了@PointCut注解,把公共的切点表达式提取出来, 需要⽤到时引⽤该切⼊点表达式即可

1.同一个切面类内 

@Component
@Slf4j
@Aspect
public class MyAspectDemo {

    @Pointcut("execution(* com.lxy.demo.controller.*.*(..))")
    public void pt(){};

    @Before("pt()")
    public void doBefore(JoinPoint joinPoint){
        log.info(joinPoint.getSignature().toShortString());
        log.info("执行before方法...");}

    @After("pt()")
    public void doAfter(){ log.info("执行after方法...");}

}


2.其他切面类

当其他切⾯类也要使⽤当前切点定义时,引⽤⽅式为: 全限定类名.⽅法名()

 

3.4 切⾯优先级@Order 

Spring 给我们提供了⼀个新的注解, 来控制这些切⾯通知的执⾏顺序: @Order

 @Order 控制切⾯的优先级,先执⾏优先级较⾼的切⾯,再执⾏优先级较低的切⾯,最终执⾏⽬标⽅法

@Order注解标识的切⾯类,执⾏顺序如下:

• @Before 通知:数字越⼩先执⾏

• @After 通知:数字越⼤先执⾏ 

3.5 切点表达式 

1. execution表达式

execution() 是最常⽤的切点表达式,⽤来匹配⽅法

切点表达式⽰例 

2. @annotation 

实现步骤:

1. 编写⾃定义注解

2. 使⽤ @annotation 表达式来描述切点

3. 在连接点的⽅法上添加⾃定义注解

准备代码:

⾃定义注解 @CostTime

1. @Target

@Target标识了 Annotation 所修饰的对象范围, 即该注解可以⽤在什么地⽅.

ElementType.TYPE: ⽤于描述类、接⼝(包括注解类型) 或enum声明

ElementType.METHOD: 描述⽅法

ElementType.PARAMETER: 描述参数

ElementType.TYPE_USE: 可以标注任意类型

2. @Retention

@Retention指Annotation被保留的时间⻓短, 标明注解的⽣命周期

3. 切⾯类

使⽤ @annotation 切点表达式定义切点, 只对 @CostTime⽣效
 


4. 添加⾃定义注解

在TestController中的t1()和UserController中的u2()这两个⽅法上添加⾃定义注解 @CostTime , 其

他⽅法不添加

 Spring AOP的实现⽅式

1. 基于注解 @Aspect 

2. 基于⾃定义注解

3. 基于SpringAPI(通过xml配置的⽅式)

4. 基于代理来实现(更加久远的⼀种实现⽅式)

标签:Spring,AOP,切点,通知,注解,表达式
From: https://blog.csdn.net/jj666mhhh/article/details/143811891

相关文章

  • 中小企业人事管理:SpringBoot框架实战
    第6章系统测试6.1系统测试的目的程序设计不能保证没有错误,这是一个开发过程,在错误或错误的过程中都是难以避免的。虽然这是不可避免的,但我们不能使这些错误始终存在于系统中,错误可能会造成无法估量的后果,如系统崩溃,安全信息泄露,系统无法正常启动等,为了避免这些问题,我们需......
  • SpringBoot中小企业人事管理系统:安全特性
    摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,中小企业人事管理系统当然也不能排除在外。中小企业人事管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用springboot框架构建的一个管理系统......
  • SpringBoot中小企业人事管理:快速开发指南
    第4章系统设计4.1系统体系结构中小企业人事管理系统的结构图4-1所示:图4-1系统结构登录系统结构图,如图4-2所示:图4-2登录结构图中小企业人事管理系统结构图,如图4-3所示。图4-3中小企业人事管理系统结构图4.2开发流程设计系统流程的分析是通过调查系统所涉及......
  • 中小企业人事管理系统:SpringBoot实现细节
    第4章系统设计4.1系统体系结构中小企业人事管理系统的结构图4-1所示:图4-1系统结构登录系统结构图,如图4-2所示:图4-2登录结构图中小企业人事管理系统结构图,如图4-3所示。图4-3中小企业人事管理系统结构图4.2开发流程设计系统流程的分析是通过调查系统所涉及......
  • SpringBoot开发——统计接口调用耗时的几种方法
    文章目录一、统计接口调用耗时的方法二、代码实现1、使用AOP统计接口调用耗时1.1引入依赖1.2创建切面类1.3测试接口2、使用SpringBootActuator2.1引入依赖2.2访问端点2.3配置端点3、使用过滤器统计接口调用耗时3.1定义过滤器类3.2启......
  • SpringBoot永加乡精准扶贫信息管理系统48il8 带论文文档1万字以上
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,贫困户档案,帮扶审定,成效管理开题报告内容一、研究背景与意义永加乡作为一个地处偏远、资源相对匮乏的乡村地区,面临着贫困人口多、致贫原因复杂......
  • 毕业设计 基于Springboot的手机商城销售系统
    源码获取欢迎留言一、摘要本论文基于SpringBoot框架,采用Java语言以及HTML+CSS技术,构建了一款手机商城销售系统。该系统以MySQL数据库作为后端数据存储,开发过程中使用了IDEA开发工具。用户界面和管理员界面包含不同的功能模块,如首页、商品信息、新闻资讯、跳转到后台、购物......
  • Spring Boot 集成 Flyway,数据库也能做版本控制,太牛逼了!
     一、Flyway是什么?  我们都知道,Git/SVN是代码界的版本控制工具,那么,Flyway就是一款数据库界的版本控制工具,它可以记录数据库的变化记录。 可能很多公司都是通过人工去维护、同步数据库脚本,但经常会遇到疏忽而遗漏的情况,举个简单的例子: 我们在开发环境对某个表新......
  • 【springboot开发】SpringBoot中出入参增强的5种方法 : 加解密、脱敏、格式转换、时间
    1.使用@JsonSerialize和@JsonDeserialize注解2.全局配置Jackson的ObjectMapper3.使用@ControllerAdvice配合@InitBinder4.自定义HttpMessageConverter5.使用AOP进行切面编程结语在SpringBoot中,对接口的请求入参和出参进行自定义的增......
  • 基于Java+SpringBoot的影院订票系统
    关注底部领取源码源码编号:S346源码名称:基于SpringBoot的影院订票系统用户类型:双角色,用户、管理员主要技术:Java、Vue、ElementUl、SpringBoot运行环境:Windows/Mac、JDK1.8及以上运行工具:IDEA/Eclipse数 据 库:MySQL5.7及以上版本数据库表数量:11张表是否有毕业论文......