2017-02-14 31 views
0

在我的Spring Boot應用程序中,我希望在bean初始化後,但在任何依賴bean初始化之前運行一些代碼。 (在我特殊的場景中,我想運行一些代碼來設置一些連接池啓動後的MongoDB索引,但在依賴池啓動的任何Bean之前)。爲Spring Boot中沒有「擁有」的bean添加後構建鉤子

我熟悉@PostConstruct註釋,它是非常接近我後面的,除了你必須將它添加到類中定義的方法本身。我對Spring生命週期鉤子也很熟悉,但這還不夠好,因爲我需要在一個特定的bean初始化後立即掛鉤。

我所追求的基本上就是@PostConstruct所做的,但是可以讓您在運行時在實例外部添加一個鉤子。這樣的事情存在嗎?

+0

'@Bean(initMethod =)'或者'BeanPostProcessor' – OrangeDog

+0

如果依賴bean的數量在一定範圍內,您可以使用@DependsOn註釋來確保傳遞的bean在依賴項之前被構造。我不知道如何掛鉤初始化偵聽器。你可以註冊一個BeanPostProcessor,並在bean是正確的類型時執行你的邏輯,但是當你想用MongoTemplate創建索引時,那麼這是不可能的。 –

回答

1

你看過BeanPostProcessor接口嗎?

基本上,你實現這個接口,它給你掛鉤,其中有:postProcessBeforeInitializationpostProcessAfterInitialization。該方法的簽名是這樣的:

@Override 
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
    // DO SOMETHING HERE WITH THE BEAN before initialization 
    return bean; 
} 

@Override 
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
    //DO SOMETHING HERE WITH THE BEAN after INITIALIZATION 
    return bean; 
} 

因此,概括地說,你的BeanPostProcessor的實施將掃描每個Spring bean,然後在執行哪種方法你想要的邏輯(或兩者)。

I especially love this SO topic and its answers (for more info)

希望這個信息幫助!

相關問題