Plugins 如何使用模块而不是插件插入游戏生命周期?

Plugins 如何使用模块而不是插件插入游戏生命周期?,plugins,module,lifecycle,playframework-2.4,Plugins,Module,Lifecycle,Playframework 2.4,我看到Plugin类现在已经被弃用了(从play的2.4.x版本开始)。。。在api文档中,它说我应该使用模块来代替。。。这就是我的问题。 如何编写模块,以及如何将该模块插入主应用程序的播放生命周期?您没有指定使用哪种语言,因此我将快速介绍这两种语言。这两个答案都基于以下存储库: JAVA 以任何您想要的方式编写您的功能-没有要扩展的特定类。如果您对播放组件(如配置)有依赖关系,则应插入它们 @Singleton public class MyModuleCode { priv

我看到Plugin类现在已经被弃用了(从play的2.4.x版本开始)。。。在api文档中,它说我应该使用模块来代替。。。这就是我的问题。
如何编写模块,以及如何将该模块插入主应用程序的播放生命周期?

您没有指定使用哪种语言,因此我将快速介绍这两种语言。这两个答案都基于以下存储库:

JAVA
  • 以任何您想要的方式编写您的功能-没有要扩展的特定类。如果您对播放组件(如
    配置
    )有依赖关系,则应插入它们

    @Singleton
    public class MyModuleCode {
    
        private final boolean enableWidgets;
    
        @javax.inject.Inject
        public MyModuleCode(final Configuration configuration) {
            this.enableWidgets = configuration.getBoolean("widgets.enabled", false);
        }
    }
    
    @Singleton
    class DefaultPatternCache @Inject() (cache: CacheApi) extends PatternCache {
        override def apply(value: String): Option[Pattern] = cache.getOrElse[Option[Pattern]](key = s"Deadbolt.pattern.$value") { Some(Pattern.compile(value)) }
    }
    
  • 请注意,依赖项注入用于替代静态引用。另外,请注意,我给这个示例提供了一个
    @Singleton
    注释,但它也可以有,例如,每个请求范围

    有关更多信息,请参阅


  • 公开模块的组件。为此,扩展
    play.api.inject.Module
    类并实现
    public seq如果我想注册Jackson json模块怎么办?我应该在哪里这样做(没有全球会议)?这并不是说我需要在我的代码中注入一些类的实例,我只需要在任何http请求之前运行一些代码。文档中明确介绍了这一点:我的意思是,我需要在任何http请求发生之前执行这一操作,但只执行一次,而不是一次pero请求。将包含代码的类声明为渴望的单例-它将运行一次,当应用程序启动时。有关详细信息,请参阅。
    
    play {
        modules {
            enabled += com.example.module.MyModule
        }
    }
    
    @Singleton
    class DefaultPatternCache @Inject() (cache: CacheApi) extends PatternCache {
        override def apply(value: String): Option[Pattern] = cache.getOrElse[Option[Pattern]](key = s"Deadbolt.pattern.$value") { Some(Pattern.compile(value)) }
    }
    
    package com.example.module
    
    import com.example.module.cache.{DefaultPatternCache, PatternCache}
    import play.api.inject.{Binding, Module}
    import play.api.{Configuration, Environment}
    
    class MyModule extends Module {
        override def bindings(environment: Environment, configuration: Configuration): Seq[Binding[_]] = Seq(bind[PatternCache].to[DefaultPatternCache])
    }
    
    play {
        modules {
            enabled += com.example.module.MyModule
        }
    }