我们可以用依赖注入(dependency injection, IOC)来解决这个依赖问题。...先试试用最传统的依赖注入方式:传入参数来注入这个数据库驱动依赖,把代码放在src/main/scala/model/TableDefs.scala里: 1 package com.bayakala.learn.slick301...这样的需求可以用cake pattern方式进行依赖注入。...为了方便示范,我们设计几个基本的Query Action,放在src/main/scala/access/DAOs.scala里,用cake pattern注入依赖DBConfig: 1 package...以上两个代码文件TableDefs.scala和DAOs.scala在注入依赖后都能够顺利通过编译了。
我认为这是一项非常好的技术,它可以满足构建微服务所需的所有基本要求: 易于实现 快速 健壮性 很好的支持和文档记录 在数据方面,我选择了Slick作为库,将数据库交互和FlyWay抽象为数据库迁移框架。...正如你所看到的,没有明确提供这种外部依赖; 那是因为我想把它作为一个“隐含”价值。这是一种帮助创建可测试代码的方法,但我强烈建议不要使用它,因为它会使代码难以阅读,特别是对于那些新的Scala。...我也喜欢定义一个具有所有必要依赖项的特征来轻松构建测试用例: BaseTestAppClient.scala package com.fm.mylibrary.consumer import akka.actor.ActorSystem...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。...) 提供保证为最新的应用程序的API文档 向您展示您的服务如何互动的真实例子 允许您可视化服务之间的关系 您可以随时提出任何问题,如果您需要建议,我将非常乐意提供帮助。
我认为这是一项非常好的技术,它可以满足构建微服务所需的所有基本要求: 易于实现 快速 健壮性 很好的支持和文档记录 在数据方面,我选择了Slick作为库,将数据库交互和FlyWay抽象为数据库迁移框架。...我也喜欢定义一个具有所有必要依赖项的特征来轻松构建测试用例: BaseTestAppClient.scala 它定义了在我们的测试中使用的actor系统和执行HTTP请求的函数。...这里是代码: CategoriesServiceSpec.scala CategoriesService.scala 我没有使用任何依赖注入框架,因为我相信,如果微服务需要一个DI框架,那会使它变得非常庞大而复杂...您可以在官方文档中找到更多关于如何在Slick中实现实体和DAO的示例和信息。...) 提供保证为最新的应用程序的API文档 向您展示您的服务如何互动的真实例子 允许您可视化服务之间的关系 您可以随时提出任何问题,如果您需要建议,我将非常乐意提供帮助。
之前看geotrellis源码看到有关geotrellis.slick的相关部分,仅大概浏览了一番,知道是用于读取PostGIS数据库的,未做深入研究,又恰巧前几日有老外在gitter上问了如何读取PostGIS...JDBC方式我是亲自测试过的,在geotrellis使用(十一)实现空间数据库栅格化以及根据属性字段进行赋值一文中,我详细讲述了如何从PostGIS中读取空间数据并进行栅格化操作;然而我也有极度强迫症,...先介绍一下slick,它是一款开源的scala语言数据库处理框架,官网http://slick.lightbend.com/。...大概是说Slick使得我们能像处理普通Scala集合那样处理多种数据库,并能对数据库进行控制,相当于一个ORM框架。...首先是对geotrllis.slick的引用,在build.sbt中的libraryDependencies添加如下项: "org.locationtech.geotrellis" %% "geotrellis-slick
在前面的一篇讨论中我们介绍了通过Shape来改变Slick Query结果行类型。不过这样的转变方式需要编程人员对Slick有较深的了解。更重要的是这种方式太依赖Slick的内部功能了。...下面先看一个典型的Slick Query例子: 1 import slick.driver.H2Driver.api._ 2 import scala.concurrent.duration._...import scala.concurrent.Await import slick.driver.JdbcProfile object DataRowType { class FDADataRow...._ 4 import scala.concurrent.Await 5 import slick.driver.JdbcProfile 6 7 object DataRowType { 8...: 1 import slick.driver.H2Driver.api._ 2 3 import scala.concurrent.duration._ 4 import scala.concurrent.Await
回顾我学习Slick的目的,产生了许多想法,觉着应该从实际的工作应用角度把我对Slick目前能够达到的目的以及在现有功能优势和特点下如何进一步改进才能正真符合IT系统对数据库程序编程和运行效率的要求。...首先谈谈Slick的特点:主体方面Slick为函数式编程模式带来了SQL编程,可以把数据库表当作scala语言中的集合来对待。...一项功能里的所有动作可以在一个事务处理(transaction processing)里进行运算。...是了,Slick把jdbc的resultset隐藏起来了。其目的可以理解:这样可以实现语法安全(type safety),才能把SQL编程融入FP编程,即scala集合编程。...与习惯用的ORM比较,从scala编程表达形式和程序运算方式上都有较大的改善。但以Slick当前所能提供的功能还无法完全满足偏重数据处理(data processing)编程的需要。
所以我们只能从小众心态来探讨如何改善Slick现状,希望通过与某些Stream库集成,在Slick FRM的基础上恢复一些人们熟悉的Recordset数据库光标(cursor)操作方式,希望如此可以降低...现在我们有了Reactive stream source,它是个akka-stream,该如何对接处于下游的scalaz-stream-fs2呢?...enqueue代表akka-stream向scalaz-stream-fs2发送数据,可以用akka-stream的Sink构件来实现: class FS2Gate[T](q: fs2.async.mutable.Queue...qmr.year}") println(s"取值:${qmr.value}") println("-------------") }).run.unsafeRun 通过测试运行...下面是本次示范的源代码: import slick.jdbc.H2Profile.api._ import com.bayakala.funda._ import api._ import scala.language.implicitConversions
数据丢失问题已经成为历史,曾经在网上广为流传的两篇关于MongoDB数据丢失问题(1, 2), 经过分布式系统安全性测试组织JEPSEN最新的测试分析表明,MongoDB 3.4.0已经解决了这些问题。...如何进行 MongoDB 开发 ?...目前有如下三个基于 Scala 开发的 MongoDB 驱动可供选择: Mongo Scala Driver ReactiveMongo Play Mongo Mongo Scala...添加依赖 打开 Play 项目,编辑 build.sbt,添加如下依赖, libraryDependencies += "cn.playscala" % "play-mongo_2.12" % "0.3.0...依赖注入 至此,我们便可以将 Mongo 实例注入到任意需要的地方: @Singleton class Application @Inject()(cc: ControllerComponents, mongo
更好的 Scala 3 支持 Scaladoc 增强 改进的基于编译器的高亮显示 Scala 构建工具改进 Play Framework 更新 其他改进 版本控制系统 编辑器内代码审查 在 *Log*...我们修正了首次使用 Use sbt for builds(为构建使用 sbt)运行 Scala/JVM 应用程序时引发异常的问题,并确保在导入期间将模块的所有传递依赖项作为直接依赖项插入。...现在,IntelliJ IDEA 可以识别重命名工作流,在使用着色 JAR 及其依赖项时提供准确的代码高亮显示和导航。...如果 Bean 通过构造函数自动装配依赖项,则相关字段也会通过构造函数自动装配。...同样,如果依赖项是通过字段或 Lombok 的 @RequiredArgsConstructor 注解注入,则新 Bean 会自动通过字段装配。
斯卡拉 更好的 Scala 3 支持 在新版本中,我们修复了许多与 Scala 3 中如何处理特定语法情况相关的问题。...我们修复了首次使用 Use sbt for builds运行 Scala/JVM 应用程序时引发异常的问题,并且我们确保在导入期间将模块的所有传递依赖项作为直接依赖项插入。...现在,IntelliJ IDEA 可以识别重命名工作流程,在使用着色 JAR 及其依赖项时提供准确的代码突出显示和导航。...如果 bean 通过构造函数自动装配依赖项,则相关字段也会通过构造函数自动装配。...同样,如果通过字段或 Lombok 的注释注入依赖项 @RequiredArgsConstructor,则新 bean 会自动通过字段连接。
Slick 3.x版在功能上的突破之一就是实现了对Reactive-Stream API的支持。...遗憾的是新版的Slick并没有提供针对data-stream的具体操作函数,官方文档提到可以通过akka-stream或者Play-Iteratee-Reactive-Stream来实现对data-stream...Slick是通过db.stream构建一个DatabasePublisher类型来实现Reactive-Stream接口的。...在示范前我们必须在build.sbt中增加依赖:"com.typesafe.play" % "play-iteratees-reactive-streams_2.11" % "2.6.0"。...从上面这些例子中我们可以得出一种“推式”流模式(push-model-stream): 由目标stream向读取方推送数据。
Play框架可以为桌面和移动接口构建轻量级的、web友好的Java和Scala应用程序。...实际上,Play是一个独特的Java框架,因为它不依赖于Java EE标准。相反,它打算消除传统Java web开发的所有不便,比如开发周期缓慢和配置过多。...它打包为一个JAR文件,需要零配置,并且没有任何依赖项。通过提供丰富的组件集(100+)、内置的皮肤框架和预先设计的主题和布局,它允许您为Java应用程序创建用户界面。...Spring框架最初是一个依赖注入工具,但是,多年来,它已经发展成为一个全面的应用程序框架。它为您提供了一个包含所有内容的编程和配置模型,该模型支持通用任务,如建立数据库连接或处理异常。...例如,可以使用Spring插件进行依赖注入,或者使用Hibernate插件进行对象关系映射。
分布式系统 我放弃介绍诸如模块化管理以及依赖注入,是因为它们在Scala社区的价值不如Java社区大。例如,我们可以灵活地运用trait结合cake pattern就可以实现依赖注入的特性。...若硬要使用专有的Web框架,在Scala技术栈下,最为流行的就是Play Framework,这是一个标准的MVC框架。另外一个相对小众的Web框架是Lift。...它与大多数Web框架如RoR、Struts、Django以及Spring MVC、Play不同,采用的并非MVC模式,而是使用了所谓的View First。...若要我选择ScalaTest或Specs2,我更倾向于ScalaTest,这是因为ScalaTest支持的风格更具备多样性,可以满足各种不同的需求,例如传统的JUnit风格、函数式风格以及Spec方式。...一个被广泛使用的测试工具是Gatling,它是基于Scala、AKKA以及Netty开发的性能测试与压力测试工具。
在 Android 应用中,您可以通过遵循依赖项注入的原则,为良好的应用架构奠定基础。这有助于重用代码、易于重构、易于测试!更多关于 DI 的好处,请参阅: Android 中的依赖项注入。.... */ } 注入一个依赖项时,需要在您希望注入的变量上添加 @Inject 注解。super.onCreate 被调用后,所有 Hilt 注入的变量都将可用。...("YHLQMDLG") } } 在本案例中,我们向 PlayActivity 内注入 MusicPlayer,但是 Hilt 是如何知道怎样提供 MusicPlayer 类型的实例呢?...class MusicPlayer @Inject constructor() { fun play(id: String) { ... } } 这就是将依赖项注入到 Activity 中所需的全部内容...当变量被添加 @Inject 注解,并且变量所属的类被添加 @AndroidEntryPoint 注解时,Hilt 会向该类中注入一个相应类型的实例。
加之Def Macros向用户提供的api比较复杂且调用繁琐,其中比较致命的问题就是与scalac的紧密捆绑了:因为Def Macros还只是一项实验性功能,没有scala语言规范文件背书,肯定会面临升级换代...而且scala本身也面临着向2.12版本升级的情况,其中dotty就肯定是scalac的替代编译器。...我在介绍了Slick之后立即转入Scala Macros是有一些特别目的的。...通过测试发现,Scalameta v1.x只支持注释方式。...AST(abstract syntax tree)由编译器运算产生的,因此Macros申明必须先完成编译,所以我们还是沿用了上一篇讨论中的build.sbt,保留项目结构,及demos对macros的这种依赖关系
DI (依赖项注入) 是一种在程序设计中被广泛使用的技术,非常适合 Android 开发,该技术可以将依赖项提供给类,从而让类不必自己创建这些依赖。...通过遵循 DI 原则,您将为良好的应用架构、更高的代码复用性和便捷的测试奠定基础。您是否尝试过在应用中进行手动依赖项注入?...即使使用了当今许多现有的依赖项注入库,随着您的项目越来越大,这些库仍需要大量模板代码,因为您必须手动构造每个类及其依赖项,并创建容器用来复用和管理依赖项。...通过遵循 DI 原则,您将为良好的应用架构、更高的代码复用性和便捷的测试奠定基础。...举个例子,向 LoginActivity 中注入一个 组件架构 ViewMode —— LoginViewModelm: 给 LoginViewModel 增加 @ViewModelInject 注解,
概览 在本文中将介绍 Scala 的 Play Web 开发框架。...我们将会学习如何创建一个 Play 项目,使用开发工具生成我们的第一个项目以及实现自定义的功能,另外还将体验一下 Play 框架的测试能力。...sbt new playframework/play-scala-seed.g8 在依赖信息加载完成后,该工具将提示并要求我们输入新项目的名称和组织信息 This template generates...a Play Scala project name [play-scala-seed]: 我们给这个项目命名为 baeldung-play-framework.。...如何定义一个新的请求 在前面的示例中,我们对代码进行了一些更改,并看到了更改后的结果。现在,让我们看看 Play 框架项目的内部结构,了解它是如何工作的,以及我们还可以做什么。
面向组合编程从AOP的Mixin,然后到Ruby的Traits,直至DCI设计,包括Scala的trait的组合设计,这些都有一个共同特点,组合特性是显式的,也就是说要用专门语法来声明组合。...继承中多态性是通过多个子类继承父类来实现,组合是如何实现?...在Java中如果一个字段是接口,我们需要通过依赖注入或IOC容器将接口的实现子类注入进去,这是我们使用组合方式经常碰到的场景,当然我们一直期待Java能够将依赖注入加入语言机制,从Java9的提前披露设计中我们丝毫看不到这种倾向...,不知道那些参与Java规范设计的人是否经常使用Java开发企业应用,基于JVM的Scala的依赖注入也是如此。...而前面一个例子B是一个实体,可以使用a.B.foo() 因为Go语言自然的语言组合能力,我们不必借助额外依赖注入框架实现组合+注入了,这大概是我初期最为惊讶的。
不管实施的情况如何,至少已经有成形的案例在线上跑。哪我们这些远未达到微服务架构的产品该如何呢,手痒的话就自己动手鼓捣吧,毕经并不是都有那样的环境来运用微服务技术。...Dropwizard与spring boot最大的不同一在于,它帮助你离开对Spring的依赖,当下s、Spring几乎是Java世界的规范,这对于不使用Spring的团队来说算是一个福音,但有多少这样的团队不使用...基础组件对比如下: 注入服务: Weld CDI容器 Web容器: 嵌入式的Undertow(Undertow 是红帽公司(RedHat)的开源产品,是 WildFly8(JBoos) 默认的 Web...makes it easy to build web applications with Java & Scala.Play is based on a lightweight, stateless,...Play是一个开源的现代web框架,用于编写Java和Scala的可扩展Web应用程序。
Maven Maven本身不支持其他JVM语言(例如Groovy或Scala)。要在Maven项目中使用它,需要使用第三方插件。...,因此建议使用Spec附加后缀(从规范中命名)来命名文件,因此需要告诉Surefire 在这些文件中也查找测试: maven-surefire-plugin...最后必须添加依赖项: org.codehaus.groovy...Gradle Gradle具有对Groovy和Scala的内置支持。事不宜迟,Groovy插件只需要应用即可。...apply plugin: 'groovy' 接下来必须添加依赖项: compile 'org.codehaus.groovy:groovy-all:2.4.1'testCompile 'org.spockframework
领取专属 10元无门槛券
手把手带您无忧上云