【问题标题】:How to use existing java class from grails如何使用grails中现有的java类
【发布时间】:2010-01-19 02:40:30
【问题描述】:

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

【问题讨论】:

    标签: java grails groovy


    【解决方案1】:

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

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

    然后你可以将它注入到你的控制器或服务中:

    def myJavaFunction
    

    【讨论】:

    • 感谢您的回复。还有一件事:我在这个类中有一个 apache 记录器,编译器显然找不到记录器 jar。我只是将 jar 添加到 lib 文件夹还是从环境中获取一些特殊实例?
    • 您可能希望将其作为单独的问题发布。我认为我们遇到了这个问题,但目前不值得花时间在上面。 Grails 已经内置了日志功能,所以我猜可能存在一些冲突。
    【解决方案2】:

    该类是在您的 lib/ 文件夹中的 JAR 文件中还是在您的 src/ 文件夹中的 .java 文件中?

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

    如果您需要将方法调用包装在事务中,那么我会将其放入服务中。否则直接调用。将它放在服务中的唯一另一个原因是使用范围功能(即,如果您想要为每个请求创建一个类的新实例)

    干杯

    【讨论】:

      【解决方案3】:

      我认为我应该发送有关如何在 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 域并检索信息

      【讨论】:

      • >我假设您在某些 IDE 中进行了控制转换?哪一个?
      • Ctrl shift o on ggts 可在 sts 下载页面获得。虽然我认为这是所有 ide 的标准。至少 eclipse 对 jee 来说是相同的行为
      • 例如使用此方法的插件/项目参考:github.com/vahidhedayati/latlongcalcgithub.com/vahidhedayati/RemoteSSH - remoteSSH 调用 Java 和 Groovy 以执行相同的请求
      【解决方案4】:

      如果您将它们打包在 .jar 文件中,那么只需将 jar 文件放入 your-project/lib

      【讨论】:

        【解决方案5】:

        无需包装为服务。 如果您使用的是 spring,只需将 bean 添加到 resource.groovy 中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-23
          • 1970-01-01
          • 2019-11-23
          • 1970-01-01
          • 2010-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多