Sprinet.NET 学习笔记(2)-AOPQuickStart

1.      Spring.AopQuickStart.Step1.2005 中使用new关键字进行AOP的实现

ProxyFactory factory = new ProxyFactory(new ServiceCommand());

    factory.AddAdvice(new ConsoleLoggingBeforeAdvice());

    factory.AddAdvice(new ConsoleLoggingAfterAdvice());

    factory.AddAdvice(new ConsoleLoggingThrowsAdvice());

    ICommand command = (ICommand)factory.GetProxy();

    command.Execute();

    if (command.IsUndoCapable)

    {

command.UnExecute();

    }

2.      Spring.AopQuickStart.Step2.2005 App.config配置进行AOP的实现

  <spring>

 

    <context>

      <resource uri="config://spring/objects" />

    </context>

 

    <objects xmlns="http://www.springframework.net">

      <description>相关描述</description>

      <object id="aroundAdvice"  type="Spring.AopQuickStart.Aspects.ConsoleLoggingAroundAdvice, Spring.AopQuickStart.Common" />

      <object id="throwsAdvice"  type="Spring.AopQuickStart.Aspects.ConsoleLoggingThrowsAdvice, Spring.AopQuickStart.Common" />

      <object id="myServiceCommand" type="Spring.Aop.Framework.ProxyFactoryObject">

        <property name="Target">

          <object type="Spring.AopQuickStart.Commands.ServiceCommand, Spring.AopQuickStart.Common" />

        </property>

        <property name="InterceptorNames">

          <list>

            <value>aroundAdvice</value>

            <value>throwsAdvice</value>

          </list>

        </property>

      </object>

    </objects>

 

  </spring>

3.      Spring.AopQuickStart.Step3.2005 通过配置NameMatchMethodPointcutAdvisor类使用名为MapperNames的属性进行拦截,从而匹配*Execute方法所有方法的拦截

<spring>

   

    <context>

      <resource uri="config://spring/objects" />

    </context>

 

    <objects xmlns="http://www.springframework.net">

      <description>相关描述</description>

      <object id="aroundAdvisor" type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop">

        <property name="Advice">

          <object type="Spring.AopQuickStart.Aspects.ConsoleLoggingAroundAdvice, Spring.AopQuickStart.Common" />

        </property>

        <property name="MappedNames">

          <list>

            <value>*Execute</value>

          </list>

        </property>

      </object>

 

      <object id="throwsAdvice" type="Spring.AopQuickStart.Aspects.ConsoleLoggingThrowsAdvice, Spring.AopQuickStart.Common" />

      <object id="myServiceCommand" type="Spring.Aop.Framework.ProxyFactoryObject">

        <property name="Target">

          <object type="Spring.AopQuickStart.Commands.ServiceCommand, Spring.AopQuickStart.Common" />

        </property>

        <property name="InterceptorNames">

          <list>

            <value>aroundAdvisor</value>

            <value>throwsAdvice</value>

          </list>

        </property>

      </object>

    </objects>

   

</spring>

4.      Spring.AopQuickStart.Step5.2005通过配置NameMatchMethodPointcutAdvisor类使用名为Expression的属性进行拦截,下面为拦截方法返还类型为void,没有的参数的例子

<objects xmlns="http://www.springframework.net">

      <description>相关描述</description>

      <object id="aroundAdvisor"

              type="Spring.AopQuickStart.Aspects.ExpressionDynamicPointcutAdvisor, Spring.AopQuickStart.Step5">

        <property name="Advice">

          <object type="Spring.AopQuickStart.Aspects.ConsoleLoggingAroundAdvice, Spring.AopQuickStart.Common" />

        </property>

        <property name="Expression" value="MethodInfo.ReturnType == T(System.Void) and Args != null" />

      </object>

      <object id="throwsAdvice"

              type="Spring.AopQuickStart.Aspects.ConsoleLoggingThrowsAdvice, Spring.AopQuickStart.Common" />

      <object id="myServiceCommand" type="Spring.Aop.Framework.ProxyFactoryObject">

        <property name="Target">

          <object type="Spring.AopQuickStart.Commands.ServiceCommand, Spring.AopQuickStart.Common" />

        </property>

        <property name="InterceptorNames">

          <list>

            <value>aroundAdvisor</value>

            <value>throwsAdvice</value>

          </list>

        </property>

      </object>

    </objects>

5.      Spring.AopQuickStart.Step5.2005 通过配置ObjectNameAutoProxyCreator类使用ObjectNames属性匹配*ServiceCommand进行拦截

<objects xmlns="http://www.springframework.net">

      <description>相关描述</description>

      <object id="myServiceCommand"

              type="Spring.AopQuickStart.Commands.ServiceCommand, Spring.AopQuickStart.Common" />

      <object id="myAnotherServiceCommand"

              type="Spring.AopQuickStart.Commands.AnotherServiceCommand, Spring.AopQuickStart.Step7" />

      <object id="aroundAdvisor" type="Spring.Aop.Support.NameMatchMethodPointcutAdvisor, Spring.Aop">

        <property name="Advice">

          <object type="Spring.AopQuickStart.Aspects.ConsoleLoggingAroundAdvice, Spring.AopQuickStart.Common" />

        </property>

        <property name="MappedNames">

          <list>

            <value>*Execute</value>

          </list>

        </property>

      </object>

      <object type="Spring.Aop.Framework.AutoProxy.ObjectNameAutoProxyCreator, Spring.Aop">

        <property name="ObjectNames">

          <list>

            <value>*ServiceCommand</value>

          </list>

        </property>

        <property name="InterceptorNames">

          <list>

            <value>aroundAdvisor</value>

          </list>

        </property>

      </object>

</objects>

 

其中QuickStart4和6没有整理好,好好学习之后再整理和大家分享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值