cglib的BeanCopier功能很强大,不过频繁的create太占用资源,降低服务器性能,所以写了下面的代码进行优化。以达到提升性能的目的。主要就是用缓存将类型相同的copier缓存起来,后续copy的时候就不用再继续创建了。
这样的话如果有频繁用到BeanCopier的地方,将是很有用处滴。
import org.springframework.cglib.beans.BeanCopier; import java.util.concurrent.ConcurrentHashMap; /** * BeanCopier工具类 * @author 李锋镝 */ public class BeanCopierUtil { /** * BeanCopier的缓存 */ static final ConcurrentHashMap<String, BeanCopier> BEAN_COPIER_CACHE = new ConcurrentHashMap<>(); /** * BeanCopier的copy * @param source 源文件的 * @param target 目标文件 */ public static void copy(Object source, Object target) { String key = genKey(source.getClass(), target.getClass()); BeanCopier beanCopier; if (BEAN_COPIER_CACHE.containsKey(key)) { beanCopier = BEAN_COPIER_CACHE.get(key); } else { beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false); BEAN_COPIER_CACHE.put(key, beanCopier); } beanCopier.copy(source, target, null); } /** * 生成key * @param srcClazz 源文件的class * @param tgtClazz 目标文件的class * @return string */ private static String genKey(Class<?> srcClazz, Class<?> tgtClazz) { return srcClazz.getName() + tgtClazz.getName(); } }
除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接
不需要的,BeanCopier自己本来有缓存
@benzpao 啊?是吗?这个还真没注意。
@李锋镝 源码里还真有,不知道是不是源码优化了