与鸿蒙同行,Java Solon v3.0 正式发布(向下兼容)

news2024/11/28 4:39:42

与 HarmonyOS NEXT 10月8日公测同行。Solon (开放原子开源基金会,孵化项目) v3.0 正式发布,
且将在 2025 年启动华为编程语言 “仓颉” 版开发(届时会有 Solon-Java 和 Solon-CJ 两大版本)。本次大版本更新,费时多月:

  • 与 Solon v2.9 保持兼容(向下兼容)
  • 与 JDK8, JDK11, JDK17, JDK21, JDK23 保持兼容(全系兼容)

Solon 框架!

Java “新式”应用开发框架,2017~2024。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态

  • 追求: 更快、更小、更简单
  • 提倡: 克制、简洁、高效、开放、生态
  • 官网: https://solon.noear.org

有什么特点?

特点描述
更高的计算性价比并发高 300%;内存省 50%
更快的开发效率代码少;入门快;调试重启快 10 倍
更好的生产与部署体验打包小 90%
更大的兼容范围非 java-ee 架构;同时支持 java8 ~ java23,graalvm native image

更新与兼容详细说明:

1、概述

v3.0 版本主要是,内核删除了 20Kb 的弃用代码及相应的调整。最新内核为 0.3Mb。

  • 移除的配置,要认真检查;
  • 移除的事件,要认真检查;
  • 弃用接口移除等编译时会出错提醒,问题不大。

新增或重构插件有:

  • solon-data-sqlutils(编译大小为 10Kb 的小工具)
  • solon-web-webservices
  • solon-net-stomp
  • nami-channel-http(用于替代 nami-channel-http-okhttp)
  • solon-net-httputils(重构,添加 HttpURLConnection 适配;编译大小为 40Kb)

2、弃用配置移除对应表(要认真检查)

  • 移除
类型移除配置名替代配置名
启动参数solon::
- configconfig.add
应用属性solon::
- solon.configsolon.config.add
  • 弃用
类型弃用配置名替代配置名
应用属性solon-boot::
- server.session.state.domainserver.session.cookieDomain
- server.session.state.domain.autoserver.session.cookieDomainAuto
solon-web-staticfiles::
- solon.staticfiles.maxAgesolon.staticfiles.cacheMaxAge

3、弃用事件移除对应表(要认真检查)

插件移除事件替代方案
solon@Bean bean?getBeanAsync(…class, …) / @Inject ..
@Component bean?getBeanAsync(…class, …) / @Inject ..
solon-serialization-fastjsonFastjsonActionExecutorgetBeanAsync(…class, …) / @Inject ..
FastjsonRenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-serialization-fastjson2Fastjson2ActionExecutorgetBeanAsync(…class, …) / @Inject ..
Fastjson2RenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-serialization-furyFuryActionExecutorgetBeanAsync(…class, …) / @Inject ..
solon-serialization-gsonGsonActionExecutorgetBeanAsync(…class, …) / @Inject ..
GsonRenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-serialization-hessianHessianActionExecutorgetBeanAsync(…class, …) / @Inject ..
solon-serialization-jacksonJacksonActionExecutorgetBeanAsync(…class, …) / @Inject ..
JacksonRenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-serialization-jackson-xmlJacksonXmlActionExecutorgetBeanAsync(…class, …) / @Inject ..
JacksonXmlRenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-serialization-propertiesPropertiesActionExecutorgetBeanAsync(…class, …) / @Inject ..
PropertiesRenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-serialization-protostuffProtostuffActionExecutorgetBeanAsync(…class, …) / @Inject ..
solon-serialization-snack3SnackActionExecutorgetBeanAsync(…class, …) / @Inject ..
SnackRenderFactorygetBeanAsync(…class, …) / @Inject ..
solon-view-beetlGroupTemplategetBeanAsync(BeetlRender.class, …) / @Inject ..
solon-view-enjoyEnginegetBeanAsync(EnjoyRender.class, …) / @Inject ..
solon-view-freemarkerConfigurationgetBeanAsync(FreemarkerRender.class, …) / @Inject ..
solon-view-thymeleafTemplateEnginegetBeanAsync(ThymeleafRender.class, …) / @Inject ..
solon-view-velocityRuntimeInstancegetBeanAsync(VelocityRender.class, …) / @Inject ..

以上事件替代的扩展方案(示例):

@Configuration
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app -> {
            //1.第一时间手动获取(在其它注入前执行)
            app.context().getBeanAsync(Xxx.class, e -> {

            });
        });
    }

    //2.由扫描时自动注入
    @Bean
    public void cfg(Xxx xxx) {

    }
}

什么时候用事件扩展好(尽量不用)?

  • 需要及时扩展,但又不方便进入容器的对象。

4、弃用 Before、After 处理体系移除(编译会有提醒)

影响替代方案
全局方面RouterInterceptor 替代
本地网关方面Filter 替代,或者自己可扩展
注解方面(控制器相关)@Addition(Filter) 替代

其中“本地网关”,可以通过定制恢复旧版能力:https://solon.noear.org/article/214

5、弃用类型移除对应表(编译会有提醒)

插件移除类型替代类型
nami
@Body@NamiBody
NamiBodyAnno
@Mapping@NamiMapping
NamiMappingAnno
solon
@PathVar@Path
@PropertySource@Import
@ProxyComponent@Component
@Before(Handler)@Addition(Filter)
@After(Handler)@Addition(Filter)
Endpoint/
SolonBuilder/
ValHolder/
InitializingBean@Init
NdMapIgnoreCaseMap<Object>
solon-data
Serializercore::Serializer
solon-data-dynamicds
DynamicDsHolderDynamicDsKey
solon-logging
LogUtilToSlf4j/
solon-logging-log4j
SolonCloudAppender/
solon-logging-logback
SolonCloudAppender/
solon-serialization
JsonConvertercore::Converter
StringSerializercore::Serializer<String>
solon-test
@TestPropertySource@Import
@TestRollback@Rollback
AbstractHttpTesterHttpTester
HttpTestBaseHttpTester

6、弃用接口方法移除对应表(编译会有提醒)

调整类移除方法(或字段)替代方法
nami::
- ConstantsCONTENT_TYPE_*
solon::
- ActionParamResolverresolvePathVar()
- ActionDefaultbefore(.)/ 只留 filter 体系
after(.)/
- AppContextbeanOnloaded(.)lifecycle(.)
- Beanregistered()delivered()
- BeanContainergetAttrs()attachment*(.)
beanAround*(.)beanInterceptor*(.)
- ClassUtilnewInstance(.)tryInstance(.)
- ClassWrapgetFieldAllWraps()getFieldWraps()
- Componentregistered()delivered()
- ConditionUtilifMissing(.)ifMissingBean(.)
- Contextip()remoteIp()
param(key,def)paramOrDefault(key,def)
paramSet(.)paramMap().add(.)
paramsMap()paramMap().toValuesMap()
paramsAdd(.)paramMap().add(.)
files(.)fileValues(.)
filesMap()fileMap().toValuesMap()
cookie(key,def)cookieOrDefault(key,def)
header(key,def)headerOrDefault(key,def)
headersMap()headerMap().toValuesMap()
session(key,def)sessionOrDefault(key,def)
statusSet(.)status(.)
attr(key,def)attrOrDefault(key,def)
attrClear()attrsClear()
- DateAnalyzergetGlobal()global()
- EventBuspushAsync()publishAsync()
pushTry()publishTry()
push()publish()
- Gatewaybefore(.)/ 只留 filter 体系
after(.)/
- LifecycleBeanprestop()preStop()
- LogUtildebugAsync()/
infoAsync()/
- MethodHoldergetArounds()getInterceptors()
- MethodWrapgetArounds()getInterceptors()
- MvcFactoryresolveParam(.)resolveActionParam(.)
- NvMap(map)from(map)
getBean(.)toBean(.)
- PropsgetByParse(.)getByTmpl(.)
getXmap(.)getMap(.)
getBean(.)toBean(.)
- RenderManagermapping(.)Solon.app().render(key, )
register(.)Solon.app().render(null, .)
- ResourceUtilremClasspath(.)remSchema(.)
- RoutermatchOne(.)matchMain(.)
- RunUtilsetExecutor(.)setParallelExecutor(.)
- SolonAppbefore(.)/ 只留 filter 体系
after(.)/
- SolonPropssource()app.source()
sourceLocation()app.sourceLocation()
- UtilsTAG_classpath/
resolvePaths(.)/
hasClass(.)ClassUtil.hasClass(.)
loadClass(.)ClassUtil.loadClass(.)
newInstance(.)ClassUtil.tryInstance(.)
getResource*(.)ResourceUtil.getResource*(.)
transferTo*(.)IoUtil.transferTo*(.)
buildExt(.)getFolderAndMake(.)
solon-boot::
- HttpServerConfigureallowSsl(.)enableSsl(.)
solon-data::
- CacheServiceget(key)get(key, type)
solon-scheduling::
- IJobManagersetJobInterceptor(.)addJobInterceptor(.)
solon-serialization-properties::
- PropertiesActionExecutorincludeFormUrlencoded(.)allowPostForm(.)

7、弃用插件移除对应表

其中简化了快捷组合包(发现太多,容易混乱),只留两个基础的:

  • solon-lib(保持不变)
  • solon-web(移除了 solon-view-freemarker)
移除插件替代插件备注
:: cloud
solon.cloud.httputilssolon-net-httputils
:: detector
detector-solon-pluginsolon-health-detector
:: logging
log4j2-solon-pluginsolon-logging-log4j2
logback-solon-pluginsolon-logging-logback
:: scheduling
solon.extend.schedule/
:: testing
solon.testsolon-test
:: web
solon.web.fluxsolon-web-rx
:: shortcuts
solon-apisolon-web
solon-job/改用 solon-lib +
solon-rpc/改用 solon-web +
solon-beetl-web/改用 solon-web +
solon-enjob-web/改用 solon-web +
solon-web-beetl/改用 solon-web +
solon-web-enjoy/改用 solon-web +
solon-cloud-alibaba/改用 solon-web + solon-cloud +
solon-cloud-water/改用 solon-web + solon-cloud +

移除的快捷组合包,可通过以下方式组合:

  • solon-job=
    • solon-lib + solon-scheduling-simple
  • solon-rpc=
    • solon-web + nami-coder-snack3 + nami-channl-http-okhttp
  • solon-beetl-web(或 solon-web-beetl)=
    • solon-web + solon-view-beetl + beetlsql-solon-plugin
  • solon-enjoy-web(或 solon-web-enjoy)=
    • solon-web + solon-view-enjoy + activerecord-solon-plugin
  • solon-cloud-alibaba=
    • solon-web + solon-cloud + nacos-solon-cloud-plugin + rocketmq-solon-cloud-plugin + sentinel-solon-cloud-plugin
  • solon-cloud-water=
    • solon-web + solon-cloud + water-solon-cloud-plugin

8、部分插件名字调整对应表(旧名标为弃用,仍可用)

新的调整按以下插件命名规则执行:

插件命名规则说明
solon-*(由 solon.* 调整而来)表示内部架构插件
*-solon-plugin(保持不变)表示外部适配插件
*-solon-cloud-plugin(保持不变)表过云接口外部适配插件

对应的“旧名”,仍可使用。预计会保留一年左右。具体调整如下:

新名旧名备注
:: nami
nami-channel-http-hutoolnami.channel.http.hutool
nami-channel-http-okhttpnami.channel.http.okhttp
nami-channel-socketdnami.channel.socketd
nami-coder-fastjsonnami.coder.fastjson
nami-coder-fastjson2nami.coder.fastjson2
nami-coder-furynami.coder.fury
nami-coder-hessiannami.coder.hessian
nami-coder-jacksonnami.coder.jackson
nami-coder-protostuffnami.coder.protostuff
nami-coder-snack3nami.coder.snack3
:: base
solon-config-bannersolon.banner
solon-config-yamlsolon.config.yaml
solon-config-plus从原 solon.config.yaml 里拆出来
solon-hotplugsolon.hotplug
solon-i18nsolon.i18n
solon-mvcsolon.mvc
solon-proxysolon.proxy
solon-rx新增
:: boot
solon-boot-jdkhttpsolon.boot.jdkhttp
solon-boot-jetty-add-jspsolon.boot.jetty.add.jsp
solon-boot-jetty-add-websocketsolon.boot.jetty.add.websocket
solon-boot-jettysolon.boot.jetty
solon-boot-jlhttpsolon.boot.jlhttp
solon-boot-smarthttpsolon.boot.smarthttp
solon-boot-socketdsolon.boot.socketd
solon-boot-undertow-add-jspsolon.boot.undertow.add.jsp
solon-boot-undertowsolon.boot.undertow
solon-boot-vertxsolon.boot.vertx
solon-boot-websocket-nettysolon.boot.websocket.netty
solon-boot-websocketsolon.boot.websocket
solon-bootsolon.boot
:: cloud
solon-cloud-eventplussolon.cloud.eventplus
solon-cloud-gatewaysolon.cloud.gateway
solon-cloud-metricssolon.cloud.metrics
solon-cloud-tracingsolon.cloud.tracing
solon-cloudsolon.cloud
:: data
solon-cache-caffeinesolon.cache.caffeine
solon-cache-jedissolon.cache.jedis
solon-cache-redissonsolon.cache.redisson
solon-cache-spymemcachedsolon.cache.spymemcached
solon-data-dynamicdssolon.data.dynamicds
solon-data-shardingdssolon.data.shardingds
solon-datasolon.data
:: detector
solon-health-detectorsolon.health.detector
solon-healthsolon.health
:: docs
solon-docs-openapi2solon.docs.openapi2
solon-docs-openapi3
solon-docssolon.docs
:: faas
solon-faas-luffysolon.luffy
:: logging
solon-logging-log4j2solon.logging.log4j2
solon-logging-logbacksolon.logging.logback
solon-logging-simplesolon.logging.simple
solon-loggingsolon.logging
:: native
solon-aotsolon.aot
::net
solon-net-httputilssolon.net.httputils
solon-net-stomp
solon-netsolon.net
:: scheduling
solon-scheduling-quartzsolon.scheduling.quartz
solon-scheduling-simplesolon.scheduling.simple
solon-schedulingsolon.scheduling
:: security
solon-security-authsolon.auth旧名弃用
solon-security-validationsolon.validation旧名弃用
solon-security-vaultsolon.vault旧名弃用
solon-security-authsolon.security.auth
solon-security-validationsolon.security.validation
solon-security-vaultsolon.security.vault
:: serialization
solon-serializationsolon.serialization
solon-serialization-fastjsonsolon.serialization.fastjson
solon-serialization-fastjson2solon.serialization.fastjson2
solon-serialization-furysolon.serialization.fury
solon-serialization-gsonsolon.serialization.gson
solon-serialization-hessiansolon.serialization.hessian
solon-serialization-jacksonsolon.serialization.jackson
solon-serialization-jackson-xmlsolon.serialization.jackson.xml
solon-serialization-kryo略过(未发布)
solon-serialization-propertiessolon.serialization.properties
solon-serialization-protostuffsolon.serialization.protostuff
solon-serialization-snack3solon.serialization.snack3
:: view
solon-viewsolon.view
solon-view-beetlsolon.view.beetl
solon-view-enjoysolon.view.enjoy
solon-view-freemarkersolon.view.freemarker
solon-view-jspsolon.view.jsp
solon-view-jsp-jakarta略过(未发布)
solon-view-thymeleafsolon.view.thymeleaf
solon-view-velocitysolon.view.velocity
:: web
solon-sessionstate-jedissolon.sessionstate.jedis
solon-sessionstate-jwtsolon.sessionstate.jwt
solon-sessionstate-localsolon.sessionstate.local
solon-sessionstate-redissonsolon.sessionstate.redisson
solon-web-corssolon.web.cors
solon-web-rxsolon.web.rx
solon-web-sdlsolon.web.sdl
solon-web-servletsolon.web.servlet
solon-web-servlet-jakartasolon.web.servlet.jakarta
solon-web-ssesolon.web.sse
solon-web-staticfilessolon.web.staticfiles
solon-web-stopsolon.web.stop
solon-web-webdavsolon.web.webdav

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

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

相关文章

离散数学概述

离散数学概述 离散数学&#xff08;Discrete Mathematics&#xff09;是计算机科学、信息科学、数学等领域的基础学科之一。与连续数学&#xff08;如微积分&#xff09;不同&#xff0c;离散数学主要研究离散对象&#xff0c;如整数、图、逻辑公式等。在大学的课程中&#xf…

大学的离散数学:探索数学的逻辑之美

大学的离散数学&#xff1a;探索数学的逻辑之美 离散数学&#xff0c;作为数学的一个分支&#xff0c;它研究的是离散而非连续的对象。在大学课程中&#xff0c;离散数学是计算机科学、信息科学、电子工程等专业的重要基础课程。它不仅为学生提供了必要的数学工具&#xff0c;…

qt打包程序后运行提示缺少dll文件(使用官方打包程序)

qt打包程序后运行提示缺少dll文件(使用官方打包程序) 当使用Qt完成程序打包后&#xff0c;把程序生成的文件全部复制到另外的一台没有Qt开发环境的电脑上&#xff0c;双击运行.exe可执行程序&#xff0c;提示缺少一系列的.dll程序。 提示找不到 libstdc-6.dll libwinpthread-1…

算法.图论-bfs及其拓展

文章目录 广度优先搜索简介经典bfs习题地图分析贴纸拼词 01bfs解析基本过程相关习题 广度优先搜索简介 bfs的特点是逐层扩散, 从源头到目标点扩散了几层, 最短路就是多少 bfs的使用特征是任意两个节点的距离(权值)是相同的(无向图, 矩阵天然满足这一特点) bfs开始的时候可以是…

高性能缓存方案 —— Caffeine

一、简介 Caffeine是一个高性能的Java缓存库&#xff0c;它提供了本地缓存的功能。 Caffeine和Redis都是内存级别的缓存&#xff0c;为什么要使用在这两缓存作为二级缓存&#xff0c;它们两有什么区别呢? 虽然它们都是内存级别的缓存&#xff0c;但是Redis是需要单独部署的&…

DAY42WEB 攻防-PHP 应用MYSQL 架构SQL 注入跨库查询文件读写权限操作

一、PHP-MYSQL-SQL注入-常规查询 1.PHP-MYSQL-Web组成架构 MySQL(统一管理) ​ root&#xff08;自带默认&#xff09; ​ 网站A testA ​ 网站B testB MySQL(一对一管理) ​ testA用户 ​ 网站A testA ​ testB用户 ​ 网站B testB access无数据库用户 mysql里面有内置的管理…

使用 Stata 调用本地部署的大语言模型进行文本主要内容提取——历年政府工作报告中的经济增长目标提取

因此今天给大家分享一个新的方法。也就是通过部署在本地的大模型进行文本内容提取。 安装 Ollama 通过 Ollama 可以快速在本地部署一些常用的大模型。可以根据自己的系统从这里安装下载&#xff1a;https://github.com/ollama/ollama MacOS 下载 Ollama 链接: https://ollama…

计算机的错误计算(一百一十八)

摘要 探讨一个不动点的计算精度问题。 不动点是一类特殊的循环迭代。它有形式 例1. 已知迭代[1] 计算 显然&#xff0c;每个 均为 0.5 . 不妨在Visual Studio 2010 下用下列C语言代码计算&#xff1a; #include <stdio.h> #include <math.h>int main() {do…

Mac上功能全面,免费好用的解压缩工具

在日常使用Mac的过程中&#xff0c;相信不少朋友都有解压缩需求&#xff0c;目前存在的解压缩软件可以说各种各样&#xff0c;但是有的收费&#xff0c;有的解压速度慢&#xff0c;有的解压类型不全&#xff0c;各有优缺点&#xff0c;挑选起来眼花缭乱&#xff0c;挑来挑去也没…

西安凭借入驻企业展示科技“硬”实力的数字媒体产业园

在古城西安的怀抱中&#xff0c;一座以科技“硬”实力为核心竞争力的数字媒体产业园——西安国际数字影像产业园&#xff0c;正以其独特的魅力和无限的潜力&#xff0c;吸引着全球的目光。这里&#xff0c;不仅是数字创意的孵化场&#xff0c;更是科技创新的策源地。 西安国际数…

STM32 HAL库

1. 相关概念 1.1. 回调函数 Callback()回调函数与普通函数的本质区别在于调用者不同&#xff1a;普通函数由用户代码调用&#xff0c;而回调函数则是由系统在适当的条件下调用。回调函数用于对各种事件的响应和处理&#xff0c;如当指定的EXTI线上发生中断或事件时&#xff0…

windows基于MediaPipe 和 TensorFlow.js的3D手势检测

目录 流程总结 第一步&#xff1a;安装 Node.js 和 Yarn 1.安装 Node.js&#xff1a; 1.1 如果安装了其他版本不合适&#xff0c;可以安装调整nvm-setup.exe来调整 2.安装 Yarn&#xff1a; 第二步&#xff1a;克隆项目仓库 第三步&#xff1a;替换共享文件 1.删除旧的…

Java基本数据类型和String类型的转换

1.基本介绍 在程序开发中&#xff0c;我们经常需要将基本数据类型转换成String类型。或者将String类型转为基本数据类型。 2.基本类型转String类型 语法&#xff1a;将 基本数据类型的值 “” 即可 3.String类型转基本数据类型 语法&#xff1a;通过基本类型的包装类调用…

Web3与传统互联网的比较:机遇与挑战

随着科技的不断进步&#xff0c;Web3作为新一代互联网的概念逐渐浮出水面&#xff0c;改变了我们对网络的认知。相较于传统互联网&#xff0c;Web3在许多方面展现出不同的特征与潜力。本文将对Web3与传统互联网进行比较&#xff0c;探讨其带来的机遇与挑战。 一、核心概念的差异…

MySQL启动失败解决方案

目录 引言 一、查看/启动mysql服务的两种方式 方法一&#xff1a; 方法二&#xff1a; 二、修改mysql服务启动路径的地址 三、"my.ini"文件的使用 设置my.ini文件的路径 给出一个使用my.ini文件的小例子 引言 造成启动闪退\失败的原因我仅仅以个人查询的一下博…

Note24100901_Portal_V18_Advanced5_Modscan的Modbus仿真

Note24100901_Portal_V18_Advanced5_Modscan 的Modbus TCP/IP仿真 具体过程详见如下图片&#xff1a;![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8d85098268484044b2816d8a78c031f4.png#pic_center 以上~

搭建企业域名服务器案例

任务要求&#xff1a; 某企业要建立一台应用于以下情况的主域名服务器 拥有一个C类网段地址&#xff0c;为202.101.55.0。企业域名注册为company.com。域名服务器的IP地址定位为202.101.55.55&#xff0c;主机名为dns.company.com。企业网通过路由器与Internet连接。要解析的…

Ultralytics YOLO V11 初体验—训练COCO数据集—全流程记录

Utralytics YOLO V11&#x1f680; 之后做项目要用到YOLO&#xff0c;然后也是趁着这个机会捡一下YOLO的相关的知识&#xff0c;这篇博客记录一下&#xff0c;配置Utralytics建立一个训练YOLO的环境&#xff0c;然后使用官方提供的COCO.yaml文件进行自动下载和训练的完整过程&a…

springboot简单案例

必答[简答题]从页面输入年龄&#xff0c;输入的年龄在1-200之间为正常&#xff0c;其余定义为异常&#xff0c;并把年龄结果显示在页面上&#xff0c;同时给出判断(正常输出“年龄是XX岁“;若年龄大于200或小于0&#xff0c;输出自定义异常”年龄输入不正确“;其他显示异常情况…

从0到1:多服务厅预约小程序开发笔记(上)

需求调研 多服务厅预约小程序&#xff1a;随着信息技术的快速发展和移动互联网的普及&#xff0c;越来越多的服务行业开始向线上转型, 传统的预约方式往往效率低下&#xff0c;用户需耗费大量时间进行电话预约或现场排队&#xff0c;服务厅预约小程序集多种服务于一体&#xf…