Spring.net结合NHibernate的Aop配置说明
看了园子里“刘冬”写的Spring.net跟NHibernate的组合系列的“面向切面编程(Aop)”,结合自己搭建的项目总算是完成了所有的配置,现把配置过程及说明记录一下,算是自己做个笔记,也算给其他人一些参考吧!整个Aop的配置从我个人角度觉得应该分为二部分
1是配置通知(Adivce)的方式,2是配置Aop代理的方式
一、自动代理加环绕通知
ObjectNameAutoProxyCreator(从名字翻译是“对象名称自动代理创建器”),就是自动创建代理对象
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net" xmlns:aop="http://www.springframework.net/aop">
<description>
AOP拦截器说明:此配置会拦截Spring中所有object标签的id以Service结尾的注入配置项</description>
<!--配置AOP通知-->
<object id="aroundAdvice" type="Dao.Advice.AroundAdvice,Dao"></object>
<object id="ProxyCreator" type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop">
<!--配置要拦截的对象名称-->
<property name="ObjectNames">
<!--此处拦截的value对象是配置在Spring中的object对象的id-->
<list>
<value>*Service</value>
</list>
</property>
<!--配置拦截器的名称-->
<property name="InterceptorNames">
<list>
<value>aroundAdvice</value>
</list>
</property>
</object>
</objects>
拦截器代理对象的方式(ProxyCreator)为”自动代理(Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator)“,即会拦截“Spring配置文件中的id以Service结尾的Object标签”。
拦截的通知方式为环绕通知(AroundAdvice),必须实现IMethodInterceptor接口,环绕通知的类如下
namespace Dao.Advice
{
/// <summary>
/// 环绕通知
/// </summary>
public class AroundAdvice : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
Console.WriteLine("环绕通知开始拦截:" + invocation.TargetType.Name + "." + invocation.Method.Name);
object obj = invocation.Proceed();
Console.WriteLine("环绕通知结束拦截:" + invocation.TargetType.Name + "." + invocation.Method.Name);
return obj;
}
}
}
环绕通知的Aop配置如上,XML配置为单个xml文件,注意xml文件的“属性”--“生成操作”改为“嵌入的资源”。
二、自动代理加后置通知
后置通知的类如下
namespace Dao.Advice
{
/// <summary>
/// 后置通知
/// </summary>
public class AfterAdvice : IAfterReturningAdvice
{
public void AfterReturning(object returnValue, System.Reflection.MethodInfo method, object[] args, object target)
{
Console.WriteLine("后置通知开始拦截...");
Console.WriteLine("后置通知方法名:" + method.Name);
Console.WriteLine("目标类:" + target);
Console.WriteLine("参数如下:");
if (args != null)
{
foreach (var arg in args)
{
Console.WriteLine(arg);
}
}
Console.WriteLine("返回值:" + returnValue);
Console.WriteLine("后置通知结束拦截...");
}
}
}
在如下的节点中“<list>”节点中增加“<value>afterAdvisor</value>”,xml内容如下
<!--筛选要拦截的方法-->
<object id="afterAdvisor" type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop">
<!--指定筛选方法的拦截器-->
<property name="Advice">
<object type="Dao.Advice.AfterAdvice,Dao"></object>
</property>
<!--对方法进行筛选-->
<property name="MappedNames ">
<list>
<value>*NameValue</value>
</list>
</property>
</object>
即可实现后置拦截通知,且此通知是通过匹配方法名做为切入点

浙公网安备 33010602011771号