關於JDONJIVE中DbFilterManager中程式碼的疑問

藍色蝦發表於2003-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 class="indent">


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;
}

相關文章