我正在努力了解如何在Play Framework(1.2.5)中使用PlayPlugin对象。
不同的Play线程之间是否共享相同的PlayPlugin实例?
通过一些源代码查找,我想是的,但由于Play在很多地方都有一些元编程,而且我对这一切都不太熟悉,所以我不能100%确定。
PlayPlugin.beforeInvocation:的调用堆栈
- 插入前播放插件
- 插件集合.插入之前
- 已启用插件的列表是PluginCollection中的一个字段)
- 调用.之前
- 使用静态字段Play.PluginCollection
- 例如,
Thread.currentThread().setContextClassLoader(Play.classloader)
可能会影响Play.PluginCollection
所有线程的单个实例-行为也将在文章Play Framework:写作模块简介:中得到证实
beforeActionInvocation():此代码在控制器之前执行调用。对于验证很有用,Play也使用它。也可以将其他对象放入渲染中这里的论点。一些插件还在内部设置了一些变量线程本地程序以确保它们是线程安全的。
所以,我想答案是肯定的,这些实例是共享的,但我想确认一下。
你说得对。PlayPlugin的每个实例(当然是子类)都在整个JVM中共享。您可以通过Play.plugin(class<T> clazz)
方法调用获得该实例。