2013-08-06 44 views

回答

1

如果聲明bean作爲靜態,你的意思是這樣

@Bean 
public static MyBean myBean() { 
    return new MyBean(); 
} 

那麼這樣做的好處是實例方法豆之前已經產生你的bean。

應用程序上下文可以自動檢測 他們的bean定義的BeanFactoryPostProcessor豆類和其他豆類獲取創建 前申請他們:你會用BeanFactoryPostProcessor其中規定用這個例子。

在您的bean的其餘部分聲明並使用靜態方法初始化它們之前,Spring Java配置方式將被自動檢測和初始化。例如,

@Bean 
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { 
    return new PropertySourcesPlaceholderConfigurer(); 
} 

春天將檢測PropertySourcesPlaceholderConfigurerBeanFactoryPostProcessor,並用它來

【解析】$ {...} bean定義屬性中的佔位符值對 和@Value註解當前的Spring Environment以及其PropertySources的集合 。

因爲這些豆子都應該其他豆類之前進行初始化,用實例方法,沒有一點能夠訪問他們,讓你的第二個問題是沒有實際意義。

+0

我指的是如下:public sample {@Autowired private static PropertySourcesPlaceholderConfigurer; ...在靜態方法和非靜態方法中內部使用bean}如果我沒有聲明爲靜態方法,那麼我無法在靜態方法中使用這個bean。所以我想知道聲明和它的好處的區別 – user2323036

+0

聲明爲「static」的'@ Bean'方法將全部創建將在應用程序上下文中結束的對象。將它們聲明爲「靜態」的唯一好處是首先將它們放入應用程序上下文中。所以它與他們的生命週期有關。你將聲明爲「靜態」的bean通常不需要能夠使用其他bean(這將被聲明爲實例方法),所以它並不重要。 –

+0

當我宣佈爲靜態問題是自動裝配不工作..該bean在應用程序代碼內部返回null。所以我的問題是,當bean是單例時,問題是否重要? – user2323036

相關問題