對於我的Spring配置的靜態分析,我只需要bean定義 - 實際上創建bean會導致問題,因爲有些需要(正確初始化)數據庫。如何在不實際創建bean的情況下獲取bean定義?
有沒有辦法阻止AnnotationConfigApplicationContext
創建任何bean?相反,它應該只加載和分析配置並停止。
對於我的Spring配置的靜態分析,我只需要bean定義 - 實際上創建bean會導致問題,因爲有些需要(正確初始化)數據庫。如何在不實際創建bean的情況下獲取bean定義?
有沒有辦法阻止AnnotationConfigApplicationContext
創建任何bean?相反,它應該只加載和分析配置並停止。
您可以實現BeanDefinitionRegistryPostProcessor
接口。在postProcessBeanDefinitionRegistry
方法,你可以訪問的BeanDefinition的
public class MyBeanDefinitionRegistryPostProcessor implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
// ...
}
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) throws BeansException {
registry.getBeanDefinition("myBean");
}
}
: - /我想,我可以在運行我的支票後拋出一個預期的異常......這個想法,但我希望有一個解決方案doesn需要這樣的破解 –
是的,拋出一個異常聽起來很髒。那麼如何讓你的bean懶化實例化?當然,只有在初始化時才使用它。 – Yevgeniy
hm ...另一種解決方案是使用' org.springframework.beans.factory.xml.Defau ltBeanDefinitionDocumentReader'在你的ApplicationContext之外。對於你的靜態分析voodoo你並不需要你的ApplicationContext,對嗎?這一步可以在初始化應用程序之前完成,甚至可以在單獨的過程中完成。 – Yevgeniy
使得豆類懶實例化將「防止」初始化 – Yevgeniy
不幸的是,我不能讓所有的豆類'@ Lazy' :-(...或者,也許我可以的,如果我可以使'AnnotationConfigApplicationContext' *認爲*所有的bean都懶惰: -/ –