我正在尝试将插件更新为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 抛出异常
显示java.lang.NullPointerException 在ConsoleScript2.run(ConsoleScript2:6) at org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
当我同时调用它们时抛出NullPointerException:“getClass”方法和“serviceMethod”方法。
我试着通过调试eclipse来看看发生了什么,我可以观察到“myService”变量被设置为一个对象。当我点击它时,我可以看到它的字符串表示就像上面印刷的一样。但我在对象内部看不到任何东西。这个服务'类有成员变量,但我在调试时看不到它们。就像他们在那里一样。
有人可以解释我出了什么问题吗?
由于
答案 0 :(得分:2)
不要使用Holders
,并避免引入依赖关系。使用依赖注入,它是一件好事。
您的src/groovy
类可能来自控制器,服务,Quartz作业或其他支持DI的Grails工件,对吧?如果是这样,请在那里注入此服务,当您调用src / groovy类时,将其作为方法参数传递,或者在构造函数或setter中注入一次。
即使没有从Grails工件中调用它,也很容易获得对该服务的访问权限。例如。 servlet可以访问ServletContext
,并且可以从那里轻松访问ApplicationContext
。