关于 @Aspect 注解的使用
一、Spring AOP
AOP(Aspect Oriented Programming) 是一种面向切面的编程思想。面向切面编程是将程序抽象成各个切面,即解剖对象的内部,将那些影响了多个类的公共行为抽取到一个可重用模块里,减少系统的重复代码,降低模块间的耦合度,增强代码的可操作性和可维护性。
其中的核心概念:
名称 |
说明 |
Joinpoint(连接点) |
指那些被拦截的点,在spring中,指可以被动态代理拦截目标类的方法 |
Pointcut(切入点) |
指要对哪些 Jointpoint 进行拦截,即被拦截的连接点 |
Advice(通知) |
指拦截到 Joinpoint 之后要做的事情,即对切入点增强的内容 |
Target(目标) |
指代理的目标对象 |
Weaving(植入) |
指把增强代码应用到目标上,生成代理对象的过程 |
Proxy(代理) |
指生成的代理对象 |
Aspect(切面) |
切入点和通知的结合 |
二、AOP的使用场景
AOP可以拦截指定的方法,并且对方法增强,比如:事务、日志、权限、性能监测等增强,而且无需侵入到业务代码中,使业务与非业务处理逻辑分离。
三、AOP的通知分类以及代码示例
1、通知的分类
![](/assets/blank.gif)
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
调用方法之后
调用方法并正常返回后执行
![](/assets/blank.gif)
关于 @Aspect 注解的使用相关推荐
- @aspect注解无法添加
项目场景: 提示:这里简述项目相关背景: 因为毕设要求,在学后端的spring框架,然后在学到aop的时候,发现@Aspect注解无法进行解析,Cannot resolve symbol 'Aspce ...
- @Aspect注解使用场景
小刘的切面主要用于日志挡板. 1.首先 springboot中pom引入jar <dependency><groupId>org.springframework.boot< ...
- @Aspect注解用法
本文继续AOP,目前手动Aop中三种方式已经介绍2种了,本文将介绍另外一种:AspectJProxyFactory,可能大家对这个比较陌生,但是@Aspect这个注解大家应该很熟悉吧,通过这个注解在s ...
- SpringAOP Aspect注解实现简单日志功能
SpringAOP实现简单日志功能 AOP(Aspect Oriented Programming):面向切面编程,Spring框架的重要组成部分,利用AOP我们可以将一些公用的业务逻辑部分抽取出来, ...
- @aspect注解类不生效_Spring Boot从入门到精通(三)常用注解含义及用法分析总结...
Spring Boot是目前非常流行的框架,而注解是Spring Boot的核心功能,接下来主要说一说Spring Boot常用注解的含义以及部分注解在项目中的使用方法. @RestControlle ...
- @aspect注解_Spring自定义注解玩法大全,从入门到放弃
在业务开发过程中我们会遇到形形色色的注解,但是框架自有的注解并不是总能满足复杂的业务需求,我们可以自定义注解来满足我们的需求. 根据注解使用的位置,文章将分成字段注解.方法.类注解来介绍自定义注解. ...
- Java AOP开发模式@Aspect注解说明
2 注解说明 2.1 @Aspect 作用是把当前类标识为一个切面供容器读取 2.2 @Before 标识一个前置增强方法,相当于BeforeAdvice的功能,相似功能的还有 2.3 @AfterR ...
- @aspect注解类不生效_springboot:@Transactional注解 VS @Service注解
1. Transactional注解与Service/Component注解冲突? 之前遇到一个神奇的事情--用Transactional注解的方法,数据处理了一半,后面的数据处理抛出异常后,没有回滚 ...
- @Aspect注解无效
Pointcut的execution配置正确的话,检查下,是否加了以下jar包 <!-- http://mvnrepository.com/artifact/org.aspectj/aspect ...
最新文章
- 一张图看懂encodeURI、encodeURIComponent、decodeURI、decodeURIComponent的区别 一、这四个方法的用处 1、用来编码和解码URI的 统一资源标识符
- 数据蒋堂 | 这个产品能支持多大数据量?
- java css_JavaWeb中基本的CSS的使用
- Mac androidStudio cannot resolve corresponding JNI function
- Dockerfile指令详解:WORKDIR 指定工作目录
- js下拉 selenium_selenium 难定位元素,时间插件,下拉框定位,string
- java https jasonrpc_以太坊 ethereum JSON-RPC java 调用示例
- NET比较常用的性能优化技巧
- 石子合并(洛谷-P1880)
- C# 给自己写的软件,加注册码功能。
- indesign软件教程,如何更改内容颜色?
- vue自定义一个视频播放器
- 谷歌中国四年去本地化接近尾声
- 《FLIPPED》(怦然心动)读书笔记
- js进阶之天猫弹性导航
- 【python学习笔记】python运算符以及简单语句
- HTML 表格与表单 个人简历
- 服务器文件防止被扒,防止别人扒自己的网页方法
- 程序员通常都有哪些业余爱好
- openwrt patch文件怎么用_openwrt patch