【发布时间】:2014-11-21 20:18:43
【问题描述】:
我正在尝试将插件更新到 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) 在 org.springsource.loaded.ri.ReflectiveInterceptor.jlrMethodInvoke(ReflectiveInterceptor.java:1270)
当我同时调用“getClass”方法和“serviceMethod”方法时,它会抛出 NullPointerException。
我也尝试通过从 Eclipse 调试来查看发生了什么,我可以观察到“myService”变量被设置为一个对象。当我点击它时,我可以看到它的字符串表示,就像上面打印的一样。但我看不到物体内部的任何东西。这个服务类有成员变量,但我在调试时看不到它们。就像他们不在那里一样。
谁能解释我出了什么问题?
谢谢
【问题讨论】:
-
为什么不使用 grails 的依赖注入工具?例如,在创建控制器时,只需添加一个通过名称自动装配的类属性“def myService”。
-
因为我试图从一个非 grails artfact 类 (src/groovy) 访问这个 bean。所以自动装配不可用。
标签: grails dependency-injection