一、Spring AOP

AOP(Aspect Oriented Programming) 是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。

其中的核心概念:

名称

说明

Joinpoint(连接点)

指那些被拦截的点,在spring中,指可以被动态代理拦截目标类的方法

Pointcut(切入点)

指要对哪些 Jointpoint 进行拦截,即被拦截的连接点

Advice(通知)

指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容

Target(目标)

指代理的目标对象

Weaving(植入)

指把增强代码应用到目标上,生成代理对象的过程

Proxy(代理)

指生成的代理对象

Aspect(切面)

切入点和通知的结合

二、AOP的使用场景

AOP可以拦截指定的方法,并且对方法增强,比如:事务、日志、权限、性能监测等增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离。

三、AOP的通知分类以及代码示例

1、通知的分类

2、代码示例

(1)pom.xml中导入依赖

        <dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.9.7</version></dependency>

(2)新建配置类LogAspectConfig,使用 @Component、@Aspect 定义切面,@Pointcut定义切点

@Component
@Aspect
public class LogAspectConfig {// 匹配指定包中的所有方法//execution(* org.example.service.*(..))// 匹配当前包中的所有public方法//execution(public * UserService.*(..))// 匹配指定包中的所有public方法,并且返回值是int类型的方法//execution(public int org.example.service.*(..))// 切点@Pointcut("execution(* org.example.controller.*.*(..))")public void operationLog(){};/*** 方法执行前调用* @param joinPoint*/@Before("operationLog()")public void TestBefore(JoinPoint joinPoint){String methodName = joinPoint.getSignature().getName();System.out.println("即将调用该方法:" + methodName);}/*** 方法调用后执行* @param joinPoint*/@After("operationLog()")public void afterHandler(JoinPoint joinPoint) {Object[] args = joinPoint.getArgs();String name = joinPoint.getSignature().getName();System.out.println("入参:" + Arrays.asList(args).toString() + ",调用方法名称:" + name);System.out.println("调用方法之后");}/*** 调用方法并正常返回后执行*/@AfterReturning("operationLog()")public void afterReturningHandler() {System.out.println("调用方法并正常返回后执行");}/*** 调用方法却抛出异常后执行*/@AfterThrowing("operationLog()")public void afterThrowingHandler() {System.out.println("调用方法却抛出异常后执行");}/*** 环绕增强,能控制切点执行前,执行后* @param joinPoint* @return*/@Around("operationLog()")public Object doAround(ProceedingJoinPoint joinPoint) {Object proceed = null;try {System.out.println("方法执行前");proceed = joinPoint.proceed();System.out.println("方法执行后");} catch (Throwable throwable) {throwable.printStackTrace();}return proceed;}
}

(3)创建CommonController

@RestController
@RequestMapping("/text")
public class CommonController {@GetMapping("/query/{id}")public String query(@PathVariable int id) {if ( 1 == id ) {return "李四";}return "张三";}
}

(4)postman请求该URL

GET请求: http://192.168.11.7:27100/text/query/1
返回结果:
方法执行前
即将调用该方法:query
方法执行后
入参:[1],调用方法名称:query
调用方法之后
调用方法并正常返回后执行

关于 @Aspect 注解的使用相关推荐

  1. @aspect注解无法添加

    项目场景: 提示:这里简述项目相关背景: 因为毕设要求,在学后端的spring框架,然后在学到aop的时候,发现@Aspect注解无法进行解析,Cannot resolve symbol 'Aspce ...

  2. @Aspect注解使用场景

    小刘的切面主要用于日志挡板. 1.首先 springboot中pom引入jar <dependency><groupId>org.springframework.boot< ...

  3. @Aspect注解用法

    本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:AspectJProxyFactory,可能大家对这个比较陌生,但是@Aspect这个注解大家应该很熟悉吧,通过这个注解在s ...

  4. SpringAOP Aspect注解实现简单日志功能

    SpringAOP实现简单日志功能 AOP(Aspect Oriented Programming):面向切面编程,Spring框架的重要组成部分,利用AOP我们可以将一些公用的业务逻辑部分抽取出来, ...

  5. @aspect注解类不生效_Spring Boot从入门到精通(三)常用注解含义及用法分析总结...

    Spring Boot是目前非常流行的框架,而注解是Spring Boot的核心功能,接下来主要说一说Spring Boot常用注解的含义以及部分注解在项目中的使用方法. @RestControlle ...

  6. @aspect注解_Spring自定义注解玩法大全,从入门到放弃

    在业务开发过程中我们会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求,我们可以自定义注解来满足我们的需求. 根据注解使用的位置,文章将分成字段注解.方法.类注解来介绍自定义注解. ...

  7. Java AOP开发模式@Aspect注解说明

    2 注解说明 2.1 @Aspect 作用是把当前类标识为一个切面供容器读取 2.2 @Before 标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有 2.3 @AfterR ...

  8. @aspect注解类不生效_springboot:@Transactional注解 VS @Service注解

    1. Transactional注解与Service/Component注解冲突? 之前遇到一个神奇的事情--用Transactional注解的方法,数据处理了一半,后面的数据处理抛出异常后,没有回滚 ...

  9. @Aspect注解无效

    Pointcut的execution配置正确的话,检查下,是否加了以下jar包 <!-- http://mvnrepository.com/artifact/org.aspectj/aspect ...

最新文章

  1. 一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别 一、这四个方法的用处 1、用来编码和解码URI的 统一资源标识符
  2. 数据蒋堂 | 这个产品能支持多大数据量?
  3. java css_JavaWeb中基本的CSS的使用
  4. Mac androidStudio cannot resolve corresponding JNI function
  5. Dockerfile指令详解:WORKDIR 指定工作目录
  6. js下拉 selenium_selenium 难定位元素,时间插件,下拉框定位,string
  7. java https jasonrpc_以太坊 ethereum JSON-RPC java 调用示例
  8. NET比较常用的性能优化技巧
  9. 石子合并(洛谷-P1880)
  10. C# 给自己写的软件,加注册码功能。
  11. indesign软件教程,如何更改内容颜色?
  12. vue自定义一个视频播放器
  13. 谷歌中国四年去本地化接近尾声
  14. 《FLIPPED》(怦然心动)读书笔记
  15. js进阶之天猫弹性导航
  16. 【python学习笔记】python运算符以及简单语句
  17. HTML 表格与表单 个人简历
  18. 服务器文件防止被扒,防止别人扒自己的网页方法
  19. 程序员通常都有哪些业余爱好
  20. openwrt patch文件怎么用_openwrt patch

热门文章

  1. Solidity介绍
  2. mysql 字段 下拉列表_用数据库表填充下拉列表框
  3. 霍尔传感器的工作原理
  4. 想要制作令人震撼的大屏可视化,要如何提升自己的可视化效果?
  5. c++ includes
  6. 编号:1001 题目:【2017.1.17】小X的逆袭
  7. 远程视频专家系统,指导系统方案整理
  8. 给力!低代码开发平台广州流辰信息科技助您增辉创价值!
  9. Driller、Exploit自动生成引擎 Rex
  10. 阿里云天池SQL训练营学习记录