2015-05-13 50 views
0

在一個項目中有幾個applicationContext.xml文件。定義的bean沒有任何懶惰的定義。那麼所有的單例範圍bean都會在運行時實例化。
糟糕。這對開發階段非常不利。接近2分鐘的時間需要服務器啓動。現在我會知道是否有任何解決方案在春季進行主動延遲實例化。例如web.xml中的一個配置bean set default-lazy-init =「true」。如何激活所有存在的spring實例化spring bean

+0

你已經很好地構建了這個問題,關閉了...:P –

回答

1

實現自定義的BeanFactoryPostProcessor,設置懶得真實的,例如:

public class BeanFactoryPostProcessorImpl implements BeanFactoryPostProcessor { 

@Override 
public void postProcessBeanFactory(final ConfigurableListableBeanFactory beanFactory) throws BeansException { 

    for (String beanName : beanFactory.getBeanDefinitionNames()) { 
     beanFactory.getBeanDefinition(beanName).setLazyInit(true); 
    } 
} 

}

得到它的工作,你需要做的就是將其添加到您的應用程序上下文作爲標準豆:

ApplicationContext會檢測其部署在它 其實現的BeanFactoryPostProcessor接口,並且任何豆自動將它們用作豆工廠後處理器,時間爲 。除了以類似於任何其他bean的方式部署這些後處理器之外,不需要做任何其他事情。

0

applicationContext.xml文件,您可以在<beans/>元素與價值true添加default-lazy-init屬性。見reference

+0

我有很多'applicationContext.xml',這不是很好,編輯所有這些。例如想象你有2000'applicationcontext.xml'.then你將編輯所有這些? –

+0

因此,可能實現'BeanFactoryPostProcessor'並在'postProcessBeanFactory'中爲(String beanName:beanFactory.getBeanDefinitionNames()){beanFactory.getBeanDefinition(beanName).setLazyInit(true);}' –

+0

謝謝。但我如何註冊它。我最喜歡創建一個實現'BeanFactoryPostProcessor'的類,或者之後我應該在web.xml或其他配置文件中註冊它。謝謝。 –

相關問題