从Grails Holders课程获取服务bean

时间:2014-11-21 20:18:43

标签: grails dependency-injection

我正在尝试将插件更新为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”变量被设置为一个对象。当我点击它时,我可以看到它的字符串表示就像上面印刷的一样。但我在对象内部看不到任何东西。这个服务'类有成员变量,但我在调试时看不到它们。就像他们在那里一样。

有人可以解释我出了什么问题吗?

由于

1 个答案:

答案 0 :(得分:2)

不要使用Holders,并避免引入依赖关系。使用依赖注入,它是一件好事。

您的src/groovy类可能来自控制器,服务,Quartz作业或其他支持DI的Grails工件,对吧?如果是这样,请在那里注入此服务,当您调用src / groovy类时,将其作为方法参数传递,或者在构造函数或setter中注入一次。

即使没有从Grails工件中调用它,也很容易获得对该服务的访问权限。例如。 servlet可以访问ServletContext,并且可以从那里轻松访问ApplicationContext