如何从 Scala 调用 Grails
有没有办法从同一 JVM 上运行的 Scala 类调用 Grails 服务中的方法? 我已经看到 Groovy/Griffon 做了类似的事情,但不知道如何在 Grails 中实现这一点。 (http://www.jroller.com/aalmiray/entry/griffon_groovy_scala_working_together)
基本上,我的 Grails 控制器之一调用一些 Scala 代码,该代码应该异步返回一些值。因此,我猜想返回这些值的唯一方法是回调 Grails 服务中的方法。
Is there a way to call a method in a Grails service, from a Scala class that is running on the same JVM?
I have seen something similar done from Groovy/Griffon but cannot figure out how to accomplish that in Grails. (http://www.jroller.com/aalmiray/entry/griffon_groovy_scala_working_together)
Basically, one of my Grails controllers calls some Scala code, which should return some values asynchronously. So, I guess, the only way to return those values is by calling back a method in a Grails service.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
受到上述问题中的链接以及 Grails 网站中的常见问题解答之一的启发,我找到了一种方法。
在 Scala 方面:
声明一个类似于以下内容的对象:
在 Grails 端:
在 src/groovy 中创建一个类似于以下内容的类:
在 BootStrap.groovy init 中添加以下内容:
当您在 Scala 中调用 invokeCallback("example") 时,它将调用yourService.yourMethod("example")
注意:包含 Scala 类的 jar 文件应该位于 Grails 应用程序的 lib 文件夹中
I found a way of doing it, inspired by the link in the question above, and one of the FAQs in the Grails website.
On the Scala side:
Declare an object similar to the following:
On the Grails side:
Create a class in src/groovy similar to the following:
In your BootStrap.groovy init add the following:
When you call invokeCallback("example") in Scala, it will call yourService.yourMethod("example")
Note: the jar file with your Scala class should be in the lib folder of you Grails application
您的 Grails 服务是一个 Spring bean。 @Autowire 该服务到您的 Scala 类中(它需要是一个 bean/@Component)并调用该方法。
编辑 - 添加示例:
例如(使用 Java,不是 Scala,但方法完全相同):
Java 代码调用服务:
Service:
在 Config.groovy 中:
您还可以连接 Java/Scala bean进入你的 Grails 类:
参考资料:
Grails 参考 8.4 - 使用来自 Java 的服务
Spring:基础圣杯
Your Grails service is a Spring bean. @Autowire the service into your Scala class (it will need to be a bean/@Component) and call the method.
EDIT - added example:
For example (using Java, not Scala but the approach is exactly the same):
Java code calling service:
Service:
In Config.groovy:
You can also wire your Java/Scala bean into your Grails classes:
References:
Grails Reference 8.4 - Using Services from Java
Spring: The Foundation for Grails