我让团队成员对此有了更深入的了解并获得了一些有趣的结果。 Spring的默认配置非常不感兴趣,因为其内存使用情况特别保守。有迹象表明,可以调整为显著收益2个基本方面:
- 首先是春天
OsgiBundleXmlApplicationContext
内部非公开的属性,如果你从类扩展和覆盖customizeBeanFactory
方法,你可以重写。
我们这样做是这样的:
@Override
protected void customizeBeanFactory(DefaultListableBeanFactory beanFactory) {
super.customizeBeanFactory(beanFactory);
String cacheBeanMetadataSysProp = System.getProperty(CACHE_BEAN_METADATA, "true");
if (cacheBeanMetadataSysProp != null
&& cacheBeanMetadataSysProp.equalsIgnoreCase("false")) {
beanFactory.setCacheBeanMetadata(false);
} else if (cacheBeanMetadataSysProp != null
&& cacheBeanMetadataSysProp.equalsIgnoreCase("true")) {
beanFactory.setCacheBeanMetadata(true);
}
}
设置“setCacheBeanMetadata”属性false
导致BeanDefinitions
(基本程序的基于XML的配置的镜像)初始化后丢弃。
- 第二个变化 - 我们目前有一个原型 - 是Spring源代码对集合进行延迟初始化的补丁。事实证明,许多表示Beans及其所有属性的内部Spring对象都有很多成员默认初始化为HashMaps和其他集合,但很少填充数据。改变Spring框架以便懒惰地初始化这些将会节省大量的内存,但这是一个非常有创意的改变。
将所有我们的应用程序上下文定义重写为Java中的命令性BeanFactory调用根本不是一个选项。 – 2009-06-26 15:37:01