最近在学习aop,搜了很多文章,看的晕晕的,现总结一下,本文不对aop的概念说过多,有些概念我也搞不很清楚,希望对新学习的同学有所帮助,
要使用spring.net实现aop,其实就3步,一,定义拦截接口,二,配置spring.net的配置文件,配置拦截器和类或者方法的拦截关系,三,在程序中调用相应
一个最简单的使用场景
public class AroundAdvice : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
Console.WriteLine("拦截开始,执行方法前执行的操作");
object result = invocation.Proceed();
Console.WriteLine("拦截结束,执行方法后执行的操作");
return result;
}
}
一个简单的使用场景
public class LogBeforeAdvice : IMethodBeforeAdvice
{
//此方法内部的处理就是执行方法前我们要定义的处理代码
public void Before(System.Reflection.MethodInfo method, object[] args, object target)
{
Console.WriteLine("拦截的对象是" + target);
Console.WriteLine("拦截的方法名是" + method.Name);
Console.WriteLine("参数是");
if (args != null)
{
foreach (object arg in args)
{
Console.WriteLine("\t: " + arg);
}
}
}
}
要使用spring.net实现aop,其实就3步,一,定义拦截接口,二,配置spring.net的配置文件,配置拦截器和类或者方法的拦截关系,三,在程序中调用相应
1.实现spring.net提供的拦截接口
spring.net提供了总共四种拦截接口,实现不同的拦截,当然了最终是针对方法的,现在spring.net还不能对属性等进行切面,spring.net下载地址: http://springframework.net/download.html 下载后,在项目中,引用aop相关dll,下面对拦截器逐个说明1)IMethodInterceptor接口,
用来实现环绕拦截,即我们可以在调用某个方法前执行一些操作,然后执行方法,执行后,再执行一些我们定义的代码,该接口中,定义了
public object Invoke(IMethodInvocation invocation)方法,我们如果需要使用此种拦截,要实现此方法,一个最简单的使用场景
public class AroundAdvice : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
Console.WriteLine("拦截开始,执行方法前执行的操作");
object result = invocation.Proceed();
Console.WriteLine("拦截结束,执行方法后执行的操作");
return result;
}
}
2)IMethodBeforeAdvice接口,
用来实现方法执行前拦截,即在执行方法前,执行一些额外的代码,该接口定义了
public void Before(System.Reflection.MethodInfo method, object[] args, object target)方法,我们只需实现此方法,就可以使用前置拦截一个简单的使用场景
public class LogBeforeAdvice : IMethodBeforeAdvice
{
//此方法内部的处理就是执行方法前我们要定义的处理代码
public void Before(System.Reflection.MethodInfo method, object[] args, object target)
{
Console.WriteLine("拦截的对象是" + target);
Console.WriteLine("拦截的方法名是" + method.Name);
Console.WriteLine("参数是");
if (args != null)
{
foreach (object arg in args)
{
Console.WriteLine("\t: " + arg);
}
}
}
}
3)IAfterReturningAdvice接口,
用来实现方法后的拦截,即后置拦截,该接口定义了
public void afterReturning(Object re