上篇介绍了spring.net AOP的基本实现,其中有说到通知类型,首先在这里补充解释一下。最后出一个异常通知的实例,因为他的实现和别的通知有些不一样。

  1、拦截环绕通知:在Spring中最基础的通知类型。

  public class LogAdvice : IMethodInterceptor
    {
        private void Log()
        {
            Console.WriteLine("保存数据记日志");
        }

        public object Invoke(IMethodInvocation invocation)
        {
            //Log();
            object obj = invocation.Proceed();
            Log();
            return obj;
        }
    }

  2、前置通知,可以用拦截环绕通知代替,效果相当于在拦截环绕通知中,将Log()放在object obj = invocation.Proceed()前面。

    public class LogAdvice : IAfterReturningAdvice
    {
        private void Log()
        {
            Console.WriteLine("保存数据记日志");
        }

        public void AfterReturning(object returnValue, System.Reflection.MethodInfo method, object[] args, object target)
        {
            Log();
        }
    }

  3、后置通知,可以用拦截环绕通知代替,效果相当于在拦截环绕通知中,将Log()放在object obj = invocation.Proceed()后面。

    public class LogAdvice : IMethodBeforeAdvice
    {
        private void Log()
        {
            Console.WriteLine("保存数据记日志2");
        }

        public void Before(System.Reflection.MethodInfo method, object[] args, object target)
        {
            Log();
        }
    }

  4、异常通知:如果连接点抛出异常,异常通知(throws advice)将在连接点返回后被调用。需要继承接口IThrowsAdvice,这个接口不包含任何方法,但是我们必须要实现afterThrowing方法。

  afterThrowing(Method m, Object[] args, Object target, ServletException ex)

  只有最后一个参数是必须的。根据异常通知方法对方法及参数的需求,方法的签名可以有一个或者四个参数。

    public class Advice : IThrowsAdvice
    {
        public Advice() { }

        public void AfterThrowing(Exception exception)
        {
            Console.Error.WriteLine("记录错误日志:" + exception.Message);
            Console.WriteLine();
        }
    }

  异常通知并不会直接处理异常,所以我们需要自己来捕获异常,并处理。

  class Program
    {
        static void Main(string[] args)
        {
            IApplicationContext context = new XmlApplicationContext(@"XMLFile1.xml");
            IDataService service = (IDataService)context.GetObject("DataService");
            try
            {
                service.SaveData();
            }
            catch
            {
                //dosomething
            }
            Console.Read();
        }
    }                    

  异常通知不同的地方在于,接口中没有任何方法,必须根据异常通知方法来自己实现,另外别忘了处理掉异常。

  5、引入通知,这个还没去了解,有兴趣的同学可以自己百度一下。

spring.net AOP通知类型的更多相关文章

  1. AOP通知类型

    AOP通知类型 前置通知 在目标方法执行之前进行操作 后置通知 在目标方法执行之后 进行操作 环绕通知 在目标方法执行之前 和之后进行操作 public Object arount() 异常抛出通知 ...

  2. Spring基础——AOP通知

    spring(AOP通知) 切面 切面是封装通用业务逻辑的组件,可以作用到其他组件上.是spring组件中的某个方法.无返回类型.参数类型与通知类型有关.一个切面 开启数据库 关闭数据库 开启事务 检 ...

  3. 分享知识-快乐自己:Spring切入点的表达式和通知类型

    1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...

  4. 7.Spring切入点的表达式和通知类型

    1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...

  5. Java开发学习(十六)----AOP切入点表达式及五种通知类型解析

    一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...

  6. AOP 与 Spring中AOP使用(下)

    AOP通知类型 前置通知 在目标方法执行之前进行操作 UserDao.java public class UserDao { public void add(){ System.out.println ...

  7. spring的aop编程(半自动、全自动)

    1.spring的半自动代理(从spring中获取代理对象) (1)spring中的通知类型 spring中aop的通知类型有五种: 前置:在目标方法执行前实施加强 后置:在目标方法执行后实施加强 环 ...

  8. 实在是秒啊,我还从来没见过把Spring之AOP讲的这么通俗易懂的,安排!

    Spring之AOP 什么是AOP? AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. ...

  9. Spring AOP使用整理:各种通知类型的介绍

    2.PersonImpl类的源码 public class PersonImpl implements Person { private String name; private int age; p ...

随机推荐

  1. HDU 4006 The kth great number AVL解

    提供动态更新数据.第实时QK大量的值什么? 使用AVL统计数据结构做,比较先进的数据结构的内容. 不知道给出的数据为准值是否有反复.下面的程序是因为我能够处理重复数据出现的情况下,. 了repeat的 ...

  2. IBM BigInsights 3.0.0.2 集群环境搭建

    1. 改动hosts文件和永久主机名 由于BigInsights 3.0版本号不像之前的版本号能够直接用IP来添加节点,因此我们须要更改每台server的hosts文件和主机名: vim/etc/ho ...

  3. 《全体育&#183;瑜伽》

    今天出去吃饭,本来是想买<印象>创刊号的,结果没找着,看到一本<瑜伽>创刊号.作为一个伪瑜伽爱好者,我掏了20元大洋买了一本,你知道如今的时尚杂志都非常坏,用塑料膜封着,不能翻 ...

  4. C# 获取与解析枚举类型的 DescriptionAttribute

    原文:C# 获取与解析枚举类型的 DescriptionAttribute System.ComponentModel.DescriptionAttribute 这个 Attribute,经常被用来为 ...

  5. 微软宣布.NET开发环境将开源 支持Mac OS X和Linux

    微软宣布.NET开发环境将开源 支持Mac OS X和Linux 投递人 itwriter 发布于 2014-11-13 06:58 评论(55) 有4388人阅读  原文链接  [收藏]  « » ...

  6. 慧都十年大促起幕,Dev、BCG等明星控件6.8折起!

    2013慧都十周年大促正式起幕,DevExpress.BCGControlBar.FastReport.TeeChart等精选明星控件Top 10悉数"价"到,还有更多产品惊喜&q ...

  7. JQuery -&gt; 超级简单的下拉菜单

    使用jquery实现一个超级简单的下拉菜单. 效果图 最初的效果 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvRmVlTGFuZw==/font/5a6L ...

  8. NFC高级

    高级 NFC 本文档介绍了高级的NFC主题,如各种标签技术,NFC标签写入和前台发布,它允许即使当其他应用程序过滤器相同的时候,应用程序在前台处理Intent. Tag技术支持工作 当使NFC Tag ...

  9. zxing二维码扫描的流程简析(Android版)

    目前市面上二维码的扫描似乎用开源google的zxing比较多,接下去以2.2版本做一个简析吧,勿喷... 下载下来后定位两个文件夹,core和android,core是一些核心的库,android是 ...

  10. Ant 随想

    Ant是一种基于Java的build工具 面向任务构建,属性与于shell脚本中命令功能类型. <?xml version="1.0"?> <project na ...