Class 类的Grails初始化

Class 类的Grails初始化,class,grails,groovy,initialization,Class,Grails,Groovy,Initialization,我有一个关于groovy/grails初始化的问题。当我有以下类时,sInstance不会被传递到SService初始化中 class A { String sInstance String app String dbInstance SService s = new SService(sInstance:sInstance, app:app) } 服务类别: class SService { String sInstance String

我有一个关于groovy/grails初始化的问题。当我有以下类时,sInstance不会被传递到SService初始化中

class A {

    String sInstance
    String app
    String dbInstance

    SService s = new SService(sInstance:sInstance, app:app)
}
服务类别:

class SService {

    String sInstance
    String app

public getSInstance{
    return sInstance
    }
}
这将返回null,其中

class A {

    String sInstance
    String app
    String dbInstance

public initializeSService{
    SService s = new SService(sInstance:sInstance, app:app)
    }
}
从SService类返回sInstance变量


这是为什么?我如何使用类A构造函数初始化SService对象?

您不能这样做:

class A {

    String sInstance
    String app
    String dbInstance

    SService s = new SService(sInstance:sInstance, app:app)
}
问题是,当您创建SService实例时,sInstance尚未初始化。如果您想从类内将sInstance传递给其他类的构造函数,则必须在sInstance被赋值后进行传递,就像完全构造a后调用的方法一样

编辑:

试图从下面的评论中澄清一些事情:

class A {
    String sInstance
    String app
    String dbInstance

    void anyMethod() {
        // this will work as long as you have initialized sInstance
        SService s = new SService(sInstance:sInstance, app:app)
    }
}
根据您真正想要做的事情,可能是朝着这个方向:

class A {
    String sInstance
    String app
    String dbInstance
    SService s

    void initializeS() {
        if(s == null) {
            // this will work as long as you have initialized sInstance
            s = new SService(sInstance:sInstance, app:app)
        }
    }
}
或:


如果我使用另一个方法(在完全构造了之后),那么我就不能将其作为类变量访问。如何将其构造为类变量?为什么您不能在方法内部访问它?
A
中定义的任何方法都可以访问
A
中定义的所有字段和属性。如果我执行“def startService()”并将对SService的初始化调用放在其中,则在另一个方法中,我无法访问我创建的服务。我得到以下错误消息:如果您将SService声明为类中的一个字段,那么您会这样做。请参阅我上面的示例,其中包含一个名为服务的字段。请参阅服务的某些方法。
class A {
    String sInstance
    String app
    String dbInstance
    SService theService

    SService getTheService() {
        if(theService == null) {
            // this will work as long as you have initialized sInstance
            theService = new SService(sInstance:sInstance, app:app)
        }
        theService
    }

    def someMethodWhichUsesTheService() {
        getTheService().doSomethingToIt()
    }
}