计划作业运行的Guice范围

时间:2015-12-16 12:26:37

标签: scope guice cron4j

我的应用程序构建在Guice之上并运行预定作业(cron4j),这些作业显示了与固有的@Singleton实例相关的一些问题。

我的问题的适当解决方案似乎有适用于每个作业的Scope,而不是Singleton。它类似于请求范围,但在这种不同的情况下。

我已经阅读了docs for Custom Scopes,但我并不清楚特定依赖关系如何知道如何从guice请求特定范围的实例。

示例:

public class MyJob {
    /* Knows its "run id", which could be used for the scoping mechanism */

    @Inject private Dependency dep;
    public void run() { ... }
}

public class Dependency {
    /* Technically does not know the "run id" from the job */

    @Inject @Named("jobRunScope") private InnerDependency innerDep;
}

我感谢任何指导。

1 个答案:

答案 0 :(得分:1)

如果您查看the source for RequestScoped,您会看到它使用ThreadLocal来存储特殊的Context地图,其中包含当前请求的所有关键对象对。

如果您的作业在一个线程中运行,您可以使用类似的策略来存储作用域的单例。

另一种选择是为每个作业创建一个新的Injector实例。