如何从Grails 过滤器访问应用程序上下文。我可以通过使用以下内容从Controller执行此操作:
def ctx = ApplicationHolder.application.mainContext
但是在过滤器中ctx为null。
在这种情况下,我特意尝试访问Filter的构造函数中的应用程序上下文。
答案 0 :(得分:2)
您不应该使用持有者类 - 它们在2.0中已弃用,将在以后的版本中删除。
从控制器,过滤器,服务等访问应用程序上下文的最佳方法是为GrailsApplication添加依赖注入,即
def grailsApplication
然后你可以通过
获取上下文def ctx = grailsApplication.mainContext
在与Spring bean相关的构造函数中工作是不寻常的,所以如果可能的话你应该重构。 Grails工件是Spring bean,因此它们在构造应用程序上下文时被实例化。
控制器有点不同,因为它们不像大多数豆类那样是单身,所以当它们构建时(每个请求一个),持有者就会被填充。但总的来说,你应该避免在构造函数中进行GORM工作,访问应用程序上下文等,因为事情不太可能已经连线。