spring的aop准备工作-导包定义通知
然后接下来准备通知,这就是咱们要学的新内容了,在Spring当中,如何定义通知呢,看好,右键,new一个class,a_aspect,然后这儿的话咱们定义一个通知,通知英文名叫做Advice,MyAdvice,这个名词就叫Advice,通知,咱们作为通知类,然后呢,在这个类当中,Spring在AOP生成代理的时候,非常体贴,他根据咱们现实开发的情况,把通知分成了好多种,根据不同的需要,咱们挑选咱们需要通知的种类,哪些种通知,前置通知,后置通知,环绕通知,还有咱们的异常拦截通知,以及后置通知,有些人说后置通知重复了,没有重复,一种后置通知,如果出现异常,将不会调用它,如果出现异常不会调用,无论是否出现异常,都会调用,那所谓前置通知,前置通知看名字就知道,还记得通知名词是啥意思吧,咱们打算增强目标方法中的代码,通知就是希望,你写的这段通知代码,是在目标方法运行之前调用,然后后置通知,是啥意思呢,是希望在目标方法运行之后调用,环绕通知呢,它是希望在目标方法之前,和之后,都调用,那所谓异常拦截通知的话,从他名字也能看出来,如果出现异常,就会调用通知代码,这个后置通知,在目标方法运行之后调用,区别已经说了,一个是出现异常掉,一个是出现异常不调,一共是分为5种通知,接下来这个通知,在类中怎么定义,在Spring中很简单,使用方法来进行控制的,声明一个方法public void,before自己定义的,直观点叫做before,咱们作为前置通知,那前置通知这里面要做什么事,看明白啥意思不,是不是很简单,然后把这个复制一份,后置通知,后置方法名随意,但是我为了让你们看明白这个方法是什么通知,afterReturning,就是在目标方法之后调用,这是后置通知,如果方法出现异常,不会调用,我把这句话也粘上,后面的是后置通知,咱们再来一个环绕通知,环绕通知方法名你们能看懂,around,环绕,环绕通知呢,是五种通知当中最特别的一种通知,你可以看到,这环绕通知是在目标方法之前和之后,都会调用,其实这就意味着,他要控制目标方法调用的,也就是需要咱们手动来调用目标方法,在咱们目标方法之前和之后,这是唯一特殊的通知,这个通知特殊在哪呢,你必须有一个参数,叫ProceedJoinPoint对象,pjp,然后呢,通过这个对象,来调用咱们的pjp点,这个方法叫做什么来的,在这呢,异常要抛就可以了,抛出这个异常,这行代码,就是调用目标方法代码,就是调用目标方法,咱们环绕通知,在目标方法之前和之后加代码,这是环绕通知之前的部分,然后复制一下,这是环绕通知之后的部分,看明白啥意思,你需要手动来调用目标方法,利用人家暴露的api调用目标方法,人家暴露的api就是这样的,这是要死记硬背的,然后这个方法还有一个特殊就是,还有一个返回值,你要把目标方法返回值给return出去,是不是有点像刚才的动态代理,动态代理的源码,就是这个意思,接下来再来看异常通知,异常通知方法名afterException,就是在异常出现之后,然后出现异常通知也打印一下,异常通知,最后一个后置通知,就是after,这个是后置通知,出现异常也会调用,刚才是出现异常不会调用,这个出现异常也会调用,这样的话,咱们5类通知就定义好了,这就是咱们的通知类,通知的描述部分,下面是通知的定义部分,咱们看看这个流程,包也导好了,目标对象也准备好了,通知也准备好了,咱们说代理简单也简单,无非就是把通知织入到目标对象,所以最后只要你告诉Spring说,这是这些通知,你给我织入到目标对象,只要在配置文件里一描述,这是不是就妥了,那咱们怎么来进行配置的,是不是咱们要学的一个关键点
package com.learn.a_aspect;import org.aspectj.lang.ProceedingJoinPoint;/*** 通知类* @author Leon.Sun**/
public class MyAdvice {/*** 前置通知* |-目标方法运行之前调用*//*** 后置通知(如果出现异常不会调用)* |-在目标方法运行之后调用*//*** 环绕通知* |-在目标方法之前和之后调用*//*** 异常拦截通知* |-如果出现异常,就会调用*//*** 后置通知(无论是否出现异常 都会调用)* |-在目标方法运行之后调用*/// --------------------------------------------------------------------/*** 前置通知*/public void before() {System.out.println("这是前置通知!!");}/*** 后置通知*/public void afterReturning() {System.out.println("这是后置通知!!(如果出现异常不会调用)");}/*** 环绕通知* @param pjp* @throws Throwable */public Object around(ProceedingJoinPoint pjp) throws Throwable {System.out.println("这是环绕通知之前的部分!!");/*** 调用目标方法*/Object proceed = pjp.proceed();System.out.println("这是环绕通知之后的部分!!");return proceed;}/*** 异常通知*/public void afterException() {System.out.println("出事啦!出现异常啦!");}/*** 后置通知*/public void after() {System.out.println("后置通知(无论是否出现异常 都会调用)");}
}
spring的aop准备工作-导包定义通知相关推荐
- Spring基本了解与导包
Spring基本了解与导包 开发工具与关键技术: 作者:熊琪 撰写时间:2020年9月8日 首先简单介绍Spring是什么和其的作用.Spring是轻量级的开源的JavaEE框架,Spring可以解决 ...
- Spring的aop开发(四)通知类型
引用文章https://www.cnblogs.com/liuruowang/p/5711563.htm (1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可 ...
- spring中aop事务
文章目录 事务 为什要用到Spring中AOP事务 事物的特性 ACID 事务并发问题 事务的隔离级别 spring事务管理 事务操作 事务操作对象 spring管理事务的属性介绍 spring管理事 ...
- SSH框架之Spring4专题3:Spring与AOP
1 AOP的引入 1.1 Step1:项目aop_leadin1 先定义好接口与一个实现类,该实现类中除了要实现接口中的方法外,还要再写两个非业务方法,非业务方法也称之为交叉业务逻辑: doTrans ...
- Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)
AspectJ支持5种类型的通知注解: @Before:前置通知,在方法执行之前执行: @After:后置通知,在方法执行之后执行: @AfterRunning:返回通知,在方法返回结果之后执行(因此 ...
- 简单六步上手spring aop,通过各种类型通知,面向切面编程,实现代码解耦(超详细)
aop(面向切面编程)是一种重要的编程思想,是对面向对象编程的完善和补充.我们都很熟悉"高内聚,低耦合",这是评判代码是否优质的标准之一,而aop思想,就是对这一标准的具体实现. ...
- spring之aop(前置通知,后置通知,环绕通知,过滤通知,异常通知)
1.AOP中关键性概念 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出 目标(Target):被通知(被代理)的对象 注1:完成具体的业务逻辑 通知(Advice ...
- spring项目搭建-导包对象准备
咱们先写一下搭建步骤,第一步你们肯定都知道,第一步导包,反正导包先看第一步,在咱们的resource文件夹里面,我还是放了两个zip包,按照惯例,你把它解压出来,然后解压的话我已经做好了,接下来我要介 ...
- spring aop 必须的包 及里面用到的东西_Spring 原理初探——IoC、AOP
前言 众所周知, 现在的 Spring 框架已经成为构建企业级 Java 应用事实上的标准了,众多的企业项目都构建在 Spring 项目及其子项目之上,特别是 Java Web 项目. Spring ...
最新文章
- 图的广度优先搜索(bfs)以及深度优先搜索(dfs)
- 原生JS获取元素属性值
- 【Java并发】Runnable、Callable、Future、FutureTask
- 获取应用程序根目录物理路径(Web and Windows)
- swagger 上传文件 参数_跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义...
- 呼吸流水灯c语言程序,单片机流水灯与呼吸灯结合-滴水灯程序及详细教程
- 面经 | 靠一份PPT做自我介绍,成功拿下了互联网名企offer
- FANUC机器人_KAREL编程入门(2)_通用IO信号的使用方法
- 0x000000C2:BAD_POOL_CALLER 蓝屏修复
- 微信聊天记录不小心被删了怎么办?看看如何恢复吧!
- 计算机论文致谢词范文500字,论文致谢词范文500字(精选6篇)
- mybatis-plus调用自身的 selectById 方法报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You hav
- 冲破百亿天花板,木浪云用云和智能突破备份边界
- DeepMind再爆性骚扰丑闻!内部邮件泄露,色狼自夸猛男
- gradle-5.4.1-all gradle-6.1.1.all.zip下载包
- Z-Score如何计算
- 如何使用Python发送库存更新
- dijkstra算法和A*算法
- mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解
- 【手把手AI项目】三、Ubuntu环境下利用Anaconda在已经装好的caffe环境下搭建tensorflow-gpu环境