从Grails Filter Constructor访问应用程序上下文

时间:2011-07-12 20:08:29

标签: grails before-filter

如何从Grails 过滤器访问应用程序上下文。我可以通过使用以下内容从Controller执行此操作:

def ctx = ApplicationHolder.application.mainContext

但是在过滤器中ctx为null。

在这种情况下,我特意尝试访问Filter的构造函数中的应用程序上下文。

1 个答案:

答案 0 :(得分:2)

您不应该使用持有者类 - 它们在2.0中已弃用,将在以后的版本中删除。

从控制器,过滤器,服务等访问应用程序上下文的最佳方法是为GrailsApplication添加依赖注入,即

def grailsApplication

然后你可以通过

获取上下文
def ctx = grailsApplication.mainContext

在与Spring bean相关的构造函数中工作是不寻常的,所以如果可能的话你应该重构。 Grails工件是Spring bean,因此它们在构造应用程序上下文时被实例化。

控制器有点不同,因为它们不像大多数豆类那样是单身,所以当它们构建时(每个请求一个),持有者就会被填充。但总的来说,你应该避免在构造函数中进行GORM工作,访问应用程序上下文等,因为事情不太可能已经连线。