我讓團隊成員對此有了更深入的瞭解並獲得了一些有趣的結果。 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