play1.2.4版本:
继承类play.PlayPlugin,我们可以实现插件的功能。
play框架本身基于此类提供了一些已经实现的plugin,比如:ConfigurablePluginDisablingPlugin, CorePlugin, DBPlugin, Evolutions, JobsPlugin, JPAPlugin, MessagesPlugin, TempFilePlugin, ValidationPlugin, WS
这其中有我们非常熟悉的JobsPlugin,实现一些定时JOB,onApplicationStart() 和onApplicationStop() 在服务启动停止时实现一些我们自己的业务。
onApplicationStart() 和onApplicationStop() 都是PlayPlugin类的方法,当然还有很多其它方法,你只需要继承类并重写这些方法就可以实现自己需要的插件。
打开play-1.2.4.jar包,在根目录下,我们可以看到文件play.plugins,这里面列出了所有play已经实现的插件,该文件中列出的插件类在play启动时加载。打开看看内容:
0:play.CorePlugin
100:play.data.parsing.TempFilePlugin
200:play.data.validation.ValidationPlugin
300:play.db.DBPlugin
400:play.db.jpa.JPAPlugin
450:play.db.Evolutions
500:play.i18n.MessagesPlugin
600:play.libs.WS
700:play.jobs.JobsPlugin
100000:play.plugins.ConfigurablePluginDisablingPlugin
每个插件类一行,第一列的数字为编号。
所以,我们要实现自己的插件并应用,必须也新加一个play.plugins文件(名称必须为play.plugins,在play jar中写死了,否则无法加载),存放在app目录下。
好了,主要内容描述完了,下面来个简单例子,主要实现在所有action调用前做一些操作,你可以做用户校验,这里只简单做个公共变量配置,假设所有模板都需要这个变量的话:
第一步:定义一个类,名称无所谓,只要继承类play.PlayPlugin,并重写方法beforeActionInvocation
package plugin;
import flect.Method;
import play.PlayPlugin;
import play.mvc.Scope;
public class RenderPublicVariablePlugin extends PlayPlugin {
    @Override
    public void beforeActionInvocation(Method actionMethod) {
        Scope.RenderArgs args = Scope.RenderArgs.current();
        args.put("test", "FROM plugin:this is the TEST parameter's value!");
    }
}
第二步:在app目录下添加文件play.plugins,内容如下:
validation框架
2000:plugin.RenderPublicVariablePlugin
第三步? 没有了,就是这么简单,这样你在所有模板里就可以直接引用变量test了。
后续需测试:
如果多个插件都实现beforeActionInvocation,程序会怎么处理,根据在play.plugins中列出的顺序先后执行?

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。