【发布时间】:2010-01-19 02:40:30
【问题描述】:
如何从 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 文件中?
无论哪种方式,都无需将其包装在服务中。你可以在任何地方构造类的实例并调用它的方法。
如果您需要将方法调用包装在事务中,那么我会将其放入服务中。否则直接调用。将它放在服务中的唯一另一个原因是使用范围功能(即,如果您想要为每个请求创建一个类的新实例)
干杯
李
【讨论】:
我认为我应该发送有关如何在 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
现在在你的控制器上做一个 control shift o,它会导入 vv.Baggie
现在,当我在浏览器上点击列表时,println 会显示:
|服务器运行。浏览到 localhost:8080/gp22 --15 在我的控制台上
你有一个值从 Grails 控制器传递到处理并返回的 Java 类,Java 类也可以调用 Groovy 域并检索信息
【讨论】:
如果您将它们打包在 .jar 文件中,那么只需将 jar 文件放入 your-project/lib
【讨论】:
无需包装为服务。 如果您使用的是 spring,只需将 bean 添加到 resource.groovy 中
【讨论】: