如何从Grails应用程序中调用驻留在现有Java类中的方法?是否有必要/建议将其包含在服务中?
答案 0 :(得分:11)
将你的源码放在src / java中。然后在conf / spring / resources.groovy中,您可以这样做,例如:
// Place your Spring DSL code here
beans = {
myJavaFunction(com.my.javafunction)
}
然后您可以使用以下命令将其注入控制器或服务:
def myJavaFunction
答案 1 :(得分:4)
是lib /文件夹中的JAR文件中的类,还是src /文件夹中的.java文件中的类?
无论哪种方式,都不需要将其包装在服务中。您可以从任何地方构造类的实例并在其上调用方法。
如果你需要在事务中包装方法调用,那么我将它放在一个服务中。否则只需直接调用即可。将其置于服务中的唯一原因是使用作用域功能(即,如果您想为每个请求创建一个新的类实例)
欢呼声
利
答案 2 :(得分:1)
我认为我应该发送关于如何使用grails 2.2的更新,因为我做了很多环顾四周,发现了许多看起来不起作用的无关紧要的东西,最终让它以这种方式工作:
Project name: gp22
Grails Domain Example name: DemoGrailsDomain
JavaClass:src/java/vv/Baggie.java
Controller: DemoGrailsDomainController
1:src / java / vv / Baggie.java
package vv;
import gp22.DemoGrailsDomain;
public class Baggie {
public int myresult(int value1) {
int resultset=10+value1;
return resultset;
}
public int getResult(int value1) {
int aa=myresult(value1);
return aa;
//You can call your domain classes directly
// Once called do a control shift o to pull in the above import example
//DemoGrailsDomain getdomain = new DemoGrailsDomain();
}
}
DemoGrailsDomainController:
def list(Integer max) {
//def myJavaFunction
Baggie a=new Baggie()
int passit=5
def bb=a.getResult(passit);
println "--"+bb
现在对您的控制器进行控制转移o,它将导入vv.Baggie
现在,当我点击浏览器上的列表时,println显示:
|服务器运行。浏览到localhost:8080 / gp22 --15在我的控制台上
你有一个值从Grails控制器传递给处理和返回的Java类,Java类也可以调用Groovy域并检索信息
答案 3 :(得分:0)
如果您将它们打包在 .jar 文件中,那么只需将jar文件放入 your-project / lib
答案 4 :(得分:0)
不需要包装为服务。 如果您使用的是spring,只需将bean添加到resource.groovy
即可