How to use existing java class from grails

后端 未结 5 614
执念已碎
执念已碎 2021-02-10 18:19

how can I call a method residing in an existing Java class from Grails app ? Is it necessary/recommended to wrap that up in a service?

相关标签:
5条回答
  • 2021-02-10 18:46

    I thought I should send an update on the how to on grails 2.2, since I did a lot of looking around and found a lot of irrelevant stuff that did not appear to work, ended up making it work this way:

    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
    

    Do a control shift o on your contoller now, and it will import the vv.Baggie

    Now when I hit the list on the browser the println shows:

    | Server running. Browse to localhost:8080/gp22 --15 on my console

    There you have a value being passed from Grails controller to a Java class processed and returned, the Java class can also call the Groovy Domains and retrieve information

    0 讨论(0)
  • 2021-02-10 18:49

    If you have them packed in a .jar file then just drop the jar file into your-project/lib

    0 讨论(0)
  • 2021-02-10 18:50

    is the class in a JAR file in your lib/ folder or in a .java file your src/ folder?

    Either way, there's no need to wrap it in a service. You can construct instances of the class and call methods on it from anywhere.

    If you need to wrap the method calls in a transaction then I'd put it in a service. Otherwise just call it directly. The only other reason to put it in a service is to use the scoping functionality (i.e. if you wanted a new instance of the class created for each request)

    cheers

    Lee

    0 讨论(0)
  • 2021-02-10 18:57

    Put your source in src/java. Then in conf/spring/resources.groovy, you can do, for example:

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

    Then you can inject it into your controllers or services with:

    def myJavaFunction
    
    0 讨论(0)
  • 2021-02-10 19:05

    there is no need to wrap as service. if you are using spring,just add the bean into resource.groovy

    0 讨论(0)
提交回复
热议问题