2011-07-12 100 views
2

如何從Grails Filter訪問應用程序上下文。我可以通過以下方式從控制器執行此操作:從Grails Filter構造器訪問應用程序上下文

def ctx = ApplicationHolder.application.mainContext 

但是,在過濾器中,ctx爲空。

在這種情況下,我特別試圖訪問過濾器的構造函數中的應用程序上下文。

回答

2

您不應該使用持有者類 - 它們在2.0中被棄用,並且將在未來的版本中被刪除。

從控制器,過濾器,服務等訪問應用程序上下文的最佳方法是通過

添加依賴注入的GrailsApplication,即

def grailsApplication 

然後你就可以獲取上下文

def ctx = grailsApplication.mainContext 

在與Spring bean相關的構造函數中工作是不尋常的,所以如果可能的話,你應該重構。 Grails工件是Spring bean,因此在構建應用程序上下文時實例化它們。

控制器有點不同,因爲它們不是像大多數bean那樣的單例,所以當它們被構造(每個請求一個)時,持有者就會被填充。但是一般情況下,你應該避免在構造函數中執行GORM工作,訪問應用程序上下文等,因爲事情不太可能連線。

相關問題