如何使用grails中的现有java类

如何从Grails应用程序中调用驻留在现有Java类中的方法? 是否有必要/建议将其包含在服务中?

把你的源码放在src / java中。 然后在conf / spring / resources.groovy中,您可以这样做,例如:

// Place your Spring DSL code here beans = { myJavaFunction(com.my.javafunction) } 

然后,您可以将其注入控制器或服务:

 def myJavaFunction 

是lib /文件夹中的JAR文件中的类,还是src /文件夹中的.java文件中的类?

无论哪种方式,都不需要将其包装在服务中。 您可以从任何地方构造类的实例并在其上调用方法。

如果你需要在事务中包装方法调用,那么我将它放在一个服务中。 否则只需直接调用即可。 将其置于服务中的唯一其他原因是使用作用域function(即,如果您想要为每个请求创建类的新实例)

干杯

背风处

我以为我应该发送关于如何使用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 

现在对你的控制器进行控制转移,它将导入vv.Baggie

现在,当我点击浏览器上的列表时,println显示:

| 服务器运行。 在我的控制台上浏览到localhost:8080 / gp22 –15

你有一个值从Grails控制器传递给处理和返回的Java类,Java类也可以调用Groovy域并检索信息

如果你将它们打包在.jar文件中,那么只需将jar文件放入你的项目/ lib中

没有必要作为服务包装。 如果你使用spring,只需将bean添加到resource.groovy中