最后的问题,应该是这样的:
protected void doStart() throws Exception
{
try{
_outerScope=__outerScope.get();
if (_outerScope==null){
//本次处理的第一个scope handler
//告知后续scope handler,_outerScope选我
__outerScope.set(this);
}
super.doStart();
_nextScope= getChildHandlerByClass(ScopedHandler.class);
}
finally
{
if (_outerScope==null){
//本次处理结束
//为了下次同一个线程处理是,
//还能正常的设置第一个scope handler
//必须把threadlocal变量设为null
__outerScope.set(null);
}
}
}
此外,这一节里有一个non scoped handler X,一开始没太看懂调阅顺序。
后来发现是这样的:
public final void nextHandle(String target...)...
{
if (_nextScope!=null && _nextScope==_handler){
//上面条件可以保证下一个handler是scope handler
_nextScope.doHandle(target,baseRequest,request, response);
}
else if (_handler!=null){
//non scpoe handler调用下一个handler的
super.handle(target,baseRequest,request,response);
}
}
感觉类成员的命名不太合适,
比如__outerScope和_outerScope
比如_handler其实一直指向的是下一个handler,是不是该为_nextHandler更好一些?
展开