1、接口XCacheFactory
public interface XCacheFactory {
/**
* 根据指定prefix来获取XCache实例
*
* @param <T>
* @param prefix
* @param klass value的类型
* @param isCounter 是否用作counter
* @return
*/
public <T> XCache<T> getCache(String prefix, Class<T> klass, boolean isCounter);
}
2、XCacheFactoryImpl
public class XCacheFactoryImpl implements XCacheFactory {
private MemcachedClientFactory memcachedClientFactory = new MemcachedClientFactory();
public MemCachedClient getMemcachedClient(String namespace) {
return memcachedClientFactory.getClientByNamespace(namespace);
}
@Override
public <T> XCache<T> getCache(String prefix, Class<T> valueClass, boolean isCounter) {
return new XCacheImpl<T>(prefix, this, valueClass, isCounter);
}
}
3、负责{@link MemCachedClient}的创建
public MemcachedClientFactory() {
init();
}
/**
* 初始化
*/
public void init() {
namespaceFactory = ZooKeeperBasedNamespaceFactory.getInstance();
poolFactory = ZooKeeperBasedPoolFactory.getInstance();
poolFactory.addCallback(poolConfigModifiedCallback); //注册回调
}
4、获取时间差
long cur3 = System.currentTimeMillis();
if (logger.isDebugEnabled()) {
logger.debug("build apppage:" + (System.currentTimeMillis() - cur3));
}
5、Iterator迭代器的使用
// 匹配appPageSupport
if (CollectionUtils.isNotEmpty(appPageSupportList)) {
for (Iterator<AppPageSupport> iterator = appPageSupportList.iterator(); iterator
.hasNext();) {
AppPageSupport appPageSupportTemp = (AppPageSupport) iterator.next();
if (appPageSupportTemp.getAppPageId() == appPageEntity.getId()) {
appPageSupports.add(appPageSupportTemp);
iterator.remove();
}
}
}
6、ResourceBundle
使用ResourceBundle访问本地资源
在设计时,我们往往需要访问一些适合本地修改的配置信息,如果作为静态变量,那么每次修改都需要重新编译一个class,.config保存此类信息并不适合,这时我们需要ResourceBundle。
通过ResourceBundle,我们需要访问位于/WEB-INF/classes目录下的一个后缀名为properties的文本类型文件,从里面读取我们需要的值。
Locale locale = Locale.getDefault();
ResourceBundle localResource = ResourceBundle.getBundle("ConnResource", locale);
String value = localResource.getString("test");
System.out.println("ResourceBundle: " + value);
这里对应了/WEB-INF/class/ConnResource.properties文件内容为:
test=hello world
打印出来的结果就是hello world
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("cmsconf");
cmsconf.properties的内容如下:
hot0=[{name:'\u7f8e\u56fe\u79c0\u79c0',url:'/page/22?', photo:'fmn054/original/20110812/1550/large_Qb6h_2890000000875c92.jpg', displayOrder:1},{name:'\u62c9\u9614',url:'/page/16?', photo:'fmn050/original/20110812/1555/large_HNOE_2890000000885c92.jpg', displayOrder:2}]
7、JSON字符串的处理
List<Brand> brands = cache.get(TOP_PAGE_KEY + os, List.class);
String hotStr = RESOURCE_BUNDLE.getString("hot" + os);
if (hotStr != null) {
JSONArray jarr = JSONArray.fromObject(hotStr);
brands = (List<Brand>) JSONArray.toCollection(jarr, Brand.class);
}
8、排序比较
if (CollectionUtils.isNotEmpty(brands)) {
Collections.sort(brands, new Comparator<Brand>() {
public int compare(Brand o1, Brand o2) {
return o1.getOrder() - o2.getOrder();
};
});
cache.save(TOP_PAGE_KEY + os, brands, List.class, pageDefaultCacheTime);
}
sort(appPageList, new ComparatorAppPage() {
@Override
public int compare(AppPage page0, AppPage page1) {
int compareOrder = 0;
//如展示顺序相同则比较更新时间
if (page0.getAddTime() != null && page1.getAddTime() != null) {
compareOrder = page0.getAddTime().compareTo(page1.getAddTime());
if (compareOrder == 0) {
return page0.getDisplayOrder() - page1.getDisplayOrder();
} else {
return compareOrder;
}
} else {
return 0;
}
}
});
9、afterPropertiesSet初始化
public void afterPropertiesSet() throws Exception {
Assert.notNull(appPageRelationDAO, "appPageRelationDAO is required!");
Assert.notNull(appPageDAO, "appPageDAO is required!");
Assert.notNull(appPageSupportDAO, "appPageSupportDAO is required!");
Assert.notNull(friendsFacade, "friendsFacade is required!");
}
10、对修改后的数据进行重新加载(缓存)
public int updateAppPageSupport(AppPageSupport appPageSupport) {
int result = appPageSupportDAO.update(appPageSupport);
reloadApp(appPageSupport.getAppPageId());
return result;
}
11、List to String
private String[] convertToStringArray(List<Integer> keys) {
if (CollectionUtils.isEmpty(keys)) {
return null;
}
int listSize = keys.size();
String[] array = new String[listSize];
int emptyKey = 0;
for (int i = 0; i < listSize; i++) {
Integer key = keys.get(i);
if (key != null) {
array[i] = key.toString();
} else {
emptyKey++;
}
}
if (emptyKey == listSize) {
return null;
}
return array;
}
12、List to Integer
private List<Integer> convertToIntegerList(Integer[] keys) {
if (ArrayUtils.isEmpty(keys)) {
return null;
}
List<Integer> list = new ArrayList<Integer>();
for (Integer key : keys) {
list.add(key);
}
return list;
}