2012-12-17 80 views
1

對於我的Spring配置的靜態分析,我只需要bean定義 - 實際上創建bean會導致問題,因爲有些需要(正確初始化)數據庫。如何在不實際創建bean的情況下獲取bean定義?

有沒有辦法阻止AnnotationConfigApplicationContext創建任何bean?相反,它應該只加載和分析配置並停止。

+0

使得豆類懶實例化將「防止」初始化 – Yevgeniy

+0

不幸的是,我不能讓所有的豆類'@ Lazy' :-(...或者,也許我可以的,如果我可以使'AnnotationConfigApplicationContext' *認爲*所有的bean都懶惰: -/ –

回答

1

您可以實現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"); 
    } 
} 
+0

: - /我想,我可以在運行我的支票後拋出一個預期的異常......這個想法,但我希望有一個解決方案doesn需要這樣的破解 –

+0

是的,拋出一個異常聽起來很髒。那麼如何讓你的bean懶化實例化?當然,只有在初始化時才使用它。 – Yevgeniy

+0

hm ...另一種解決方案是使用' org.springframework.beans.factory.xml.Defau ltBeanDefinitionDocumentReader'在你的ApplicationContext之外。對於你的靜態分析voodoo你並不需要你的ApplicationContext,對嗎?這一步可以在初始化應用程序之前完成,甚至可以在單獨的過程中完成。 – Yevgeniy

相關問題