探路jooby

在Web Framework Benchmarks Round 16 里发现一个厉害玩意

各大框架性能对比

Multiple queries这一项排第六哦
其他各项的表现也非常不错, 于是打开了官网
jooby官网

  • Simple and effective programming model for building small and large scale web applications
  • Built with developer productivity in mind
  • Plain Java DSL for routes (no xml, or similar)
  • Reflection, annotations and dependency injection are kept to a minimum and in some cases is completely optional
  • No classpath hell, the default deployment model uses a normal JVM bootstrap
  • Modules are easy to use and do as little as possible

Jooby keeps it simple yet powerful.

吸引到我了, 一直很想用node那种方式写java web server!
看看GitHub
描述写着A modular micro web framework for Java and Kotlin
哈哈哈哈我爱kotlin, 走一个

  • git clone kotlin-gradle-starter这个项目下来
  • IDEA打开项目, 然后就是让gradle飞一会儿
  • build好了之后, 运行App.kt里面的main方法


    App.kt

    console

    不错, 启动挺快的, 这是访问结果


    Edge

行吧, 再来个helloworld
Kobby这个类是专为Kotlin写的, Java的话是继承的Jooby


App.kt

再走一个


console

Edge

Postman

看到没, 就是这么easy


接下来再回头看看这几个写法
github导下来的项目是这样的

class App : Kooby({
    get {
        val name = param("name").value("Kotlin")
        "Hello $name!"
    }
})

看起来就很先进啊, 直接在父类的构造方法里面传入get路由,点进去看看

constructor(init: Kooby.() -> Unit): this() {
    this.init()
}

次构造方法里面接受一个init, init的入参是Kobby类中的方法, 没有返回值
好吧我kotlin的火候还不够, 也是第一次见这种写法
好处就是我们可以在Kooby的构造器里面直接写对应的路由了, 像这样

class App : Kooby({
    get ("/hello") {"Hello world"}
    post ("/hello"){ "Hello there" }
})

看看Jooby中定义的这两个方法

fun get(pattern: String = "/", init: Request.() -> Any): Route.Definition {
  return get(pattern, {req-> req.init()})
}

fun post(pattern: String = "/", init: Request.() -> Any): Route.Definition {
  return post(pattern, {req-> req.init()})
}

都是接受两个参数, 一个pattern, 一个处理器, kotlin里面方法的最后一个参数是lambda时可以将lambda写到括号外面, 只有一个参数的话就可以去掉()了, 像官方demo的那个get{}一样

也可以自己写路由, 然后在App里引用

package starter.kotlin

import org.jooby.mvc.GET
import org.jooby.mvc.Path

@Path("/router")
class Router {
    @GET
    fun salute(): String {
        return "Hey , this is a router"
    }
}

然后是App.kt里面

class App : Kooby({
    use(Router::class)
})

这样就可以了, 写法真的神似node啊


console

Edge

今天就到这里了, 先埋个坑, 得闲做个不太具备参考意义的hellowold对比测试, 对比一下node, springmvc, webflux和jooby的性能(不知道何年何月)

你可能感兴趣的:(探路jooby)