Spring 6 与 MyBatis 3.5 工具类:安全使用与版本边界
基线:Spring Framework 6、Spring Boot 3、MyBatis 3.5.x、Java 17+。工具类签名和包名以当前依赖 Javadoc 为准。
1. Bean 与属性
BeanUtils.copyProperties 是浅拷贝,不能替代映射框架。BeanWrapper、DataBinder 和 ConversionService 适合框架内部绑定,批量绑定时应限制允许字段,防止用户修改不应暴露的属性。
2. 反射与表达式
ReflectionUtils、MethodInvoker、SpEL 和 OGNL 都应限制输入来源。不要把用户输入直接当作类名、方法名、表达式或 SQL 片段执行。表达式缓存也不能替代权限校验。
3. AOP 与代理
AopUtils、ProxyFactory 和 Advisor 属于基础设施。代理类型、self-invocation、Bean 生命周期、JDK 代理与 CGLIB 选择都需要结合实际 Bean 配置判断。
4. SQL 与 MyBatis
MyBatis 的 #{} 用预编译参数;${} 只能接收白名单化结构。插件、分页、租户和逻辑删除必须以集成测试确认最终 SQL。
5. 使用原则
这些工具解决的是局部机制,不是通用架构。升级 Spring 6 或 MyBatis 3.5 小版本后,应重新编译示例并检查弃用 API、包名和模块依赖。