如何使用grails中的现有java类

时间:2010-01-19 02:40:30

标签: java grails groovy

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

5 个答案:

答案 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

即可