grails - 从 Grails Holders 类中获取服务 bean

标签 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 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/

相关文章:

dependency-injection - 使用 Guice 绑定(bind)类 <?>

javascript - 将参数传递给 Angular 中 @Injectable 的构造函数?

maven - 将依赖项的快照版本导入Maven存储库

grails - 如何在grails项目中更改URL?

java - 如何在 groovy 中收集列表的相似项目

grails - 将参数从一种方法传递到 Controller 中的另一种方法

java - Dagger 可以在不注入(inject)子 Activity 类的情况下注入(inject)抽象 Activity 类吗?

dependency-injection - DotNet Core 中 AuthorizationOptions 要求的依赖注入(inject)

java - 如何做 iPOJO 实例化

java - 返回大型结果集时 Grails findAll 变慢