责任链与finally

这两件事都有点2。只是想验证一下这种场景下,finally到底怎么执行。<br>
简单的filter链,只是为了验证。
 
public interface filter {	 void dofilterhttp(object request, object response, filterchain chain);}
 
 
 
public class filterchain {	private list<filterconfig> filterconfigs = new arraylist<filterconfig>();	private iterator<filterconfig> iterator = null;		public void dofilter(object request,object response){		if(this.iterator==null){			this.iterator=filterconfigs.iterator();		}		if(this.iterator.hasnext()){			filterconfig config=this.iterator.next();			filter filter=config.getfilter();			filter.dofilterhttp(request, response, this);		}		}		public void addfilterconfig(filterconfig config){		this.filterconfigs.add(config);			}}
 
 
   <span style="white-space: pre;">  </span>
 
public class filterconfig {	private filter filter;	public filter getfilter() {		return filter;	}	public void setfilter(filter filter) {		this.filter = filter;	}		}
 
 
 
public class test1filter implements filter {	public void dofilterhttp(object request, object response, filterchain chain) {		 try{			 system.out.println("handle filter"+this.getclass().getname());			 chain.dofilter(request, response);		 }finally{			 system.out.println(this.getclass().getname()+" finally");		 }	}}
 
 
 
 
public class test2filter extends test1filter {}
 
 
 
public class test3filter implements filter {	public void dofilterhttp(object request, object response, filterchain chain) {			 if(true){			 system.out.println("handle filter"+this.getclass().getname());			 chain.dofilter(request, response);			 return  ;		 }			 		try{			 system.out.println(this.getclass().getname()+" try");		}finally{			 system.out.println(this.getclass().getname()+" finally");		}	}}
 
 
 
public class test4filter implements filter {	public void dofilterhttp(object request, object response, filterchain chain) {		try{		 if(true){			 system.out.println("handle filter"+this.getclass().getname());			 chain.dofilter(request, response);			 return  ;		 }			 				 system.out.println(this.getclass().getname()+" try");		}finally{			 system.out.println(this.getclass().getname()+" finally");		}			}	 }
 
  来看测试:
 
public class filtertest {	/**	 * @param args	 */	public static void main(string[] args) {		filterchain chain=new filterchain();		test1filter filter1=new test1filter();		test2filter filter2=new test2filter();		test3filter filter3=new test3filter();		test4filter filter4=new test4filter();		filterconfig config1=new filterconfig();		config1.setfilter(filter1);				filterconfig config2=new filterconfig();		config2.setfilter(filter2);				filterconfig config3=new filterconfig();		config3.setfilter(filter3);				filterconfig config4=new filterconfig();		config4.setfilter(filter4);				chain.addfilterconfig(config1);		chain.addfilterconfig(config3);		chain.addfilterconfig(config4);		chain.addfilterconfig(config2);				chain.dofilter(null, null);	}}
 

handle filter org.jport.sample.designpattern.responsebilitychain.test1filter
handle filter org.jport.sample.designpattern.responsebilitychain.test3filter
handle filter org.jport.sample.designpattern.responsebilitychain.test4filter
handle filter org.jport.sample.designpattern.responsebilitychain.test2filter
org.jport.sample.designpattern.responsebilitychain.test2filter finally
org.jport.sample.designpattern.responsebilitychain.test4filter finally
org.jport.sample.designpattern.responsebilitychain.test1filter finally
 
如果chain.dofilter在try{}finally{}块中,那么finally是一定会执行的。加了return后也一样。只不过return后面的语句不再执行了而已。
<div><br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值