scalatra隐式request
在之前scala之隐式servletContext这篇文章中,我们提到了scalatra实现的隐式servletContext是如何实现的,那今天我们来看看在scalatra中是如何利用scala的特性来实现隐式HttpServletRequest的:
ScalatraBase
在ScalatraBase这个伴生对象中,我们可以看到如下代码:
1 | private[this] val KeyPrefix: String = classOf[FutureSupport].getName |
ServletApiImplicits
这边的request(Callbacks)到底是啥呢?我们来结合scala的隐式调用来分析
ScalatraBase中引入了ServletApiImplicits
1 | import org.scalatra.servlet.ServletApiImplicits._ |
1 | //隐式的ServletApi |
那说明实现是在RichRequest中
RichRequest
1 | case class RichRequest(r: HttpServletRequest) extends AttributesMap { |
我们看到它还实现了AttributesMap这个trait
AttributesMap
1 |
|
我们看到他最终是继承自Map的,所以request()是Map调用。