简洁、高效、灵活:探索 Spring 同级别的编程框架

news2024/12/26 1:00:10

文章目录

  • Grails
  • Micronaut
  • Vert.x
  • Quarkus
  • Play Framework
  • Dropwizard

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

作为一个Java开发者,Spring框架应该基本上都用过的,由于Spring框架太过于强大,导致我们可能只知道Spring框架,但其实还有很多优秀的框架可以供我们使用,本文将介绍6个和spring框架类似的框架。

Grails

Grails

Grails是一个基于Groovy语言的构建在Spring Boot之上的强大的面向JVM的Web应用框架。

Java 领域的许多现代 Web 框架都比需要的要复杂得多,并且不遵守DRY(Don’t Repeat Yourself )原则。
像Rails和Django这样的动态框架为更现代的Web应用程序思维方式铺平了道路。Grails建立在这些概念之上,大大降低了在Java平台上构建Web应用程序的复杂性。然而,它的不同之处在于,它通过构建已经建立的Java技术(如Spring和Hibernate)来实现。

官网:https://grails.org/
GitHub:https://github.com/grails

Grails是一个全栈框架,试图通过核心技术及其相关插件解决尽可能多的Web开发难题。Grails开箱即用的内容包括:

  • GORM : 一个易于使用的对象映射库,支持SQL,MongoDB,Neo4j等。
  • 可以查看呈现HTML和JSON的技术。
  • 基于 Spring Boot 构建的控制器层。
  • 具有数百个插件的插件系统。
  • 可以使用灵活的配置创建 AngularJS、React等程序 。
  • 基于 Gradle 交互式命令行构建系统和环境。
  • 嵌入式Tomcat,可配置动态加载。

以上所有都通过Groovy语言的强大功能和领域特定语言(DSL)的广泛使用而变得易于使用,Grails是构建在Springboot之上的,它利用了Spring的功能,例如依赖注入。

Grails不仅仅是一个Web框架,它由各种子项目组成。下表总结了生态系统中的其他一些关键项目。

项目项目描述
GORM for HibernateSQL 数据库的对象映射实现
GORM for MongoDBMongoDB数据库的对象映射实现
GORM for Neo4jNeo4j图形数据库的对象映射实现
JSON Views用于在服务器端呈现 JSON 的视图技术
Groovy Server Pages用于在服务器上呈现 HTML 和其他标记的视图技术
Async Framework异步编程抽象,支持 RxJava、GPars 等

Micronaut

Micronaut

MicronautGrails框架的创建者开发,并从多年来使用SpringSpring BootGrails构建从单体到微服务的实际应用程序中汲取灵感。Micronaut 是一个轻量级的Java全栈框架,具有低内存占用和快速启动的特点,适用于构建小型、高性能的微服务应用程序。与Spring Boot类似,具有依赖注入、AOP、Web开发和云原生等功能。

官网:https://micronaut.io/
Github:https://github.com/micronaut-projects

Micronaut 旨在提供所有构建微服务应用必要的工具,包括:

  • 依赖注入和控制反转 (IoC)
  • 规范优于配置和自动配置
  • 配置和配置共享
  • 服务发现
  • HTTP 路由
  • HTTP 客户端和客户端的负载均衡

同时,Micronaut 框架旨在通过提供以下功能来避免Spring、Spring Boot和Grails等框架的缺点:

  • 更快的启动时间
  • 降低内存占用
  • 最少使用反射
  • 最少使用代理
  • 易于单元测试
  • 不生成运行时字节码

这是通过在编译时预先计算框架基础结构来实现的,这减少了应用程序工作所需的运行时逻辑。

Vert.x

Vert.x

Vert.x 是一个由Eclipse基金会管理的工具集,用于在JVM上构建响应式应用程序。它是一个工具集,而不是一个框架,所以它可以组合和嵌入到其他框架。

官网:https://vertx.io/
GitHub:https://github.com/eclipse-vertx

Vert.x使用底层I/O库Netty ,它拥有以下特性:

  • 支持多种编程语言:应用程序组件能够以Java、JavaScript、Groovy、Ruby、Scala、Kotlin和Ceylon编写。
  • 简单的并发模型:所有代码都是单线程的,免除了多线程编程的麻烦。
  • 简单的异步编程模型:用于编写真正可扩展的非阻塞应用程序。
  • 跨越客户端和服务器端的分布式事件总线:事件总线甚至可以渗透到浏览器中的JavaScript中,从而可以创建所谓的实时Web应用程序。
  • 角色模型和公共存储库,用于重用并共享组件。
  • 丰富的生态系统:Eclipse Vert.x 堆栈包含用于构建现代端到端反应式服务的模块。从高效的反应式数据库客户端到事件流、消息传递和 Web 堆栈,Eclipse Vert.x 项目涵盖了下图中所有内容:
    Vert.x生态图

Quarkus

Quarkus

传统的Java堆栈是为单体应用设计的,启动时间长,内存需求大,而当时还没有云、容器和Kubernetes的存在。Java框架需要发展以满足这个新世界的需求。
Quarkus的创建是为了使Java开发人员能够为现代的、云原生的世界创建应用程序。Quarkus是一个为GraalVM和HotSpot定制的Kubernetes原生Java框架,由最佳的Java库和标准精心打造。其目标是使Java成为Kubernetes和无服务器环境的领先平台,同时为开发者提供一个框架,以解决更广泛的分布式应用架构问题。

官网:https://quarkus.io/
GitHub:https://github.com/quarkusio

Quarkus特性:

  1. 容器优先:Quarkus为GraalVM和HotSpot定制你的应用程序。令人惊讶的快速启动时间,令人难以置信的低RSS内存(不仅仅是堆的大小!),在Kubernetes等容器协调平台中提供近乎即时的扩展和高密度的内存利用。
  2. 云原生:在 Kubernetes 等环境中采用 12 因素架构。Quarkus和Kubernetes的组合为创建可伸缩、快速和轻量级的应用程序提供了理想的环境。Quarkus通过工具、预构建集成、应用程序服务等显著提高了开发人员的生产率。
  3. 统一命令式和响应式:Quarkus的设计是为了在开发应用程序时将熟悉的指令式和非阻塞的响应式代码无缝结合起来。
  4. 最好的类库和标准:Quarkus提供了一个有凝聚力的、有趣的、全栈式的框架,它利用了各类不断增长的50多个你喜欢和使用的最好的库。所有这些都在一个标准的主干上。基于的框架有RESTEasy 和 JAX-RS、Hibernate ORM 和 JPA、Netty、Eclipse Vert.x、Eclipse MicroProfile、Apache Camel等等。
  5. 微服务优先 :为 Java 应用带来闪电般的快速启动时间和代码周转。
  6. 受开发者喜爱:一个内聚的平台,统一的配置、生成本地可执行文件简单方便。零配置,瞬间重新加载,简化80%的常用代码,灵活处理剩余的20%。

Quarkus性能测试对比图

上图是Quarkus性能测试对比图,可以看到无论是内存占用和响应时间,Quarkus都有很大优势。

Play Framework

Play Framework

Play Framework 是基于一个轻量级的、无状态的、Web 友好的架构。Play 建立在 Akka,Play 提供可预测的和最小的资源消耗(CPU,内存,线程)的高度可扩展的应用程序。

作为一个全栈框架,Play 包含构建 Web 应用程序和 REST 服务所需的所有组件,例如集成的 HTTP 服务器、表单处理、跨站点请求伪造 (CSRF) 保护、强大的路由机制、I18n 支持等的。 Play 可以直接支持日常任务和热重载来节省宝贵的开发时间。

Play 结合了生产力和性能,可以轻松使用 Java 和 Scala 构建可扩展的 Web 应用程序。 借助 Play,应用程序可以通过无状态和非阻塞架构实现可预测的扩展。 Play 默认采用 RESTful,包括资产编译器、JSON 和 WebSocket 支持,非常适合现代 Web 和移动应用程序。

官网:https://www.playframework.com/
GitHub:https://github.com/playframework/playframework

Play Framework 具有以下特点:

  • 简单的开发周期,该框架可自动编译和重新装载已改变的源文件。
  • 智能绑定HTTP参数到Java方法参数。
  • 基于Apache Mina的快速HTTP服务器。
  • 一个基于Groovy的强大的模板引擎,可实现多层继承,定制用户标签等功能。
  • 优秀的错误报告功能:发生异常时,该框架会直接显示出错误的源代码,甚至是模板代码。

Dropwizard

Dropwizard

Dropwizard是一个开源的Java框架,用于开发易于运维、高性能的RESTful网络服务。它由Yammer开发,增强了基于JVM的后端服务,集合了来自Java生态系统中的稳定和成熟的程序库,组成了简单、轻量级的程序包,使得用户可以专注于把事情做好。Dropwizard是开箱即用的,它支持复杂的配置、应用环境、日志和运维工具,使得用户和用户的团队可以在最短的时间内交付一流品质的HTTP+JSON网络服务。

官网:https://www.dropwizard.io/
GitHub:https://github.com/dropwizard/dropwizard

Dropwizard框架的优点:

  1. 快速开发:Dropwizard框架提供了一系列的开箱即用的组件和工具,包括HTTP服务器、JDBC连接池、JSON序列化、API文档生成等,大大简化了Web应用程序的开发过程,开发者可以更加专注于业务逻辑的实现。

  2. 易于扩展:Dropwizard框架基于Jackson、Jersey、Jetty和Hibernate等流行的开源库构建,这些库都是可扩展的。Dropwizard框架可以通过自定义插件和组件来扩展和定制,例如添加新的API端点或将新的服务集成到应用程序中。

  3. 轻量级:与其他Java Web框架相比,Dropwizard框架非常轻量级。它基于Jetty HTTP服务器,使用简单的配置文件和约定,不需要额外复杂的配置,可以快速启动和运行。

  4. 易于部署:Dropwizard框架采用可执行Jar包的形式进行打包和部署,可以轻松地在任何环境中运行,例如本地开发机器、云平台或Docker容器等。

  5. 高可靠性和可维护性:Dropwizard框架通过遵循最佳实践和软件工程原则,提高了Web应用程序的可维护性和可靠性。它支持配置文件集中管理、应用程序监控、异常处理和日志记录等功能,帮助开发者更好地维护和管理应用程序。

这些框架在不同的场景和需求下具有各自的优势和特点,感兴趣的可以自行学习一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1265732.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker容器网络模式

1.none网络 1)使用默认网络模式创建一个BusyBox容器,用于对比none网络模式; 测试网络,可以正常连接外网。 2)再创建一个none网络模式的BusyBox容器; 测试网络连接,无法连接外网。 总结&#x…

C++:C++11新特性---右值引用

文章目录 初始化方式显示查看类型initializer_listdecltype左值引用和右值引用move左右值引用的场景 万能引用和完美转发 本篇总结C11新特性 初始化方式 C11对参数列表的初始化有了更明确的定义,可以这样进行定义 // 列表初始化 void test1() {// 旧版本int x 0…

前端大屏适配几种方案

记录一下前端大屏的几种适配方案。 我们是1920*1080的设计稿。 目录 目录 一、方案一:remfont-size 二、方案二:vw(单位) 三、方案三:scale(缩放)强烈推荐 1、根据宽度比率进行缩放 2、动…

点云凹凸缺陷检测 最高层点云 点云聚类

文章目录 0. 数据说明1. 凹凸缺陷基本内容2. 详细检测思路 结果: 0. 数据说明 如上图所示,需要检测的内容为红色框内标出的缺陷部分。简单示例如下红色线条。 但是,由于噪声的影响,点云的平面度并不好,且横梁边缘处存…

4/150:寻找两个正序数组的中位数⭐

题目:寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 题解1:暴力 暴力思路简介,…

在数据库中进行表内容的修改(MYSQL)

根据表中内容,用命令语句创建数据库,表格,以及插入,修改,删除表格中的内容。 创建数据库:zrzy mysql> create database zrzy; 引用zrzy数据库: mysql> use zrzy; 创建student_info表&…

蓝桥杯day02——移动机器人

1.题目 有一些机器人分布在一条无限长的数轴上,他们初始坐标用一个下标从 0 开始的整数数组 nums 表示。当你给机器人下达命令时,它们以每秒钟一单位的速度开始移动。 给你一个字符串 s ,每个字符按顺序分别表示每个机器人移动的方向。L 表…

随时随地,打开浏览器即可体验的在线PS编辑器

即时设计 即时设计是国产的专业级 UI 设计工具,不限平台不限系统,在浏览器打开即用,能够具备 Photoshop 的设计功能,钢笔、矢量编辑、矩形工具、布尔运算等设计工具一应俱全,是能够在线使用的 Photoshop 免费永久工具…

Redis实战命令

实战命令 单值缓存 set key value get key 对象缓存 (1)set user:1 value(json格式) (2)mset user:1:name junfeng user:1:age 18 mget user:1:name user:1:age 分布式锁 分布式锁解决了什么问题? 分布式锁解…

63 权限提升-Linux脏牛内核漏洞SUID信息收集

目录 演示案例:Linux提权自动化脚本利用-4个脚本Linux提权SUID配合脚本演示-AliyunLinux提权本地配合内核漏洞演示-MozheLinux提权脏牛内核漏洞演示-Aliyun,Vulnhub涉及资源: linux提权相对windows提权方法相对少一些,linux提权方法相对来讲有七八种方式…

WIFI HaLow技术引领智能互联,打破通信限制

在过去十年里,WIFI技术已在家庭和企业中建立起了庞大的网络,连接了数十亿智能互联设备,促进了信息的迅速传递。然而,当前的WIFI标准存在一些挑战,包括协议范围的限制和整体功能的受限,导致在较远距离进行通…

Python开发——工具篇 Pycharm的相关配置,Python相关操作 持续更新

前言 本篇博客是python开发的工具篇相关,介绍pycharm的使用和相关配置,收录python的相关操作,比如如何启动jupyter。 目录 前言引出Pycharmpycharm如何不同等级日志显示不同颜色设置不同pycharm的python环境 Python操作如何启动Jupyter 总结…

SpringBoot : ch11 整合RabbitMQ

前言 在当今的互联网时代,消息队列成为了构建高可靠、高性能系统的重要组件之一。RabbitMQ作为一个可靠、灵活的消息中间件,被广泛应用于各种分布式系统中。 本篇博客将介绍如何使用Spring Boot整合RabbitMQ,实现消息的发送和接收。通过这种…

【测试开发】web自动化测试框架需求设计 !

1、实现目的 基于BS架构,模拟用户(鼠标、键盘)操作,达到快速、重复执行测试用例; 便于回归测试,快速覆盖主线用例或功能; 线上或线下巡检测试,结合持续集成,及时发现运…

万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC

@[toc] 万户协同办公平台ezoffice SendFileCheckTemplateEdit.jsp接口存在SQL注入漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文…

解决electron-builder打包不成功只能输出tgz文件的问题

现象: 对应项目里配的指令: 但就是死活不成功,只能输出tgz压缩文件。 最后一咬牙下载了官方的electron-quick-start拿来试试,结果还是一样。 一时间没想法了。 后来突然脑袋灵光一闪,去他妈的直接npx 执行看看&…

geemap学习笔记016:获取图像的基本属性和描述性信息

前言 遥感数据中通常包含众多信息,例如图像获取的时间、云覆盖量、以及每个波段的最大值最小值等等。 1 导入库并显示地图 import ee import geemapMap geemap.Map() Map2 添加图像数据 centroid ee.Geometry.Point([-122.4439, 37.7538]) #创建一个点坐标lan…

数组filter()方法的使用

输入价格后失去焦点就展示符合条件的商品&#xff0c;没有符合条件的商品就弹框提示 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-…

法线制作神器crazybump 和 Normal Map Generator

UE4系列文章目录 文章目录 UE4系列文章目录前言一、crazybump是什么&#xff1f;二、Normal Map Generator是什么&#xff1f; 前言 我们在使用UE4、UE5制作材质时&#xff0c;经常会遇到使用法线图。使用深度图生成法线图&#xff0c;一般会使用photoShop等软件&#xff0c;对…

07-学成在线修改/查询课程的基本信息和营销信息

修改/查询单个课程信息 界面原型 第一步: 用户进入课程列表查询页面,点击编辑按钮编辑课程的相关信息 第二步: 进入编辑界面显示出当前编辑课程的信息,其中课程营销信息不是必填项,修改成功后会自动进入课程计划编辑页面 查询课程信息 请求/响应数据模型 使用Http Client测…