0

我正在使用 Struts2 拦截器,容器在咨询配置管理器 ( struts.xml) 后为相关操作类创建操作代理。现在是执行拦截器链的时候了,我有一个简单的问题——到底是谁调用了Myinterceptor类中的拦截方法。

public class MyInterceptor  implements Interceptor{

    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void init() {
        // TODO Auto-generated method stub

    }

    public String intercept(ActionInvocation ai) throws Exception {
        // TODO Auto-generated method stub
        long t1=System.currentTimeMillis();

        ValueStack s= ai.getStack();
        String val=s.findString("name");
        s.set("name", val.toUpperCase()+"_changed");

        return ai.invoke();

    }

}

据我了解,它由相应动作类的actionproxy调用,与spring AOP中的操作相同,proxyfactorybean执行类似的操作来调用类的建议(切入点)。

但我没有任何文件来支持这一点。请让我知道我是否正确。

4

3 回答 3

0

动作调用类

  1. 框架首先调用ActionInvocation 的invoke() 方法开始执行Action。

  2. ActionInvocaton 通过执行堆栈中的第一个拦截器来启动调用过程。

于 2015-03-09T10:12:24.810 回答
0

您将它作为方法的参数获取intercept。您不必远离拦截器实例,因为调用者在拦截时会将自己传递给每个拦截器实例。

这个方法调用的地方是DefaultActionInvocation

public class DefaultActionInvocation extends Object implements ActionInvocation

默认 ActionInvocation 实现

于 2015-03-07T21:47:10.597 回答
0

您的拦截必须覆盖intercept()interface 的方法Interceptor。只需@Override在您的方法中添加注释即可。

@Override
public String intercept(ActionInvocation ai) throws Exception {
   //your code
}
于 2015-06-11T11:27:22.877 回答