`
Small嗳TT
  • 浏览: 11342 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

TT随笔二 TInit以及TMap

阅读更多

当工程基础打好之后,我就在想,在服务启动的时候,我们往往会需要进行一些处理,包括静态资源的读取等等,而这些处理有一部分又可以抽离出来。因此我在pub.utils中添加了一个TInit类,用于初始化公共部分。
而在初始化的时候,我需要将一部分信息存储在缓存中,因此我又定义了一个TCach类。这个TCach其实就是一个Map。
但是我不想去直接使用Map,这是为什么了?例如写一个Map的时候,总得这么定义:
Map<String, Object> map = new HashMap<String, Object>();
好吧,我承认我实在是懒得可以。所以我打算构建自己的Map。
考虑到通常来说,HashMap<String, Object>形式的map较为常用,因此我定义了一个TMap,继承HashMap<String, Object>。如此一来,我在进行map定义的时候只要这么写:
TMap map = TMap();
我也觉得自己实在够懒,勿喷哈。
但如果这个map只是这个目的,那实在就太多余了。我先大致贴出这个TMap中目前写好的方法:


 
大致上,分以下拓展:
1、put方法返回自身,这样可以类似jQuery一样链式调用;
2、提供了几种常用类型的get方法;
3、为get方法添加default值的支持;
4、get方法支持泛型。
加了这几个拓展之后,个人觉得使用起来方便多了,尤其是default和泛型,有兴趣的可以尝试下。
详细代码如下:

package com.tt.pub.map;

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.nutz.lang.Strings;

/**
 * Desc:自定义的一个map类,继承HashMap,以<String, Object>的形式。
 * 		目的是为了简化代码编写。以<String, Object>的形式是因为这种形式较为常见。
 * 		并且提供了一些常用类型的get方法,不用再手动的去转型。
 * @author Small
 * @Email 536762164@qq.com
 * @since 2013-5-14
 *
 */
public class TMap extends HashMap<String, Object>{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public TMap(){}
	
	public TMap put(String key, Object value){
		super.put(key, value);
		return this;
	}
	public String getStr(String key){
		return getStr(key, null);
	}
	public String getStr(String key, String def){
		Object value = this.get(key);
		if(value == null) return def;
		String str = String.valueOf(value);
		if(str == null) return def;
		return str;
	}
	public int getInt(String key){
		return getInt(key, 0);
	}
	public int getInt(String key, int def){
		Object value = this.get(key);
		if(value == null) return def;
		String str = String.valueOf(value);
		if(Strings.isBlank(str)) return def;
		return Integer.parseInt(str);
	}
	public long getLong(String key){
		return getLong(key, 0);
	}
	public long getLong(String key, long def){
		Object value = this.get(key);
		if(value == null) return def;
		String str = String.valueOf(value);
		if(Strings.isBlank(str)) return def;
		return Long.parseLong(str);
	}
	public double getDouble(String key){
		return getDouble(key, 0);
	}
	public double getDouble(String key, double def){
		Object value = this.get(key);
		if(value == null) return def;
		String str = String.valueOf(value);
		if(Strings.isBlank(str)) return def;
		return Double.parseDouble(str);
	}
	public BigDecimal getBigDecimal(String key){
		return getBigDecimal(key, new BigDecimal(0));
	}
	public BigDecimal getBigDecimal(String key, BigDecimal def){
		Object value = this.get(key);
		if(value == null) return def;
		String str = String.valueOf(value);
		if(Strings.isBlank(str)) return def;
		return new BigDecimal(str);
	}
	public boolean getBool(String key){
		return getBool(key, false);
	}
	public boolean getBool(String key, boolean def){
		Object value = this.get(key);
		if(value == null) return def;
		String str = String.valueOf(value);
		if(Strings.isBlank(str)) return def;
		return Boolean.parseBoolean(str);
	}
	public List<String> getList4Str(String key){
		Object value = super.get(key);
		if(value instanceof String){
			String[] strs = ((String) value).split(",");
			return Arrays.asList(strs);
		}else if(value instanceof String[]){
			return Arrays.asList((String[])value);
		}
		return this.get(key);
	}
	public <T> T get(String key){
		return get(key, null);
	}
	@SuppressWarnings("unchecked")
	public <T> T get(String key, Object defValue){
		Object value = super.get(key);
		return value == null ? (T) defValue : (T) value;
	}
	
	public Iterator<String> getKItor(){
		return this.keySet().iterator();
	}



}
 
TCache继承TMap,代码挺简单的就不说明了,以后会再进行拓展:
package com.tt.pub.map;

import org.nutz.ioc.Ioc;
import org.nutz.ioc.impl.NutIoc;
import org.nutz.ioc.loader.json.JsonLoader;
import org.nutz.mvc.NutConfig;

/**
 * Desc:系统缓存。
 * @author Small
 * @Email 536762164@qq.com
 * @since 2013-5-14
 *
 */
public class TCache  extends TMap{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	public static final String DEF_NUT_IOC_PATH = "cfg/ioc/ioc.js";

	public static final String BASE_REAL_PATH = "baseRealPath";
	
	private NutConfig nuztConfig;
	
	private Ioc ioc;
	
	private static TCache cache = new TCache();
	
	private TCache(){};
	
	public static TCache me(){
		if(cache == null){
			cache = new TCache();
		}
		return cache;
	}

	public NutConfig getNuztConfig() {
		return nuztConfig;
	}

	public void setNuztConfig(NutConfig nuztConfig) {
		this.nuztConfig = nuztConfig;
	}

	public Ioc getIoc() {
		ioc = ioc == null ? new NutIoc(new JsonLoader(DEF_NUT_IOC_PATH)) : ioc;
		return ioc;
	}

	public void setIoc(Ioc ioc) {
		this.ioc = ioc;
	}
	
	public void setBasePath(String path){
		this.put(BASE_REAL_PATH, path);
	}
	
	public String getBasePath(){
		return this.getStr(BASE_REAL_PATH);
	}

}
 
这里有个要说下,之前通过类的静态方法获得实例的,都是写getInstance,后来我懒了,改写为getInst,直到看了nutz,好吧,me!!!

TInit的主要代码如下,以后会再进行拓展:
package com.tt.pub.utils;

import javax.servlet.ServletContext;

import org.nutz.ioc.Ioc;
import org.nutz.mvc.NutConfig;

import com.tt.pub.map.TCache;

/**
 * Desc:初始化时进行公共操作。
 * @author Small
 * @Email 536762164@qq.com
 * @since 2013-5-14
 *
 */
public final class TInit {

	/**
	 * Desc:进行系统初始化工作。
	 * @author Small
	 * @Email 536762164@qq.com
	 * @since 2013-5-14
	 * 
	 * @param cfg
	 */
	public static void init(NutConfig cfg){
		TCache cache = TCache.me();
		cache.setNuztConfig(cfg);//保存当前的NutConfig
		ServletContext cxt = cfg.getServletContext();
		if(cxt != null) cache.setBasePath(cxt.getRealPath(""));//保存web服务的路径
		Ioc ioc = cfg.getIoc();
		cache.setIoc(ioc);//保存当前的ioc
	}
}
 

 

  • 大小: 49.3 KB
  • TT.zip (2.9 MB)
  • 下载次数: 1
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics