我们可以使用Scala对象使用Google Guice DI,而不是使用scala在Pl
发布时间:2020-12-16 09:09:33 所属栏目:安全 来源:网络整理
导读:我们的应用程序基于Play 2.4与 Scala 2.11和Akka构建. 缓存在我们的应用程序中大量使用.我们使用Play的默认EhCache进行缓存. 我们目前使用Cache对象(play.api.cache.Cache)进行缓存 import play.api.Play.currentimport play.api.cache.Cacheobject SampleDA
我们的应用程序基于Play 2.4与
Scala 2.11和Akka构建.
缓存在我们的应用程序中大量使用.我们使用Play的默认EhCache进行缓存. 我们目前使用Cache对象(play.api.cache.Cache)进行缓存 import play.api.Play.current import play.api.cache.Cache object SampleDAO extends TableQuery(new SampleTable(_)) with SQLWrapper { def get(id: String) : Future[Sample] = { val cacheKey = // our code to generate a unique cache key Cache.getOrElse[Future[[Sample]](cacheKey) { db.run(this.filter(_.id === id).result.headOption) } } } 现在使用Play 2.4,我们计划使用内置的Google Guice DI支持.以下是Play 2.4文档提供的示例示例 import play.api.cache._ import play.api.mvc._ import javax.inject.Inject class Application @Inject() (cache: CacheApi) extends Controller { } 上面的示例将依赖项插入到Scala类构造函数中. 那么现在是否可以使用Scala对象而不是scala类来实现Google Guice DI? 解决方法
不,不可能在guice中注入对象.相反,让您的SampleDAO成为一个类,您可以在其中注入CacheApi.然后在控制器中注入新的DAO类.您还可以使用@Singleton注释SampleDAO.这将确保SampleDAO仅实例化一次.整件事看起来像这样:
DAO @Singleton class SampleDAO @Inject()(cache: CacheApi) extends TableQuery(new SampleTable(_)) with SQLWrapper { // db and cache stuff } 调节器 class Application @Inject()(sampleDAO: SampleDAO) extends Controller { // controller stuff } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |