📄 pagecache.java
字号:
package com.ztes.commons.dbo.pagination;
import java.util.HashMap;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.core.io.support.PropertiesLoaderUtils;
import com.ztes.commons.util.MapUtils;
import com.ztes.commons.util.PropertiesUtils;
/**
* 缓存分页实例,每个标识的分页对象只获取一次,以后便从缓冲中获取。
*
* @author tiannet(曾次清)
*
*/
public class PageCache {
/**缓存,存储标识与对象的映射*/
private static HashMap<String,Page> pageCache = new HashMap<String,Page>();
/**缓存,存储标识与分页配置对象的映射*/
private static HashMap<String,PageConfig> pageConfigCache = new HashMap<String,PageConfig>();
/**日志记录*/
private static Log logger = LogFactory.getLog(PageCache.class);
/**
* 从位于class path下的属性文件中读取分页信息(只读取一次)并构建分页配置对象的实例。
* @param resourceName 位于class path下的属性文件
* @param id 配置文件中的ID。
* @return 分页配置对象的实例。
*/
public static PageConfig getPageConfigFromProperties(String resourceName,String id){
String unique = resourceName.hashCode() + "_" + id.hashCode();
if( pageConfigCache.containsKey(unique) ) {
return pageConfigCache.get(unique);
}
try {
//读取所有的属性
Properties properties = PropertiesLoaderUtils.loadAllProperties(resourceName);
//得到分页实现类名
String pageClassName = (String)properties.get(id + ".pageClassName");
//得到默认分页配置
Properties pageConfig = PropertiesUtils.extractPropByKeyStartsWith(properties,"page.default.");
//追加指定分页对象配置
Properties p = PropertiesUtils.extractPropByKeyStartsWith(properties,"page." + id + ".");
pageConfig.putAll(p);
if( pageClassName != null ) {
pageConfig.put("pageClassName", pageClassName);
}
PageConfig pc = (PageConfig)MapUtils.toBean(pageConfig,PageConfig.class);
pageConfigCache.put(unique, pc);
return pc;
} catch(Exception e) {
logger.error(e);
throw new IllegalArgumentException("无法根据配置文件(" + resourceName + ")信息获取标识为" + id + "的分页配置实例:" + e.getMessage());
}
}//end getPageConfigFromProperties
/**
* 得到唯一的分页实例。
* @param pageClassName 分页的实现类。
* @param config 分页配置信息,对应{@link PageConfig}
* @return 分页实例。
* @throws Exception
*/
public static Page getInstance(String pageClassName, Properties config) throws Exception {
String id = pageClassName.hashCode() + "_" + config.hashCode();
if( pageCache.containsKey(id) ) {
return pageCache.get(id);
}
//System.out.println("获取分页实例");
Page page = null;
page = (Page)Class.forName(pageClassName).newInstance();
PageConfig pc = (PageConfig)MapUtils.toBean(config,PageConfig.class);
page.setPageConfig(pc);
pageCache.put(id,page);
return page;
}//end getInstance
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -