我正在尝试将插件更新到 Grails 2.4。因此,我必须用较新的 Holders 类替换已弃用的 ApplicationContext 类。
但是我在从 Holders 类中获取服务 bean 时遇到了一些问题。
运行以下代码:
import grails.util.Holders;
def myService = Holders.grailsApplication.mainContext.myService
println myService
println myService.getClass()
println myService.serviceMethod()
它打印如下内容:
grails.plugin.my.MyService@1e5cd54d Exception thrown
java.lang.NullPointerException at ConsoleScript2.run(ConsoleScript2:6) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
当我同时调用“getClass”方法和“serviceMethod”方法时,它会引发 NullPointerException。
我也尝试通过从 Eclipse 调试来查看发生了什么,我可以观察到“myService”变量被设置为一个对象。当我点击它时,我可以看到它的字符串表示,就像上面打印的一样。但我看不到物体内部的任何东西。这个服务类有成员变量,但我在调试时看不到它们。就像他们不在那里一样。
有人可以解释我出了什么问题吗?
谢谢
最佳答案
不要使用 Holders
,并避免引入依赖项。使用依赖注入(inject),这是一件好事。
您的 src/groovy
类可能是从 Controller 、服务、Quartz 作业或其他支持 DI 的 Grails 工件调用的,对吧?如果是这样,请在此处注入(inject)此服务,当您调用 src/groovy 类时,将其作为方法参数传递,或者在构造函数或 setter 中注入(inject)一次。
即使它不是从 Grails 工件调用的,也很可能很容易访问该服务。例如。 servlet 可以访问 ServletContext
访问ApplicationContext
很简单从那里。
关于grails - 从 Grails Holders 类中获取服务 bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069594/