spring.net AOP通知类型
上篇介绍了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通知类型的更多相关文章
- AOP通知类型
AOP通知类型 前置通知 在目标方法执行之前进行操作 后置通知 在目标方法执行之后 进行操作 环绕通知 在目标方法执行之前 和之后进行操作 public Object arount() 异常抛出通知 ...
- Spring基础——AOP通知
spring(AOP通知) 切面 切面是封装通用业务逻辑的组件,可以作用到其他组件上.是spring组件中的某个方法.无返回类型.参数类型与通知类型有关.一个切面 开启数据库 关闭数据库 开启事务 检 ...
- 分享知识-快乐自己:Spring切入点的表达式和通知类型
1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...
- 7.Spring切入点的表达式和通知类型
1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...
- Java开发学习(十六)----AOP切入点表达式及五种通知类型解析
一.AOP切入点表达式 对于AOP中切入点表达式,总共有三个大的方面,分别是语法格式.通配符和书写技巧. 1.1 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法 切入点表达式:要进行增 ...
- AOP 与 Spring中AOP使用(下)
AOP通知类型 前置通知 在目标方法执行之前进行操作 UserDao.java public class UserDao { public void add(){ System.out.println ...
- spring的aop编程(半自动、全自动)
1.spring的半自动代理(从spring中获取代理对象) (1)spring中的通知类型 spring中aop的通知类型有五种: 前置:在目标方法执行前实施加强 后置:在目标方法执行后实施加强 环 ...
- 实在是秒啊,我还从来没见过把Spring之AOP讲的这么通俗易懂的,安排!
Spring之AOP 什么是AOP? AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. ...
- Spring AOP使用整理:各种通知类型的介绍
2.PersonImpl类的源码 public class PersonImpl implements Person { private String name; private int age; p ...
随机推荐
- Hadoop2.2.0--Hadoop Federation、Automatic HA、Yarn完全分布式集群结构
Hadoop有很多的上场时间,与系统上线.手头的事情略少.So,抓紧时间去通过一遍Hadoop2在下面Hadoop联盟(Federation).Hadoop2可用性(HA)及Yarn的全然分布式配置. ...
- Go as continuous delivery tool for .NET
http://simon-says-architecture.com/2014/02/28/go-as-continuous-delivery-tool-for-net/ Following my p ...
- C++中public,protected,private访问
对于公有继承方式: (1)父类的public成员成为子类的public成员,允许类以外的代码访问这些成员:(2)父类的private成员仍旧是父类的private成员,子类成员不可以访问这些成员:(3 ...
- sqlserver检测数据库是否能连接的小技巧
有时候可能需要检测下某台机器的服务是不是起来了,或者某台机器的某个库是不是能被连接又不能打开ssms也不想登陆服务器的话就可以用这个方法. 1.在桌面上右键创建个文本,然后改后缀名为udl以后保存(1 ...
- Android4.3引入的UiAutomation新框架官方简介
译者序:Google在Android 4.3发布时提供了一套新的UiAutomation框架来支持用户界面自动化测试,该框架通过运用已有的Accessibility APIs来模拟用户跟设备用户界面的 ...
- 【强烈强烈推荐】《ORACLE PL/SQL编程详解》全原创(共八篇)--系列文章导航
原文:[强烈强烈推荐]<ORACLE PL/SQL编程详解>全原创(共八篇)--系列文章导航 <ORACLE PL/SQL编程详解> 系列文章目录导航 ——通过知识共享树立个人 ...
- servlet请求转发与重定向的差别------用生活实例来形象说明两者的差别
1,请求重定向:client行为,response.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保留,地址栏的URL地址会改变. 2,请求转发:server行为,req ...
- Lightdm:奔跑吧GUI[已解决]
Fedora替换gdm为lightdm解决无法登陆问题 前两天安装Codeblocks,这货安装了很多包和依赖,直接导致我重启进步去界面,卡在fedora LOGO处,如下 实在忧伤,已经因为折腾不知 ...
- Spring IOC之Classpath扫描和管理的组件
在前面的大部分例子我们使用XML去指明配置数据去定义在Spring容器中的每一个BeanDefinition.上一节我们展示了如何在 代码层注解的方式来提供大量的配置信息.即使在这些例子中,但是,基础 ...
- 零基础学习iOS开发
零基础学习iOS开发不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍了函数的定义和使 ...