论坛首页 Java企业应用论坛

Struts2源码分析讨论

浏览 15714 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-31  
似乎可以搞个简单例子,模拟这个过程:
 
public interface Test {//类似Interceptor接口
      public String test(TestInvocation invocation);
  }
  public class Test1 implements Test {
      public String test(TestInvocation invocation) {
         System.out.println("hello!in test1");
         return invocation.invoke();
      }
  }
  public class Test2 implements Test {

      public String test(TestInvocation invocation) {
	 System.out.println("hello in test2");
          return invocation.invoke();
      }
  }
  public interface TestInvocation {//类似ActionInvocation
      public String invoke();
  }
  public class DefaultInvocation implements TestInvocation{
      public Iterator interceptors;
      public String result;
      public String invoke() {
	       if(interceptors.hasNext()){
		 Test test=(Test)interceptors.next();
		 result=test.test(this);
	       }
	       else
		 result= "end";
	       return result;
      }
      public void init(){
		Test t1=new Test1();
		Test t2=new Test2();
		List<Test> tlist=new ArrayList<Test>();
		tlist.add(t1);
		tlist.add(t2);
		interceptors=tlist.iterator();
	}
	public static void main(String[] args){
		DefaultInvocation inc=new DefaultInvocation();
		inc.init();
		inc.invoke();
	}
   }
0 请登录后投票
   发表时间:2008-08-22  
这个不是递归!而是一种设计模式!叫装饰模式!如果大家对Java中IO设计有比较深的理解的话,会发现很熟悉!
0 请登录后投票
   发表时间:2008-11-27  
我的理解是这样的 :
1.
DefaultActionInvocation
interceptors.next()


然后
interceptor.getInterceptor().intercept(DefaultActionInvocation.this)


把程序调用转交给 Interceptor,

2.

Interceptor 逻辑执行完毕后,执行
 return invocation.invoke();


把程序调用还给 Interceptor,

步骤 1 2 反复执行,interceptors 集合 也就一路next下去,
直到 Interceptor 被遍历一遍。

这个用法好像叫 java 回调。


0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics