如何在方法调用之前设置spring.NET AOP建议

时间:2013-09-20 20:10:05

标签: aop spring.net

我想在使用spring.NET执行之前拦截方法调用。我们假设要拦截的类/方法是:

public class Listener
{
    public void Handle()
    {
        // method body
    }
}

这就是我所做的(假设所有代码都在名为Example的名称空间中):

1.处理好建议:

public class MyAopAdvice : IMethodBeforeAdvice
{
    public void Before(MethodInfo method, object[] args, object target)
    {
        // Advice action
    }
}

2.更新了我的春天xml配置:

  <object id="myAopAdvice" type="Example.MyAopAdvice" />

  <object id="listener" type="Spring.Aop.Framework.ProxyFactoryObject">
    <property name="Target">
      <object type="Example.Listener" autowire="autodetect"/>
    </property>
    <property name="InterceptorNames">
      <list>
        <value>myAopAdvice</value>
      </list>
    </property>
  </object>

由于某种原因,如果我在其中添加断点,我的建议代码就不会受到影响。但是,如果我在我的建议中添加了一些控制台日志记录语句,它们似乎已被记录,但不是在适当的时候(即,在调用Listener.Handle()之前)。

我愿意打赌我的配置是错误的(一次,我可能会错过一种告诉配置只听Handle方法调用的方法,而不是监听器可能有的任何其他方法)。任何想法有什么不对?

1 个答案:

答案 0 :(得分:1)

将您的Handle方法声明为虚拟:

public virtual void Handle()  // ...

你的类没有实现任何接口,spring.net的默认aop机制uses to create proxies。当spring.net找不到任何代理接口时,它会查找虚拟方法to create a proxy for a class