私は最近、「バイトコード操作」という言葉に出会った(これを調べるために、Hibernateを使ったアプリケーションでログを見てバイトコードプロバイダを見たのは間違いない)。私はJava Reflection APIについても知っています。Javaバイトコード操作とJavaリフレクションAPI?
これらの2つの概念は似ていますか?それらの違いは何ですか?どちらを使うの?
私は最近、「バイトコード操作」という言葉に出会った(これを調べるために、Hibernateを使ったアプリケーションでログを見てバイトコードプロバイダを見たのは間違いない)。私はJava Reflection APIについても知っています。Javaバイトコード操作とJavaリフレクションAPI?
これらの2つの概念は似ていますか?それらの違いは何ですか?どちらを使うの?
Reflection APIを使用すると、すでにJVMにロードされているクラスのメンバー(フィールド、メソッド、インターフェイス、e.t.c.)に関する情報にアクセスできます。このAPIでは、プライベートメソッドを呼び出すようないくつかの基本的なことを除いて、クラスの動作を変更することはできません。リフレクションAPIが
いくつかの例には、依存性注入フレームワークは、所有者オブジェクトのプライベートフィールドに依存関係を設定することができます。
逆にByteCode操作を行うと、ディスク上のいくつかの.classファイルや、 JavaエージェントAPIを使用してJVMに既にロードされている
A
は、それはあなたの詳細な情報について
private void foo() {
long start = System.currentTimeMillis(); // inserted by bytecode manipulation
Profiler.enterMethod("foo"); // inserted by bytecode manipulation
try { // inserted by bytecode manipulation
// original method code
} finally { // inserted by bytecode manipulation
Profiler.exitMethod("foo", System.currentTimeMillis() - start); // inserted by bytecode manipulation
} // inserted by bytecode manipulation
}
本当にありがとうございましたがどのように見えるかです。 – CuriousMind