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はインフラストラクチャの部品です。プロキシの種類、自己呼び出し、Beanのライフサイクル、JDKプロキシとCGLIBの選択には、実際のBeanの設定を基に判断する必要があります。
4. SQLとMyBatis
MyBatisの #{} はプリペアドステートメントのパラメータを使用し、${} はホワイトリストで許可した構造だけを受け付けます。プラグイン、ページング、テナント、論理削除については、最終的なSQLを統合テストで確認する必要があります。
5. 利用上の原則
これらのツールが解決するのは個別の処理であり、汎用的なアーキテクチャではありません。Spring 6、またはMyBatis 3.5のマイナーバージョンをアップグレードしたら、例を再びコンパイルし、非推奨API、パッケージ名、モジュール依存関係を確認してください。