PlayPlugin实例是否在不同线程之间共享(Play 1.2.5)

时间:2013-02-15 05:07:58

标签: plugins playframework thread-safety playframework-1.x

我正在尝试了解如何在Play Framework(1.2.5)中使用PlayPlugin对象。

不同Play线程之间是否共享相同的PlayPlugin实例?

通过一些源代码查询,我认为是的,但由于Play在很多地方都有一些元编程,而且我对这一切并不熟悉,我不是百分百肯定。

为PlayPlugin.beforeInvocation调用堆栈:

  • PlayPlugin.beforeInvocation
  • PluginCollection.beforeInvocation
    • 已启用的插件列表是PluginCollection中的字段)
  • Invocation.before
    • 使用静态字段Play.PluginCollection
    • 例如,
    • Thread.currentThread().setContextClassLoader(Play.classloader)可能会影响Play.PluginCollection。

所有主题的单个实例-behaviour也将由文章Play Framework: Introduction to Writing Modules确认:

  

beforeActionInvocation():此代码在控制器之前执行   调用。用于验证,Play也使用它。   您还可以将其他对象放入渲染中   这里的论点。几个插件也在里面设置了一些变量   线程本地以确保它们是线程安全的。

所以,我想答案是肯定的,实例是共享的,但是想确认一下。

1 个答案:

答案 0 :(得分:0)

你是对的。每个PlayPlugin实例(当然是子类)在整个JVM中共享。您可以通过Play.plugin(class<T> clazz)方法调用获取该实例。