Java代码

1、Message消息格式化与解析

import java.text.MessageFormat;
import java.text.ParseException;
import java.text.ParsePosition;

/**
 * Message消息格式化与解析
 * 
 */
public class FormatUtils {

	public static String format(String pattern, Object... objs) {
		return format(new MessageFormat(pattern), objs);
	}

	public static String format(MessageFormat format, Object... objs) {
		return format.format(objs);
	}

	public static Object[] parse(String pattern, String source) {
		return parse(new MessageFormat(pattern), source);
	}

	public static Object[] parse(MessageFormat format, String source) {
		return format.parse(source, new ParsePosition(0));
	}
	
	public static void main(String[] args) throws ParseException {
		String pattern ="开源中国URL:{0},百度URL:{1},谷歌URL:{2}";
		String oscUrl = "www.oschina.com";
		String baiduUrl = "www.baidu.com";
		String googleUrl = "www.google.com";
		String formatVal = format(pattern, oscUrl,baiduUrl,googleUrl);
		System.out.println("格式化后:" + formatVal);
		Object[] objs = parse(pattern, formatVal);
		for (Object object : objs) {
			System.out.println(object);
		}
	}
}

测试输出:

    格式化后:开源中国URL:www.oschina.com,百度URL:www.baidu.com,谷歌URL:www.google.com

    www.oschina.com

    www.baidu.com

    www.google.com

2、CGLIB的BeanCopy功能

    

import java.util.Map;

import net.sf.cglib.beans.BeanCopier;

import com.google.common.collect.Maps;

public class FastCopy {

	private FastCopy() {}

	public static Map<String, BeanCopier> beanCopierMap = Maps
			.newConcurrentMap();

	public static Object copy(Object source, Object target) {
		String beanKey = generateKey(source.getClass(), target.getClass());
		BeanCopier copier = null;
		if (!beanCopierMap.containsKey(beanKey)) {
			copier = BeanCopier.create(source.getClass(), target.getClass(),
					false);
			beanCopierMap.put(beanKey, copier);
		} else {
			copier = beanCopierMap.get(beanKey);
		}
		copier.copy(source, target,null);
		return target;
	}

	public static String generateKey(Class<?> class1, Class<?> class2) {
		return class1.toString() + class2.toString();
	}
}

3、CGLIB代理对象

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import com.travelzen.tops.order.core.intl.flight.bo.FlightOrderItemBO;
import com.travelzen.tops.order.core.intl.flight.bo.v2.util.FlightOrderItemWrapUtil;
import com.travelzen.tops.order.dao.intl.po.gen.FlightOrderItem;
import com.travelzen.tops.order.dao.intl.v2.anno.ConvertAnnotation;

/**
 * flightOrderItem和flightOrderItemBO统一转换成FlightOrderItemQueryWrap只适用于查询
 * 采用cglib代理对象,调用方法:
 * FlightOrderItemQueryWrap wrap = new FlightOrderItemQueryWrap(foo);
 * foo = wrap.proxy();
 * 1:调用默认的方法,获取返回的结果
 * 2:返回的结果为空,判断该方法是否有{@link ConvertAnnotation}注解
 * 3:有{@link ConvertAnnotation}注解,则调用{@link FlightOrderItemWrapUtil}的get方法
 */

public class FlightOrderItemQueryWrap implements MethodInterceptor {

	private FlightOrderItemWrapUtil flightOrderItemWrapUtils;

	private FlightOrderItemBO flightOrderItemBO;


	public FlightOrderItemQueryWrap(FlightOrderItemBO flightOrderItemBO)
			throws Exception {
		flightOrderItemBO = this.flightOrderItemBO;
		flightOrderItemWrapUtils = new FlightOrderItemWrapUtil(
				flightOrderItemBO.getId());
	}

	public FlightOrderItemQueryWrap(FlightOrderItem flightOrderItem)
			throws Exception {
		this(new FlightOrderItemBO(flightOrderItem));
	}
	
	public FlightOrderItemBO proxy(){
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.flightOrderItemBO.getClass());
		enhancer.setCallback(this);
		return (FlightOrderItemBO)enhancer.create();
	}

	@Override
	public Object intercept(Object obj, Method method, Object[] args,
			MethodProxy proxy) throws Throwable {
		Object retVal =  proxy.invokeSuper(obj, args);
		if(retVal != null){
			return retVal;
		}
		ConvertAnnotation anno = method.getAnnotation(ConvertAnnotation.class);
		if(anno != null){
			return flightOrderItemWrapUtils.get(anno.targetClazz(),anno.propertyName(), method.getReturnType());
		}
		return null;
	}
}


你可能感兴趣的:(java,cglib,MessageFormat)