2013-04-25 68 views
0

我有一個工具類,我想在應用程序在Spring MVC中啓動時進行初始化。所以我正在實施InitializingBean。現在我必須爲它創建一個對象並將它保存在Application範圍中,以便我可以在任何地方訪問同一個實例。但我無法掌握這一點。春天在應用程序上下文中設置對象mvc

這裏是我的嘗試:

public class DashboardInitializer implements InitializingBean, ApplicationContextAware { 

    private ApplicationContext mApplication; 

    @Override 
    public void afterPropertiesSet() throws Exception { 

     initializeConfigurationUtil(); 

     ConfigurationUtil util = ConfigurationUtil.getInstance(); 

     /* Save the util to application scope */ 

    } 

    @Override 
    public void setApplicationContext(ApplicationContext pApplication) throws BeansException { 
     this.mApplication = pApplication; 
    } 
} 

這是正確的做法或有更好的方法來做到這一點?

回答

3

我認爲你需要簡化這一點。

您希望在加載應用程序上下文後初始化實用程序類,但是您還希望util類位於應用程序上下文中?

似乎util類在應用程序上下文中配置了一些依賴項對象,而util類又是應用程序上下文中某些類的依賴項。

如果你可以以bean的形式表達這些依賴關係(util是一個bean,注入它的依賴bean,而需要util的bean注入util),Spring將確保util的所有依賴首先被初始化,然後util被初始化,然後它被注入到需要util的類中。

你不應該嘗試添加一些東西到初始化的上下文..它是不可能的。

如果無法將util及其依賴項表達爲bean,那麼也可以採用以下方法: 1.將util配置爲應用程序上下文中的bean,添加一個不執行任何操作的默認構造函數。所以這個對象會被創建,但是在加載spring上下文時沒有被初始化。

  1. ApplicationContextAware實現你有,修改setApplicationContext方法。從上下文獲取您之前配置的util bean。

  2. 現在你可以初始化(執行一些你想要執行的代碼)util實例,只要確保你不要試圖將bean重新分配給其他util實例。

希望這會有所幫助。

1

您可以使用@postconstruct註釋方法在應用程序初始化後立即執行業務邏輯。並且可以使用佔位符在java字段中的config和@Value批註中簡單地注入屬性。

+0

我檢查了'''@ PostConstruct''''。這是在創建控制器對象後爲每個控制器調用的。但是,我的邏輯並不是特定於任何控制器,而是特定於應用程序。我的ConfigurationUtil在控制器中使用,所以我必須在應用程序配置完成後才初始化它。所以''''afterPropertiesSet()''''似乎是理想的選擇。但是我無法得到如何在應用程序上下文中存儲它的實例,這樣我就可以在任何地方使用同一個實例。我正在考慮使用'''''''''''''''''''''''這是我的目的的正確選擇嗎? – divinedragon 2013-04-25 12:41:58

+0

postconstuct不是特定於控制器的 – NimChimpsky 2013-04-25 14:17:21

相關問題