1.在项目中引入Spring.Aop.dll Spring.core.dll和antlr.runtime.dll
2.app.config(web.config)中加入以下代码,请注意注释
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects" />
<!--resource uri="file://~/spring.config"/--><!--这里使用独立配置文件-->
</context>
<objects xmlns="http://www.springframework.net">
<object id="aroundAdvice" type="SpringLib.Lib.AroundAdvice,SpringLib" />
<object id="myCommand" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="SpringLib.Lib.ServiceCommand,SpringLib" />
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvice</value>
<!--<value>throwsAdvice</value>-->
</list>
</property>
</object>
</objects>
</spring>
使用独立配置文件时的示例代码(spring.config)
<objects xmlns="http://www.springframework.net">
<object id="aroundAdvice" type="SpringLib.Lib.AroundAdvice,SpringLib" />
<object id="myCommand" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="SpringLib.Lib.ServiceCommand,SpringLib" />
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvice</value>
<!--<value>throwsAdvice</value>-->
</list>
</property>
</object>
</objects>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<context>
<resource uri="config://spring/objects" />
<!--resource uri="file://~/spring.config"/--><!--这里使用独立配置文件-->
</context>
<objects xmlns="http://www.springframework.net">
<object id="aroundAdvice" type="SpringLib.Lib.AroundAdvice,SpringLib" />
<object id="myCommand" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="SpringLib.Lib.ServiceCommand,SpringLib" />
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvice</value>
<!--<value>throwsAdvice</value>-->
</list>
</property>
</object>
</objects>
</spring>
使用独立配置文件时的示例代码(spring.config)
<objects xmlns="http://www.springframework.net">
<object id="aroundAdvice" type="SpringLib.Lib.AroundAdvice,SpringLib" />
<object id="myCommand" type="Spring.Aop.Framework.ProxyFactoryObject">
<property name="Target">
<object type="SpringLib.Lib.ServiceCommand,SpringLib" />
</property>
<property name="InterceptorNames">
<list>
<value>aroundAdvice</value>
<!--<value>throwsAdvice</value>-->
</list>
</property>
</object>
</objects>
3.建立一个独立的Class Library 工程,建立以下示例文件
代码
//AroundAdvice.cs
using System;
using AopAlliance.Intercept;
namespace SpringLib.Lib
{
public class AroundAdvice : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
System.Windows.Forms.MessageBox.Show("bengin.");
object returnValue = invocation.Proceed();
System.Windows.Forms.MessageBox.Show("end.");
return returnValue;
}
}
}
//--------------------------------
//ICommand.cs
namespace SpringLib.Lib
{
public interface ICommand
{
bool IsUndoCapable { get; }
void Execute();
void UnExecute();
}
}
//----------------------------------
//ServiceCommand.cs
using System;
namespace SpringLib.Lib
{
public class ServiceCommand : ICommand
{
#region ICommand Members
public bool IsUndoCapable
{
get { return true; }
}
public void Execute()
{
System.Windows.Forms.MessageBox.Show("Execute...");
}
public void UnExecute()
{
System.Windows.Forms.MessageBox.Show("UnExecute()...");
}
#endregion
}
}
using System;
using AopAlliance.Intercept;
namespace SpringLib.Lib
{
public class AroundAdvice : IMethodInterceptor
{
public object Invoke(IMethodInvocation invocation)
{
System.Windows.Forms.MessageBox.Show("bengin.");
object returnValue = invocation.Proceed();
System.Windows.Forms.MessageBox.Show("end.");
return returnValue;
}
}
}
//--------------------------------
//ICommand.cs
namespace SpringLib.Lib
{
public interface ICommand
{
bool IsUndoCapable { get; }
void Execute();
void UnExecute();
}
}
//----------------------------------
//ServiceCommand.cs
using System;
namespace SpringLib.Lib
{
public class ServiceCommand : ICommand
{
#region ICommand Members
public bool IsUndoCapable
{
get { return true; }
}
public void Execute()
{
System.Windows.Forms.MessageBox.Show("Execute...");
}
public void UnExecute()
{
System.Windows.Forms.MessageBox.Show("UnExecute()...");
}
#endregion
}
}
4.在主项目中添加刚才新建的工程引用
5. 在主项目中建立SpringHelper.cs
//SpringHelper
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using Spring.Context.Support;
namespace Test
{
public class SpringHelper
{
public static object GetObj(string name)
{
IApplicationContext ctx = ContextRegistry.GetContext();
Object o = ctx[name];
return o;
}
}
}
//TestForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Spring.Aop.Framework;
using Spring.Context;
using Spring.Context.Support;
using SpringLib.Lib;
namespace Test
{
public partial class Test : Form
{
public Test()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Object o = SpringHelper.GetObj("myCommand");
if (o == null)
MessageBox.Show("null");
else
MessageBox.Show(o.GetType().ToString());
ICommand command = o as ICommand;
command.Execute();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Spring.Context;
using Spring.Context.Support;
namespace Test
{
public class SpringHelper
{
public static object GetObj(string name)
{
IApplicationContext ctx = ContextRegistry.GetContext();
Object o = ctx[name];
return o;
}
}
}
//TestForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Spring.Aop.Framework;
using Spring.Context;
using Spring.Context.Support;
using SpringLib.Lib;
namespace Test
{
public partial class Test : Form
{
public Test()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Object o = SpringHelper.GetObj("myCommand");
if (o == null)
MessageBox.Show("null");
else
MessageBox.Show(o.GetType().ToString());
ICommand command = o as ICommand;
command.Execute();
}
}
}