关于JDONJIVE中DbFilterManager中代码的疑问

03-07-08 蓝色虾
代码如下:

   String filterContext = context + "filter" + i + ".";
        String className = properties.getProperty(filterContext + "className");
        filters[i] = (ForumMessageFilter) Class.forName(className).newInstance();
        // If this filter isn't cacheable, then no further filters can
        // be cached.
        if (!filters[i].isCacheable()) {
          uncacheableIndex = i;
        }
<p>

if (!filters.isCacheable()) {

uncacheableIndex = i;

}

的作用按照注释所说当遇见不能cache的filter后,剩下的filter过滤的结果均不能被cache,可是这里有个疑问,如果fiters[]中出现了多个不能cache的filter,按照程序中,uncacheableIndex将定位在最后一个不能cache的filter上,那么在其之前的不能cacahe的filter不是被cache了吗?

例如:

filter1 -->filter2(不能cache) -->filter3 -->filter4(不能cache) -->filter5 -->filter6

程序因该从第二个filter开始就不能cache结果,可是找源代码中的话,程序将从第四个filter开始不cache。

是不是改为:

if (!filters.isCacheable() && uncacheableIndex == -1) {

uncacheableIndex = i;

}

猜你喜欢