不要使用string的split,可以看看内部的2B实现:
public String[] split(String regex, int limit) { return Pattern.compile(regex).split(this, limit); }
每次会造成正则表达式的重新编译, 这是很消耗性能/内存的过程。 自己使用java的正则接口(如果表达式非常复杂, 我不建议使用java的正则接口,建议采用oro库)。 讨论帖子:http://www.iteye.com/topic/626801?page=2
2.使用spring的BeanWrapperImpl做bean组装请提前做好类型转换
spring BeanWrapperImpl 实现的类型转换有性能问题,刚才我测试来一把
使用spring BeanWrapperImpl进行类型转换的耗时:
4.687(ms)
3.508(ms)
3.261(ms)
3.177(ms)
7.526(ms)
3.393(ms)
先自己做好类型转换再调用setPropertyValue()的耗时:
0.603(ms)
0.699(ms)
0.559(ms)
0.591(ms)
0.579(ms)
0.532(ms)
可以看宝宝webx3中AbstractValueParser.setProperties()的实现:
BeanWrapper bean = new BeanWrapperImpl(object); requestContext.getPropertyEditorRegistrar().registerCustomEditors(bean); for (String key : keySet()) { String propertyName = StringUtil.toCamelCase(key); if (bean.isWritableProperty(propertyName)) { PropertyDescriptor pd = bean.getPropertyDescriptor(propertyName); MethodParameter mp = BeanUtils.getWriteMethodParameter(pd); Object value = getObjectOfType(key, pd.getPropertyType(), mp, null); bean.setPropertyValue(propertyName, value); } else { getLogger().debug("No writable property \"{}\" found in type {}", propertyName, object.getClass().getName()); } }