超轻量级框架 Next 发布 3.0.0.0-DEBUG 版本

栏目: 软件资讯 · 发布时间: 3年前

内容简介:Cloudopt Next 是一个非常轻量级且现代的、基于 Kotlin 编写的全栈开发框架,同时支持 Java 和 Kotlin,您可以处理Url的解析,数据的封装,Json的输出等等,从根本上减少开发时间、提升开发体验。 Cloudopt Next ...

Cloudopt Next 是一个非常轻量级且现代的、基于 Kotlin 编写的全栈开发框架,同时支持 Java 和 Kotlin,您可以处理Url的解析,数据的封装,Json的输出等等,从根本上减少开发时间、提升开发体验。

Cloudopt Next 主要拥有以下特点:

简单 极简设计,几乎不要任何配置,不依赖 Tomcat、Jetty 等 Web 容器。

异步 基于 vertx 轻松实现高性能的异步服务。

扩展 支持 vertx 体系的各种组件,同时支持通过插件扩展功能,官方也提供了大量好用的插件。

中文 全中文文档、中文社区,帮助中文开发者快速上手。

最新版本

目前 3.0.0.0 在开发阶段,你可以直接修改 Maven 配置或 Gradle 中的依赖版本号为以下版本号即可体验最新功能。

3.0.0.0-DEBUG

依赖升级

在 3.0.0.0 中对一些基础依赖进行了全面升级, JDK 升级到 11、Vertx 升级到 4.0.0、Kotlin 升级到 1.4.0。

反射重构

对使用 Java 的开发者来说影响不大,主要是提升了 Kotlin 开发者的开发体验。

在新版中,对大部分的反射、扫描注解进行了重构。原本是使用 Java 原生的反射操作,现在全部改为了 Kotlin 原生的反射操作。改为 Kotlin 原生语法后对 Kotlin 的基础类型的支持更加友好、也避免了 Kotlin 类转回 Java 类的开销。

Classer 工具类中也进行了大量的修改,原本对指定包扫描出的 Class 都改为了 扫描出 KClass。

ClassLoader::class.java.classLoader.loadClass(className)
ClassLoader::class.java.classLoader.loadClass(className).kotlin

原本是通过 Beanner.newInstance 对扫描的类进行初始化(工具类暂未移除,建议不再使用),现在不再需要了,直接通过 KClass 中的原生方法创建实例。

handlers.add(Beaner.newInstance(clazz))  
handlers.add(clazz.createInstance() as Handler)

获取注解也不再需要额外的判断是否为 null,现在会直接通过 findAnnotation 获取到注解。

val websocketAnnotation: WebSocket = clazz.getDeclaredAnnotation(WebSocket::class.java)
val websocketAnnotation: WebSocket? = clazz.findAnnotation<WebSocket>()

判断注解是否存在,也改为了 Kotlin 原生语法。

m.getAnnotation(AfterEvent::class.java) != null
resourceTable.clazzMethod.hasAnnotation<AfterEvent>()

我们还对请求进入时调用路由方法进行了优化,原本时先需要拿到路由方法所在的类再通过方法名反射操作,现在是再扫描时就会保存 KFunction,直接调用使用。

resourceTable.clazzMethod.callBy(arr)

对路由方法参数注入上也进行了优化,原本是每一次获取参数注入的时候会创建一次 Json 对象,现在是每一次请求只创建一次,有效减少了开销。

getParaByType(para.getAnnotation(Parameter::class.java).value, para, controllerObj)?.let { arr.add(it)}

val jsonObject:JSONObject = JSONObject.toJSON(controllerObj.getParams()) as JSONObject
getParaByType(para.findAnnotation<Parameter>()?.value, para, jsonObject)?.let { arr.put(para,it) }

其次是在注入处理之前就已经保存了 Parameter 类,不再需要在注入参数时重新获取参数的类型了。以及 @Parameter 注解中的 value 不再是必填项,如果不填会自动使用变量名称。

JsonProvider 接口也进行了修改,将原本参数类型为 Class 的都改为了 KClass。DefaultJSONProvider 、Jsoner 也进行了同样的修改。

fun toObject(jsonString: String, clazz: Class<*>): Any

fun toObject(jsonString: String, clazz: KClass<*>): Any

WebSocket 更新

请使用以下新的用法。现在支持更优雅的用法,只需要继承 WebSocketResource 并实现相应的方法即可。

@WebSocket("/websocket")
class WebSocketHandler : WebSocketResource {
    override fun onConnectionSuccess(websocket: ServerWebSocket) {
        websocket.writeTextMessage("Connection successful!") {
            println("The event of after write.")
        }
        val buffer: Buffer = Buffer.buffer().appendInt(123).appendFloat(1.23f)
        websocket.writeBinaryMessage(buffer) {
            println("The event of after write binary.")
        }
    }

    override fun onConnectionFailure(throwable: Throwable) {

    }

    override fun onConnectionComplete(websocket: ServerWebSocket) {

    }

    override fun onFrameMessage(frame: WebSocketFrame, websocket: ServerWebSocket) {
        println(frame.textData())
        websocket.writeTextMessage("This is the message from the server!")
    }

    override fun onTextMessage(message: String, websocket: ServerWebSocket) {
        println(message)
        websocket.writeTextMessage("This is the message from the server!")
    }

    override fun onBinaryMessage(buffer: Buffer, websocket: ServerWebSocket) {

    }

    override fun onPingPong(buffer: Buffer, websocket: ServerWebSocket) {
        println("Pong...")
    }

    override fun onException(throwable: Throwable, websocket: ServerWebSocket) {
        throwable.printStackTrace()
        if (!websocket.isClosed) {
            websocket.close()
        }
    }

    override fun onDrain(websocket: ServerWebSocket) {

    }

    override fun onEnd(websocket: ServerWebSocket) {
        println("Connection was closed.")
    }


}

Redis 插件

原本实现的异步的 redis 插件正式从 redis 包中去除,之后可能会出一个专门供异步使用的 redis 插件。


以上所述就是小编给大家介绍的《超轻量级框架 Next 发布 3.0.0.0-DEBUG 版本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

痛点

痛点

马丁·林斯特龙 / 陈亚萍 / 中信出版集团股份有限公司 / 2017-4-1 / CNY 49.00

互联网经济迅猛发展,大数据成为分析用户需求的一种惯性路径。世界首席品牌营销专家林斯特龙则指出,大数据连接了千百万的数据点,可以准确地产生相互关系。但是,当人类按照自己的习惯行动时,大数据分析通常不会十分准确。所以挖掘用户需求时,在大数据之外,更重要的是通过对一个小群体的亲身观察和小数据常识,捕捉到这个社会群体所体现出的文化欲望。满足这些用户需求,击中痛点,则意味着将掌握无限的商机。一起来看看 《痛点》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具