Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
一、写在前面如果你会 Spring Boot那你已经会了一大半 Solon。Solon 不是 Spring 的分支或封装它是独立发展的全栈应用开发框架。但在设计哲学上Solon 遵循了 Java 主流的 IoC、AOP、MVC 范式——概念相同注解名不同。这篇文章把 Spring Boot 到 Solon 的注解映射、配置迁移、关键差异整理成对照表供迁移参考。二、IoC/DI 容器注解对照核心原则Solon 将 Spring 的多个细分注解合并为少数几个核心注解。2.1 组件注册SolonSpring Boot说明ComponentComponent/Service/Repository/DaoSolon 统一用一个注解ConfigurationConfiguration完全一致BeanBean完全一致2.2 依赖注入SolonSpring Boot说明InjectAutowired按类型注入by typeInject(name)QualifierAutowired按名称注入by nameInject(${key})Value(${key})注入配置值BindProps(prefixxxx)ConfigurationProperties(prefixxxx)绑定属性集注意Solon 的Inject一个注解兼顾了 Spring 中Autowired、Qualifier、Value三个注解的功能。2.3 生命周期与作用域SolonSpring Boot说明InitPostConstruct组件初始化回调DestroyPreDestroy组件销毁回调LifecycleBeanInitializingBeanDisposableBean接口方式控制生命周期AppLoadEndEventApplicationRunner/CommandLineRunner应用启动后执行Singleton默认Scope(singleton)单例Solon 默认Singleton(false)Scope(prototype)多例Condition(...)ConditionalOnClass/ConditionalOnProperty等Solon 统一为单一注解ImportImportComponentScan导入组件/配置类三、Web 层Controller 改写3.1 注解映射SolonSpring Boot说明ControllerController/RestControllerSolon 默认 JSON 输出MappingRequestMapping路由映射GetMappingGetMappingGET 方法限定PostMappingPostMappingPOST 方法限定PutMappingPutMappingPUT 方法限定DeleteMappingDeleteMappingDELETE 方法限定ParamRequestParam请求参数PathPathVariable路径变量BodyRequestBody请求体HeaderRequestHeader请求头CookieCookieValueCookieProduces—Spring 无直接等价声明输出类型Consumes—Spring 无直接等价声明输入类型3.2 Before / After 示例Spring Boot 写法RestController RequestMapping(/users) public class UserController { Autowired private UserService userService; GetMapping(/{id}) public User getUser(PathVariable Long id) { return userService.findById(id); } PostMapping public User create(RequestBody User user) { return userService.save(user); } }Solon 写法Controller Mapping(/users) public class UserController { Inject private UserService userService; Get Mapping(/{id}) public User getUser(Path Long id) { return userService.findById(id); } Post Mapping public User create(Body User user) { return userService.save(user); } }3.3 关键差异Context 替代 Servlet APISolon不依赖 Servlet 容器因此HttpServletRequest/HttpServletResponse需替换为Context// Spring 写法 public User get(HttpServletRequest request) { String token request.getHeader(Token); String id request.getParameter(id); } // Solon 写法 public User get(Context ctx) { String token ctx.header(Token); String id ctx.param(id); // ctx.redirect(url) 重定向 // ctx.render(obj) 渲染 // ctx.remoteIp() 客户端 IP }⚠️Context只能在方法参数中注入不能作为字段注入。四、配置文件迁移4.1 文件命名项目Spring BootSolon主配置文件application.ymlapp.yml环境配置文件application-dev.ymlapp-dev.yml激活方式spring.profiles.activedevsolon.envdev4.2 常用配置键名对照含义Spring BootSolon应用名spring.application.namesolon.app.name端口server.portserver.port不变上下文路径server.servlet.context-pathserver.contextPath数据源spring.datasource.urlsolon.dataSources.db1.url日志级别logging.level.com.xxsolon.logging.level.com.xx环境切换spring.profiles.activesolon.env⚠️ Solon 配置键名统一使用驼峰命名contextPath不是短横线context-path。五、数据访问Db 一站式注入5.1 多数据源配置YAMLsolon.dataSources: db1: class: com.zaxxer.hikari.HikariDataSource url: jdbc:mysql://localhost/test driverClassName: com.mysql.cj.jdbc.Driver username: root password: 123456 db2: url: jdbc:mysql://localhost/order driverClassName: com.mysql.cj.jdbc.Driver username: root password: 1234565.2 Db 注入// Solon 一行搞定多数据源 Db(db1) UserMapper userMapper; Db(db2) OrderMapper orderMapper;对比 Spring Boot 多数据源需要配置多个DataSource 多个SqlSessionFactory 多个TransactionManagerMapperScan...Solon 使用Db。5.3 ORM 集成ORMSpring Boot 依赖Solon 依赖MyBatismybatis-spring-boot-startermybatis-solon-pluginMyBatis-Plusmybatis-plus-spring-boot-startermybatis-plus-solon-pluginJPAspring-boot-starter-data-jpasolon-data-jpaEasy-Queryeasy-query-spring-boot-startereasy-query-solon-plugin5.4 事务SolonSpring Boot说明TransactionTransactional声明式事务Transaction(policy TranPolicy.requires_new)Transactional(propagation Propagation.REQUIRES_NEW)事务传播策略Solon 的Transaction默认遇到任何异常都回滚无需指定异常类型。六、测试迁移SolonSpring Boot说明SolonTest(App.class)SpringBootTest测试启动SolonTest(envtest)ActiveProfiles(test)测试环境HttpTesterMockMvcHTTP 接口测试RollbackTransactionalRollback事务回滚Import(profiles...)TestPropertySource导入测试属性HttpTester 用法示例SolonTest(App.class) public class UserControllerTest extends HttpTester { Test public void testGetUser() { // GET 请求 String resp path(/users/1).get(); assertEquals(200, resp.code()); // POST 请求 String json {\name\:\test\}; String resp2 path(/users).body(json).post(); assertContains(resp2, test); } }七、其他常见对照场景Spring BootSolon拦截器HandlerInterceptorAround注解或 Solon Filter定时任务ScheduledScheduled同名EnableScheduling文件上传MultipartFileUploadedFile用法一致RPC 调用FeignClientNamiClient注册发现EnableDiscoveryClient无需注解引入插件自动生效配置刷新RefreshScope无需注解配置变更自动感知八、迁移检查清单POMspring-boot-starter-parent→solon-parentPOMspring-boot-starter-*→solon-*/*-solon-plugin配置application.yml→app.yml环境文件同理启动类SpringBootApplication→SolonMain启动SpringApplication.run()→Solon.start()IoCAutowired→InjectIoCService/Repository→ComponentWebRestController→ControllerWebRequestMapping→MappingWebPathVariable→PathWebHttpServletRequest→Context配置Value→Inject(${...})数据spring.datasource.*→solon.dataSources.*数据Transactional→Transaction测试SpringBootTest→SolonTest测试MockMvc→HttpTester九、写在最后这篇对照表覆盖了日常开发中最常用的 90% 场景。Solon 的注解体系并非简单的换皮它在统一性Component/Inject/Condition和简便性Db/ 无需RefreshScope上做了明显的设计取舍。

相关新闻

鸿蒙原生 ArkTS 布局方式之 RelativeContainer 实现自适应布局

鸿蒙原生 ArkTS 布局方式之 RelativeContainer 实现自适应布局

鸿蒙原生 ArkTS 布局方式之 RelativeContainer 实现自适应布局HarmonyOS NEXT API Version 24 深度解析 RelativeContainer 的锚点体系与自适应布局实践一、引言 在鸿蒙原生应用开发中,布局是 UI 构建的核心。HarmonyOS NEXT 提供了多种布局容器,其中 R…

2026/6/29 21:57:34阅读更多 →
基于Matlab与STM32的串口数据可视化调试:从算法仿真到硬件验证

基于Matlab与STM32的串口数据可视化调试:从算法仿真到硬件验证

1. 为什么需要Matlab与STM32联合调试? 做嵌入式开发的朋友应该都遇到过这样的场景:我们在STM32上实现了一个数字信号处理算法,比如FFT变换或者滤波器设计,代码编译通过了,也能正常运行,但输出的结果总感觉哪…

2026/6/29 21:57:34阅读更多 →
ADBKeyBoard终极指南:3分钟掌握Android自动化输入神器

ADBKeyBoard终极指南:3分钟掌握Android自动化输入神器

ADBKeyBoard终极指南:3分钟掌握Android自动化输入神器 【免费下载链接】ADBKeyBoard Android Virtual Keyboard Input via ADB (Useful for Test Automation) 项目地址: https://gitcode.com/gh_mirrors/ad/ADBKeyBoard ADBKeyBoard是一款专为Android自动化测…

2026/6/29 21:52:31阅读更多 →
STM32 Cube ADC驱动MQ135:从电压采集到氨气PPM的实战校准与优化

STM32 Cube ADC驱动MQ135:从电压采集到氨气PPM的实战校准与优化

1. STM32与MQ135传感器的基础原理 在开始实战之前,我们需要先理解几个核心概念。STM32的ADC(模数转换器)就像是一个翻译官,它负责把传感器输出的模拟信号(电压值)转换成单片机能够理解的数字信号。这个过程…

2026/6/29 23:02:53阅读更多 →
机会识别化技术市场需求调研与技术创新扫描

机会识别化技术市场需求调研与技术创新扫描

机会识别化技术市场需求调研与技术创新扫描 在快速变化的商业环境中,机会识别化技术成为企业抢占市场先机的关键。市场需求调研与技术创新扫描能够帮助企业精准捕捉潜在机会,优化资源配置,推动技术升级。本文将围绕这一主题,从市…

2026/6/29 23:02:53阅读更多 →
Python的__complex__扩展

Python的__complex__扩展

Python的__complex__扩展:解锁复数运算的魔法 在Python中,复数作为一种基本数据类型,广泛应用于科学计算、信号处理等领域。而__complex__这一特殊方法,则为自定义类的复数转换提供了强大的扩展能力。通过实现__complex__方法&am…

2026/6/29 23:02:53阅读更多 →
如何用d2s-editor轻松修改暗黑破坏神2存档?5个核心功能详解

如何用d2s-editor轻松修改暗黑破坏神2存档?5个核心功能详解

如何用d2s-editor轻松修改暗黑破坏神2存档?5个核心功能详解 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾经在暗黑破坏神2中花费数小时刷装备,却始终得不到心仪的物品?或者想要测试…

2026/6/29 23:02:53阅读更多 →
丢包不高但远程桌面卡顿?从抖动、队列和 Wi-Fi 干扰排查实时网络问题

丢包不高但远程桌面卡顿?从抖动、队列和 Wi-Fi 干扰排查实时网络问题

一、为什么丢包不高也会卡? 很多人只看丢包率: 丢包率 0% 平均延迟 35ms 所以网络应该没问题但实时业务看的是连续性。 比如下面两条链路:指标链路 A链路 B平均延迟40ms45ms丢包率0%0%最大延迟55ms850ms抖动8ms220ms如果只看平均延迟&#xf…

2026/6/29 23:02:53阅读更多 →
免费解锁9大网盘下载新姿势:LinkSwift直链下载助手完全指南

免费解锁9大网盘下载新姿势:LinkSwift直链下载助手完全指南

免费解锁9大网盘下载新姿势:LinkSwift直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

2026/6/29 22:57:53阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/6/29 3:27:55阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/6/29 2:19:08阅读更多 →
如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南

如何在3秒内从普通图片生成专业级法线贴图:DeepBump的终极指南 【免费下载链接】DeepBump Normal & height maps generation from single pictures 项目地址: https://gitcode.com/gh_mirrors/de/DeepBump 还在为3D建模中的纹理制作而烦恼吗?…

2026/6/29 0:01:47阅读更多 →
OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单!

OCAuxiliaryTools:终极OpenCore配置工具,让黑苹果安装从未如此简单! 【免费下载链接】OCAuxiliaryTools Cross-platform GUI management tools for OpenCore(OCAT) 项目地址: https://gitcode.com/gh_mirrors/oc/OCA…

2026/6/29 0:01:47阅读更多 →
终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像

终极Windows 11精简指南:使用tiny11builder快速创建纯净系统镜像 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 你是否厌倦了Windows 11系统自带的20…

2026/6/29 0:01:47阅读更多 →