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


与 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::    
  - config   config.add
应用属性 solon::    
  - solon.config   solon.config.add
  • 弃用
类型 弃用配置名   替代配置名
应用属性 solon-boot::    
  - server.session.state.domain   server.session.cookieDomain
  - server.session.state.domain.auto   server.session.cookieDomainAuto
  solon-web-staticfiles::    
  - solon.staticfiles.maxAge   solon.staticfiles.cacheMaxAge

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

插件 移除事件   替代方案
solon @Bean bean?   getBeanAsync(..class, ..) / @Inject ..
  @Component bean?   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-fastjson FastjsonActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  FastjsonRenderFactory   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-fastjson2 Fastjson2ActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  Fastjson2RenderFactory   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-fury FuryActionExecutor   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-gson GsonActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  GsonRenderFactory   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-hessian HessianActionExecutor   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-jackson JacksonActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  JacksonRenderFactory   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-jackson-xml JacksonXmlActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  JacksonXmlRenderFactory   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-properties PropertiesActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  PropertiesRenderFactory   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-protostuff ProtostuffActionExecutor   getBeanAsync(..class, ..) / @Inject ..
solon-serialization-snack3 SnackActionExecutor   getBeanAsync(..class, ..) / @Inject ..
  SnackRenderFactory   getBeanAsync(..class, ..) / @Inject ..
       
solon-view-beetl GroupTemplate   getBeanAsync(BeetlRender.class, ..) / @Inject ..
solon-view-enjoy Engine   getBeanAsync(EnjoyRender.class, ..) / @Inject ..
solon-view-freemarker Configuration   getBeanAsync(FreemarkerRender.class, ..) / @Inject ..
solon-view-thymeleaf TemplateEngine   getBeanAsync(ThymeleafRender.class, ..) / @Inject ..
solon-view-velocity RuntimeInstance   getBeanAsync(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
  NdMap   IgnoreCaseMap<Object>
solon-data      
  Serializer   core::Serializer
solon-data-dynamicds      
  DynamicDsHolder   DynamicDsKey
solon-logging      
  LogUtilToSlf4j   /
solon-logging-log4j      
  SolonCloudAppender   /
solon-logging-logback      
  SolonCloudAppender   /
solon-serialization      
  JsonConverter   core::Converter
  StringSerializer   core::Serializer<String>
solon-test      
  @TestPropertySource   @Import
  @TestRollback   @Rollback
  AbstractHttpTester   HttpTester
  HttpTestBase   HttpTester

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

调整类 移除方法(或字段)   替代方法
nami::      
- Constants CONTENT_TYPE_*    
solon::      
- ActionParamResolver resolvePathVar()    
- ActionDefault before(.)   / 只留 filter 体系
  after(.)   /
- AppContext beanOnloaded(.)   lifecycle(.)
- Bean registered()   delivered()
- BeanContainer getAttrs()   attachment*(.)
  beanAround*(.)   beanInterceptor*(.)
- ClassUtil newInstance(.)   tryInstance(.)
- ClassWrap getFieldAllWraps()   getFieldWraps()
- Component registered()   delivered()
- ConditionUtil ifMissing(.)   ifMissingBean(.)
- Context ip()   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()
- DateAnalyzer getGlobal()   global()
- EventBus pushAsync()   publishAsync()
  pushTry()   publishTry()
  push()   publish()
- Gateway before(.)   / 只留 filter 体系
  after(.)   /
- LifecycleBean prestop()   preStop()
- LogUtil debugAsync()   /
  infoAsync()   /
- MethodHolder getArounds()   getInterceptors()
- MethodWrap getArounds()   getInterceptors()
- MvcFactory resolveParam(.)   resolveActionParam(.)
- NvMap (map)   from(map)
  getBean(.)   toBean(.)
- Props getByParse(.)   getByTmpl(.)
  getXmap(.)   getMap(.)
  getBean(.)   toBean(.)
- RenderManager mapping(.)   Solon.app().render(key, )
  register(.)   Solon.app().render(null, .)
- ResourceUtil remClasspath(.)   remSchema(.)
- Router matchOne(.)   matchMain(.)
- RunUtil setExecutor(.)   setParallelExecutor(.)
- SolonApp before(.)   / 只留 filter 体系
  after(.)   /
- SolonProps source()   app.source()
  sourceLocation()   app.sourceLocation()
- Utils TAG_classpath   /
  resolvePaths(.)   /
  hasClass(.)   ClassUtil.hasClass(.)
  loadClass(.)   ClassUtil.loadClass(.)
  newInstance(.)   ClassUtil.tryInstance(.)
  getResource*(.)   ResourceUtil.getResource*(.)
  transferTo*(.)   IoUtil.transferTo*(.)
  buildExt(.)   getFolderAndMake(.)
solon-boot::      
- HttpServerConfigure allowSsl(.)   enableSsl(.)
solon-data::      
- CacheService get(key)   get(key, type)
solon-scheduling::      
- IJobManager setJobInterceptor(.)   addJobInterceptor(.)
solon-serialization-properties::      
- PropertiesActionExecutor includeFormUrlencoded(.)   allowPostForm(.)

7、弃用插件移除对应表

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

  • solon-lib(保持不变)
  • solon-web(移除了 solon-view-freemarker)
移除插件 替代插件 备注
:: cloud    
solon.cloud.httputils solon-net-httputils  
:: detector    
detector-solon-plugin solon-health-detector  
:: logging    
log4j2-solon-plugin solon-logging-log4j2  
logback-solon-plugin solon-logging-logback  
:: scheduling    
solon.extend.schedule /  
:: testing    
solon.test solon-test  
:: web    
solon.web.flux solon-web-rx  
:: shortcuts    
solon-api solon-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-hutool nami.channel.http.hutool  
nami-channel-http-okhttp nami.channel.http.okhttp  
nami-channel-socketd nami.channel.socketd  
nami-coder-fastjson nami.coder.fastjson  
nami-coder-fastjson2 nami.coder.fastjson2  
nami-coder-fury nami.coder.fury  
nami-coder-hessian nami.coder.hessian  
nami-coder-jackson nami.coder.jackson  
nami-coder-protostuff nami.coder.protostuff  
nami-coder-snack3 nami.coder.snack3  
:: base    
solon-config-banner solon.banner  
solon-config-yaml solon.config.yaml  
solon-config-plus   从原 solon.config.yaml 里拆出来
solon-hotplug solon.hotplug  
solon-i18n solon.i18n  
solon-mvc solon.mvc  
solon-proxy solon.proxy  
solon-rx   新增
:: boot    
solon-boot-jdkhttp solon.boot.jdkhttp  
solon-boot-jetty-add-jsp solon.boot.jetty.add.jsp  
solon-boot-jetty-add-websocket solon.boot.jetty.add.websocket  
solon-boot-jetty solon.boot.jetty  
solon-boot-jlhttp solon.boot.jlhttp  
solon-boot-smarthttp solon.boot.smarthttp  
solon-boot-socketd solon.boot.socketd  
solon-boot-undertow-add-jsp solon.boot.undertow.add.jsp  
solon-boot-undertow solon.boot.undertow  
solon-boot-vertx solon.boot.vertx  
solon-boot-websocket-netty solon.boot.websocket.netty  
solon-boot-websocket solon.boot.websocket  
solon-boot solon.boot  
:: cloud    
solon-cloud-eventplus solon.cloud.eventplus  
solon-cloud-gateway solon.cloud.gateway  
solon-cloud-metrics solon.cloud.metrics  
solon-cloud-tracing solon.cloud.tracing  
solon-cloud solon.cloud  
:: data    
solon-cache-caffeine solon.cache.caffeine  
solon-cache-jedis solon.cache.jedis  
solon-cache-redisson solon.cache.redisson  
solon-cache-spymemcached solon.cache.spymemcached  
solon-data-dynamicds solon.data.dynamicds  
solon-data-shardingds solon.data.shardingds  
solon-data solon.data  
:: detector    
solon-health-detector solon.health.detector  
solon-health solon.health  
:: docs    
solon-docs-openapi2 solon.docs.openapi2  
solon-docs-openapi3    
solon-docs solon.docs  
:: faas    
solon-faas-luffy solon.luffy  
:: logging    
solon-logging-log4j2 solon.logging.log4j2  
solon-logging-logback solon.logging.logback  
solon-logging-simple solon.logging.simple  
solon-logging solon.logging  
:: native    
solon-aot solon.aot  
::net    
solon-net-httputils solon.net.httputils  
solon-net-stomp    
solon-net solon.net  
:: scheduling    
solon-scheduling-quartz solon.scheduling.quartz  
solon-scheduling-simple solon.scheduling.simple  
solon-scheduling solon.scheduling  
:: security    
solon-security-auth solon.auth 旧名弃用
solon-security-validation solon.validation 旧名弃用
solon-security-vault solon.vault 旧名弃用
solon-security-auth solon.security.auth  
solon-security-validation solon.security.validation  
solon-security-vault solon.security.vault  
:: serialization    
solon-serialization solon.serialization  
solon-serialization-fastjson solon.serialization.fastjson  
solon-serialization-fastjson2 solon.serialization.fastjson2  
solon-serialization-fury solon.serialization.fury  
solon-serialization-gson solon.serialization.gson  
solon-serialization-hessian solon.serialization.hessian  
solon-serialization-jackson solon.serialization.jackson  
solon-serialization-jackson-xml solon.serialization.jackson.xml  
solon-serialization-kryo   略过(未发布)
solon-serialization-properties solon.serialization.properties  
solon-serialization-protostuff solon.serialization.protostuff  
solon-serialization-snack3 solon.serialization.snack3  
:: view    
solon-view solon.view  
solon-view-beetl solon.view.beetl  
solon-view-enjoy solon.view.enjoy  
solon-view-freemarker solon.view.freemarker  
solon-view-jsp solon.view.jsp  
solon-view-jsp-jakarta   略过(未发布)
solon-view-thymeleaf solon.view.thymeleaf  
solon-view-velocity solon.view.velocity  
:: web    
solon-sessionstate-jedis solon.sessionstate.jedis  
solon-sessionstate-jwt solon.sessionstate.jwt  
solon-sessionstate-local solon.sessionstate.local  
solon-sessionstate-redisson solon.sessionstate.redisson  
solon-web-cors solon.web.cors  
solon-web-rx solon.web.rx  
solon-web-sdl solon.web.sdl  
solon-web-servlet solon.web.servlet  
solon-web-servlet-jakarta solon.web.servlet.jakarta  
solon-web-sse solon.web.sse  
solon-web-staticfiles solon.web.staticfiles  
solon-web-stop solon.web.stop  
solon-web-webdav solon.web.webdav

相關推薦

2024-09-27

开放原子开源基金会,孵化项目)原计划10月1日发布 v3.0 正式版。看到 HarmonyOS NEXT 将在 10月8日启用公测,现改为10月8日发布以示庆贺。另外,Solon 将在2025年启动“仓颉”版开发(届时,将会有 Solon-Java 和 Solon-CJ 两个版本)。

2024-09-25

本来没有,难得弱小生来。借华为的话,“我们敢于非凡”。七年时间,我们不断变强!越来越强!还会更强! Solon 框架! Java “新式”应用开发框架。开放原子开源基金会,孵化项目。从零开始构建(非 java-ee 架构),有灵

2022-10-07

Java 轻量级应用开发框架。可用来快速开发 Java 应用项目,主框架仅 0.1 MB。 相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 ~ 10 倍。 (更快) qps 高 2~ 3 倍。 (更高) 运行时内存节省 1/3 ~ 1/2。 (更少) 打包可以缩

2022-12-13

binv8 为组件类型自动化脚本做出的贡献~ 三、支持适配鸿蒙​ 在 Taro 与 OpenHarmony 建立官方合作关系,并受邀成立 CrossPlatformUI Sig(跨平台前端框架兴趣小组)后,让 Taro 支持适配鸿蒙就一直在议程上,鸿蒙的方舟开发框架提

2023-02-03

是跨端解决方案不断发展的重要组成部分之一。 1. 支持鸿蒙端平台插件​ 在 Taro 与 OpenHarmony 建立官方合作关系,并受邀成立 CrossPlatformUI Sig(跨平台前端框架兴趣小组)后,让 Taro 支持支配鸿蒙就一直在议程上,鸿蒙的方

2022-07-02

主动控制·客户端远程查通话、远程查话簿兼容性(兼容鸿蒙2.0) (v3.0.4) 新增:关于页面增加QQ频道入口 (v3.0.4) 优化:发送通道webhook支持HTTP基本认证 【格式:http://username:[email protected]/uri】 #175 (v3.0.5) 优化:发送

2023-11-15

华为迎来又一个鸿蒙生态的重要合作伙伴,宣布与美团以HarmonyOS为基础进行产业创新、技术应用、商业发展等方面展开全面合作,全力支持美团启动开发鸿蒙原生应用工作。 自9月25日华为宣布全新HarmonyOS NEXT蓄势待发、鸿蒙原

2023-11-29

哔哩哔哩(B 站)与华为宣布达成鸿蒙领域全面合作,并正式启动鸿蒙原生应用开发工作。 数据显示,今年上半年,B 站的日活用户同比增长 17% 至超过 9500 万,而月活用户达 3.19 亿;总日均视频播放量同比增长 34% 至 41 亿。截

2023-09-05

要的痛点:启动慢,费内存。 关键记事: 2021年1月,正式对外开源 2022年7月,建立官网,发力推广 2023年2月,v2.0 发布。官网增加 Solon Initializr,用于生成项目模板 2023年4月,成为信通院可信开源社区、可信开源项目

2024-08-27

Solon 框架! Java “纯血国产”应用开发框架。开放原子开源基金会,孵化项目。从零开始构建(非 java-ee 架构),有灵活的接口规范与开放生态。 追求: 更快、更小、更简单 提倡: 克制、简洁、高效、开放、生态 有什

2023-09-29

oauth2-shiro v2.0.0版本正式发布,在距上一次发布7年后,更新了大版本,对安全漏洞等问题进行大升级。 该版本主要更新内容: 升级使用springboot,调整工程结构,打包由war换成jar,使用thymeleaf替换servlet/jsp;spring大版本升级

2023-11-13

近日,网易、美团等多家互联网公司发布和鸿蒙系统有关岗位招聘,加快推进鸿蒙原生应用开发转型。 11月8日,美团发布了鸿蒙高级工程师、鸿蒙基建工程师等多个鸿蒙开发相关岗位,主要开发美团鸿蒙App、大众点评鸿蒙App。

2023-09-05

司 CEO 王成录博士在微博与网友互动,被问及是否有 PC 端鸿蒙系统时,他回复了一个“有”字。 王成录曾主导鸿蒙系统开发,也曾担任华为终端 BG 软件部总裁、华为消费者业务 AI 与智慧全场景业务部总裁。2022年5月,王成录正

2023-02-15

pgAdmin 是 PostgreSQL 领先的开源图形化管理工具。pgAdmin 4 旨在满足新手和有经验的 Postgres 用户的需求,提供强大的图形界面,简化了数据库对象的创建、维护和使用。 这个版本的 pgAdmin 4 包括对配置数据库结构的重大改变,以及