一、拦截环绕通知(around advice):Spring.NET中最基本的通知类型是拦截环绕通知(interception around advice),即方法拦截器。拦截环绕通知继承IMethodInterceptor接口。注意其中IMethodInvocation.Proceed()方法的调用。该方法会依次调用拦截器链上的其它拦截器。大部分拦截器都需要调用这个方法并返回它的返回值。当然,也可以不调用Proceed方法,而返回一个其它值或抛出一个异常,但一般不太会这么做。
  二、前置通知(before advise):是在IMethodInterceptor.Proceed()方法调用前的通知。继承自IMethodBeforeAdvice接口。
  三、异常通知(throws advise):是在IMethodInterceptor.Proceed()方法调用时发生异常的通知。继承自IthrowsAdvice接口。IthrowsAdvice接口没有定义任何方法:它是一个标识接口(按:之所以用标识接口,原因有二:1、在通知方法中,只有最后一个参数是必须的。如果声明为接口的方法,参数列表就被固定了。2、如果第一个原因可以用重载的接口方法解决,那么这个原因就是使用标识接口的充分原因了:实现此接口的类必须声明一或多个通知方法,接口方法做不到这一点),用以表明实现它的类声明了一或多个强类型的异常通知方法。
  四、后置通知(after returning advise):是在IMethodInterceptor.Proceed()方法调用后的通知。继承自IAfterReturningAdvice接口。后置通知对切入点的执行没有影响,如果通知抛出异常,就会沿拦截器链向上抛出,从而中断拦截器链的继续执行。

namespace Spring.Net
{class Program{static void Main(string[] args){ProxyFactory factory = new ProxyFactory(new OrderService());factory.AddAdvice(new AroundAdvise());factory.AddAdvice(new BeforeAdvise());factory.AddAdvice(new AfterReturningAdvise());factory.AddAdvice(new ThrowsAdvise());IOrderService service = (IOrderService)factory.GetProxy();object result = service.Save(1);Console.WriteLine();Console.WriteLine(string.Format("客户端返回值:{0}", result));Console.ReadLine();}}public interface IOrderService{object Save(object id);}public class OrderService : IOrderService{/// <summary>/// 拦截该方法/// </summary>/// <param name="id"></param>/// <returns></returns>public object Save(object id){throw new Exception("由于XXX原因保存出错");return "保存:" + id.ToString();}}/// <summary>/// 环绕通知/// </summary>public class AroundAdvise : IMethodInterceptor{public object Invoke(IMethodInvocation invocation){Console.Out.WriteLine(string.Format(" 环绕通知: 调用的方法 '{0}'", invocation.Method.Name));Console.WriteLine();object returnValue = null;try{returnValue = invocation.Proceed();}catch{Console.Out.WriteLine(" 环绕通知: 发生异常");Console.WriteLine();}Console.Out.WriteLine(String.Format(" 环绕通知: 返回值 '{0}'", returnValue));return returnValue;}}/// <summary>/// 前置通知/// </summary>public class BeforeAdvise : IMethodBeforeAdvice{public void Before(MethodInfo method, object[] args, object target){Console.Out.WriteLine("     前置通知: 调用的方法名 : " + method.Name);Console.Out.WriteLine("     前置通知: 目标       : " + target);Console.Out.WriteLine("     前置通知: 参数为   : ");if (args != null){foreach (object arg in args){Console.Out.WriteLine("\t: " + arg);}}Console.WriteLine();}}/// <summary>/// 异常通知/// </summary>public class ThrowsAdvise : IThrowsAdvice{public void AfterThrowing(Exception ex){string errorMsg = string.Format("     异常通知: 方法抛出的异常 : {0}", ex.Message);Console.Error.WriteLine(errorMsg);Console.WriteLine();}}/// <summary>/// 后置通知/// </summary>public class AfterReturningAdvise : IAfterReturningAdvice{public void AfterReturning(object returnValue, MethodInfo method, object[] args, object target){Console.Out.WriteLine("     后置通知: 方法调用成功,方法名 : " + method.Name);Console.Out.WriteLine("     后置通知: 目标为      : " + target);Console.Out.WriteLine("     后置通知: 参数 : ");if (args != null){foreach (object arg in args){Console.Out.WriteLine("\t: " + arg);}}Console.Out.WriteLine("     后置通知:  返回值是 : " + returnValue);Console.WriteLine();}}}

转载于:https://www.cnblogs.com/lgxlsm/p/5410958.html

Spring.Net的AOP的通知相关推荐

  1. Spring 中的AOP的通知类型的示例(xml)

    个人博客:https://suveng.github.io/blog/​​​​​​​ Spring 中的AOP的通知类型的示例 AOP中的通知类型(advice)一共有五中: around advic ...

  2. AOP联盟通知类型和Spring编写代理半自动

    一.cglib功能更强大 二.Spring核心jar包 三.AOP联盟通知 三.代码实现Spring半自动代理 1.环绕通知的切面 2.bean.xml配置 3.创建bean容器,获取bean,即已经 ...

  3. Spring AOP(通知、连接点、切点、切面)

    一.AOP术语 通知(Advice)   切面的工作被称为通知.通知定义了切面是什么以及何时使用.除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题. 5种通知类型: 前置通知(Before ...

  4. Spring AOP之通知类别

    什么是通知类别 通知在切入点中执行的位置就是通知类别.关于通知和通知类别具体概念请移步我的另一篇博客Spring AOP之HelloWorld与概念介绍 5种通知类别介绍 在Spring AOP 中通 ...

  5. 跟杨春娟学Spring笔记:AOP之SpringAOP引介通知

    跟杨春娟学Spring笔记:AOP之SpringAOP引介通知 完成:第一遍 1.如何代码实现AOP之SpringAOP引介通知? IntroductionInterceptor(引介通知) 在目标类 ...

  6. spring实现AOP环绕通知方式

    spring实现AOP环绕通知方式 点关注不迷路,欢迎再来! 精简博客内容,尽量已行业术语来分享. 努力做到对每一位认可自己的读者负责. 帮助别人的同时更是丰富自己的良机. 目录 spring实现AO ...

  7. Spring AOP 之 通知、连接点、切点、切面。

    1:知识背景 软件系统可以看成是由一组关注点组成的,其中,直接的业务关注点,是直切关注点.而为直切关注点提供服务的,就是横切关注点. 2:面向切面的基本原理 什么是面向切面编程 横切关注点:影响应用多 ...

  8. 一文读懂Spring中的AOP机制

    一.前言 这一篇我们来说一下 Spring 中的 AOP 机制,为啥说完注解的原理然后又要说 AOP 机制呢? 1.标记日志打印的自定义注解 @Target({ElementType.METHOD}) ...

  9. Spring 框架的AOP之注解的方式

    1. 环境搭建 1.1 导入 jar 包 Spring 框架的基本开发包(6个); Spring 的传统AOP的开发包 spring-aop-4.3.10.RELEASE org.aopallianc ...

  10. 动态代理——》AOP —— Spring 中的 AOP||AOP 相关术语||学习 spring 中的 AOP 要明确的事

    AOP 概述 什么是 AOP       AOP:全称是 Aspect Oriented Programming 即:面向切面编程 AOP 的作用及优势 作用: 在程序运行期间,不修改源码对已有方法进 ...

最新文章

  1. 2022-2028年中国丝印硅胶行业市场深度分析及投资前景趋势报告
  2. 【机器学习入门】(13) 实战:心脏病预测,补充: ROC曲线、精确率--召回率曲线,附python完整代码和数据集
  3. 局域网防雷电***实用解决方案
  4. 串结构练习——字符串匹配 解题报告
  5. ajax应用_AJAX的应用
  6. 数据访问基础类(基于Access数据库)
  7. ClickHouse最简单的安装方法
  8. 重磅!吴恩达新书《机器学习训练秘籍》中文版来了(附PDF下载)
  9. 契税申报期限_纳税申报的5个小常识,会计不知道,真不适合干会计 D1
  10. 计算机录入技术五笔输入法教案,五笔输入法教案
  11. 2015年数模A题太阳影子定位学习笔记
  12. python程序设计与算法基础教程微课版课后答案_Python程序设计与算法基础教程
  13. 猿辅导python大纲_解读独角兽企业“猿辅导”(一)
  14. 推荐几个免费的在线文本转语音网站(支持中英文多种语音)
  15. 谈到海外市场推广,别小觑蒲公英内测托管平台的国际短信服务
  16. 免费送 2800套精品小程序源码!
  17. 机械键盘恢复出厂fn_怎么切换fn恢复f1 - 卡饭网
  18. 单片机彩灯移动实验_实验一 单片机彩灯控制器的电路设计与仿真
  19. AD9361 官方例程详解(一)
  20. Biopython 安装

热门文章

  1. 在 Ubuntu 上配置高性能的 HHVM 环境
  2. 如何在form初始化时自动隐藏FOLDER列
  3. 三问百度云,ABC如何帮它跑赢马拉松?
  4. Linux下squid代理缓存服务环境部署
  5. SQL Server 游标运用:查看所有数据库所有表大小信息(Sizes of All Tables in All Database)...
  6. 关注VS.Net 2005
  7. text 热敏打印机_ESC/POS热敏打印机示例
  8. python中popitem_什么是python popitem函数?示例解析
  9. 字符串 -- 将整数字符串转换为成整数值 -- 图解
  10. MAC VSCODE配置C语言开发环境