加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

我们可以使用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类构造函数中.
但在我们的代码中,SampleDAO是一个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
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读