2011-07-10 14 views
2

このように、実行中にバイトコードを変更したいと思います。 私はアプリケーションやWebサーバーを一切実行していません。コマンドラインプログラムのためのものです。JRebelを使用してクラスのバイトコードを交換する

もちろん、私は新しいClassLoaderを作成できますが、それはパフォーマンスの観点からは実現不可能です。

私はJRebelに遭遇しましたが、これはまさにこのことを可能にするはずですが、これをアーカイブするチュートリアルはありません。

Class Car 
{ 
    public void print() { System.out.println("I am Type A"); } 
} 

まずIのwannaの負荷クラスCar:それは私が欲しいものを証明するために、複数のクラスローダ

簡単な例を扱うことができないため

Javaのホットスワップは、オプションではありません

Car myCar = new Car(); 

いくつかのものをする

myCar.print(); // => I am Type A 

変更ソースコード

sourceCode.replace("Type A", "Type b"); 

再コンパイルと再び

myCar.print(); // => I am Type B 

私は私のポイントを明らかにした希望を、同じクラスの実行同じクラスローダに

をバイトコードを変更します。

+0

私は次のような関数を探しています:jrebel.change( "car"、myClassloader、newByteCode []); – Martin

答えて

1

再コンパイル後にJRebelがバイトをスワップします。これを達成するためにAPIを呼び出す必要はありません。

+0

私はアプリケーションサーバーなどでjrebelを使用したくありません。ファイルシステム上に.classファイルはありません。私はちょうどいくつかの余分なコードを書く必要があるメモリ – Martin

+0

のバイトコードを交換する機能が必要です。私はSDKがここで助けることができると思うhttp://www.zeroturnaround.com/resources/jrebel-plugins/ –

関連する問題