import java.io.Serializable; import java.util.Collection; import java.util.concurrent.Callable; import org.springframework.web.context.request.async.WebAsyncTask; import com.github.miemiedev.mybatis.paginator.domain.PageList; /** * 對於將會頻繁創建的對象,我們要讓這個類實現Cloneable接口,通過getInstance()函數處理獲取對象 * clone的最大特點就是,不會去調用任何構造方法,提高很多頻繁new對象產生的時耗 * * @作者 light-zhang * @時間 2018年8月16日 * @file WebAsyncSupport.java * */ public final class WebAsyncSupport implements Serializable, Cloneable { private static final long serialVersionUID = -1642396555652972191L; private static WebAsyncSupport support = new WebAsyncSupport(); private WebAsyncSupport() { super(); } /** * 調用對象創建優化 * * @return */ public static WebAsyncSupport getInstance() { try { return (WebAsyncSupport) support.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } return new WebAsyncSupport(); } /** * 分頁參數處理 * * @param items * @param containsTotalCount * @return */ public WebAsyncTask<ReturnMsg> asyncPageList(Collection<?> items, boolean containsTotalCount) { ReturnMsg m = null; m = ReturnMsg.getPage("SUCCESS", HttpStatusCode.OK, items, null); if (containsTotalCount) {// 使用containsTotalCount來決定查不查詢totalCount,即返回ArrayList還是PageList @SuppressWarnings("unchecked") final PageList<Object> pageData = (PageList<Object>) items; if (!validateListNull(pageData)) { m = ReturnMsg.getPage("SUCCESS", HttpStatusCode.OK, pageData, pageData.getPaginator()); } } return this.getWebAsyncTask(m); } /** * 異步任務處理 * * @param m * @return */ public WebAsyncTask<ReturnMsg> getWebAsyncTask(ReturnMsg m) { return new WebAsyncTask<ReturnMsg>(1000, new Callable<ReturnMsg>() { @Override public ReturnMsg call() throws Exception { return m; } }); } /** * 驗證數組參數 * * @param list * @return */ public static boolean validateListNull(Collection<?> list) { return (list == null || list.isEmpty()) ? true : false; } }