超轻量级框架 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 版本》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

JavaScript RIA开发实战

JavaScript RIA开发实战

(英)Dennis Odell / 张立浩 / 清华大学出版社 / 2010 / 48.00元

本书介绍如何采用最合理的方式为RIA编写可靠的、易于维护的HTML、CSS和JavaScript代码,以及如何使用Ajax技术在后台实现浏览器与Web服务器的动态通信。本书将介绍您在构建Web应用程序时可能遇到的性能限制,以及如何以最佳的方式克服这些限制。此外,本书提供的提示可以使用户界面响应更加灵敏。 本书也将介绍如何通过添加使用自定义字体的印刷标题、多媒体回放组件、自定义窗体控件和动态绘......一起来看看 《JavaScript RIA开发实战》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码