コンパイル可能な Java コードへの文字列変換
データベースのクエリでは、多くの場合、条件構造内での評価を必要とする格納された式が提供されます。これらの文字列を Java コンパイル可能なコードに変換する機能により、カスタム式を動的に実行できます。この記事では、Java のコンパイラ API を使用した潜在的な解決策を検討しますが、任意のコードのコンパイルに伴う潜在的なリスクを強調します。
Java コンパイラ API の使用
Java 6 以降の場合、 Java コンパイラ API は、Java コードをプログラム的にコンパイルする手段を提供します。コア コンポーネントである JavaCompiler を使用すると、メモリ内でソース コードを定義し、Comparator オブジェクトを動的に作成する機能を提供できます。
String comparatorClassName = ...; // Random name for comparison class String expression = ...; // Retrieved database expression String source = "public class " + comparatorClassName + " implements Comparable<" + comparableClassName + "> {" + " public int compare(" + comparableClassName + " a, " + comparableClassName + " b) {" + " return " + expression + ";" + " }" + "}";
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); Writer out = null; // Output writer Iterable<? extends JavaFileObject> compilationUnits = new ArrayList<>(); compilationUnits.add(new SimpleJavaFileObject() { /* Details for loading source String */ }); compiler.getTask(out, null, null, null, null, compilationUnits).call();
コンパイルが完了すると、Comparator をインスタンス化し、動的オブジェクトを実行できます。式:
Comparator comparator = (Comparator) Class.forName(comparableClassName).newInstance();
注意事項
以上がデータベースから取得した文字列を実行可能な Java コードに安全にコンパイルするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。