然后接下来准备通知,这就是咱们要学的新内容了,在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准备工作-导包定义通知相关推荐

  1. Spring基本了解与导包

    Spring基本了解与导包 开发工具与关键技术: 作者:熊琪 撰写时间:2020年9月8日 首先简单介绍Spring是什么和其的作用.Spring是轻量级的开源的JavaEE框架,Spring可以解决 ...

  2. Spring的aop开发(四)通知类型

    引用文章https://www.cnblogs.com/liuruowang/p/5711563.htm (1)Before:在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可 ...

  3. spring中aop事务

    文章目录 事务 为什要用到Spring中AOP事务 事物的特性 ACID 事务并发问题 事务的隔离级别 spring事务管理 事务操作 事务操作对象 spring管理事务的属性介绍 spring管理事 ...

  4. SSH框架之Spring4专题3:Spring与AOP

    1 AOP的引入 1.1 Step1:项目aop_leadin1 先定义好接口与一个实现类,该实现类中除了要实现接口中的方法外,还要再写两个非业务方法,非业务方法也称之为交叉业务逻辑: doTrans ...

  5. Spring(十八):Spring AOP(二):通知(前置、后置、返回、异常、环绕)

    AspectJ支持5种类型的通知注解: @Before:前置通知,在方法执行之前执行: @After:后置通知,在方法执行之后执行: @AfterRunning:返回通知,在方法返回结果之后执行(因此 ...

  6. 简单六步上手spring aop,通过各种类型通知,面向切面编程,实现代码解耦(超详细)

    aop(面向切面编程)是一种重要的编程思想,是对面向对象编程的完善和补充.我们都很熟悉"高内聚,低耦合",这是评判代码是否优质的标准之一,而aop思想,就是对这一标准的具体实现. ...

  7. spring之aop(前置通知,后置通知,环绕通知,过滤通知,异常通知)

    1.AOP中关键性概念  连接点(Joinpoint):程序执行过程中明确的点,如方法的调用,或者异常的抛出 目标(Target):被通知(被代理)的对象 注1:完成具体的业务逻辑 通知(Advice ...

  8. spring项目搭建-导包对象准备

    咱们先写一下搭建步骤,第一步你们肯定都知道,第一步导包,反正导包先看第一步,在咱们的resource文件夹里面,我还是放了两个zip包,按照惯例,你把它解压出来,然后解压的话我已经做好了,接下来我要介 ...

  9. spring aop 必须的包 及里面用到的东西_Spring 原理初探——IoC、AOP

    前言 众所周知, 现在的 Spring 框架已经成为构建企业级 Java 应用事实上的标准了,众多的企业项目都构建在 Spring 项目及其子项目之上,特别是 Java Web 项目. Spring ...

最新文章

  1. 图的广度优先搜索(bfs)以及深度优先搜索(dfs)
  2. 原生JS获取元素属性值
  3. 【Java并发】Runnable、Callable、Future、FutureTask
  4. 获取应用程序根目录物理路径(Web and Windows)
  5. swagger 上传文件 参数_跟我一起学.NetCore之Swagger让前后端不再烦恼及界面自定义...
  6. 呼吸流水灯c语言程序,单片机流水灯与呼吸灯结合-滴水灯程序及详细教程
  7. 面经 | 靠一份PPT做自我介绍,成功拿下了互联网名企offer
  8. FANUC机器人_KAREL编程入门(2)_通用IO信号的使用方法
  9. 0x000000C2:BAD_POOL_CALLER 蓝屏修复
  10. 微信聊天记录不小心被删了怎么办?看看如何恢复吧!
  11. 计算机论文致谢词范文500字,论文致谢词范文500字(精选6篇)
  12. mybatis-plus调用自身的 selectById 方法报错:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You hav
  13. 冲破百亿天花板,木浪云用云和智能突破备份边界
  14. DeepMind再爆性骚扰丑闻!内部邮件泄露,色狼自夸猛男
  15. gradle-5.4.1-all gradle-6.1.1.all.zip下载包
  16. Z-Score如何计算
  17. 如何使用Python发送库存更新
  18. dijkstra算法和A*算法
  19. mysql hive 建表语句_Mysql元数据如何生成Hive建表语句注释脚本详解
  20. 【手把手AI项目】三、Ubuntu环境下利用Anaconda在已经装好的caffe环境下搭建tensorflow-gpu环境

热门文章

  1. 微信公众平台开发(73) 客服接口发送客服消息
  2. 数学专业考研及读研目录[2014年11月7日更新]
  3. CSS3--transition
  4. network packet
  5. Jdom的SAXBuilder解析String形式的XML
  6. C#生成Excel报表 用MyXls组件生成更完美
  7. 如何把视频压缩变小?视频压缩方法介绍
  8. 如何调整Loadrunner中Vuser的数量限制
  9. 《.NET应用架构设计:原则、模式与实践》新书博客--试读-持续更新
  10. shell脚本练习(12.8)