Spring Grails服务类上的临时字段(如果在特定上下文中使用)

Spring Grails服务类上的临时字段(如果在特定上下文中使用),spring,grails,Spring,Grails,因此,我在Quartz作业中使用Grails服务类。现在,每当在作业上下文中使用服务时,我都希望将作业设置为服务上的一个字段,因为如果在作业上下文中执行,服务会执行一些特殊的逻辑,并且需要访问作业对象才能执行。最简单/最安全的做法是创建我的服务类的一个新实例,并在其上设置作业并使用它,而不是注入服务的版本吗?我担心,如果我使用注入的服务副本并在其上设置作业,并且在我的清理逻辑没有运行的情况下发生一些完全奇怪的错误,那么即使在作业执行之后,服务也会在其上设置该作业 希望这有点道理。这是我正在做的一

因此,我在Quartz作业中使用Grails服务类。现在,每当在作业上下文中使用服务时,我都希望将作业设置为服务上的一个字段,因为如果在作业上下文中执行,服务会执行一些特殊的逻辑,并且需要访问作业对象才能执行。最简单/最安全的做法是创建我的服务类的一个新实例,并在其上设置作业并使用它,而不是注入服务的版本吗?我担心,如果我使用注入的服务副本并在其上设置作业,并且在我的清理逻辑没有运行的情况下发生一些完全奇怪的错误,那么即使在作业执行之后,服务也会在其上设置该作业

希望这有点道理。这是我正在做的一个超级简单的例子

class TestService {
    def job

    def someMethod() {
       //Some logic
       if (job != null) {
           //Job specific logic
       }
    }
}

class TestJob {
    def execute(context) {
       def service = new TestService()
       service.job = this

       service.sometMethod()
    }
}

非常简单,但这似乎是确保作业不会保留在spring定义的服务版本上的最安全的方法。

这是一个问题-即使作业字段仍然设置为指向作业实例,但一旦Quartz作业完成运行,作业是否会为空?这假设Quartz会破坏作业实例,否则来自服务的引用可能会停止对其进行垃圾收集。我想您可以对此进行测试?服务是单例的(您可能可以配置Spring来更改此设置),因此在服务上设置“新”值不起作用,除非它们将状态存储在DB中,等等。Quartz作业实际在做什么?