[Java]を動的ロード

プログラムは非常に頻繁に(たとえば、いずれかのアプリケーションのプラグインなどの可能性を考慮すると、すぐに"インストール後に")我々を参照して使用しなければならない必要があるシステムでの使用中にコードの追加部分を挿入を感じるどのように何の制限は、この日の言語でも達成可能である
実行時にコンパイル:
まず、そこから任意のJavaアプリケーション()は、通常のパラメータとのjavacコンパイラを呼び出すことを知って便利です(クラスパスと他のすべて)で、単純な
new String [ ] {メイン( コンパイル 新しい String []( , の"- d"の"bin /"、 filename + ".java" } ) ; は"src / generatedCode /"+ ファイル名+"java"の)); |
注意:各種パラメータ(私は)私のAPIのドキュメントを残して、コンパイルのオプションを含む多くの左側。
読み込んでいます:
なぜなら、ファイルがあります。私たち二道路が我々のアプリケーションは、仮定から、私たちはクラスの名前を知ってスタートをロードするからクラス:
- もし我々の反射とインスタンスメソッドのメカニズムを介してクラスを推論に関する特定の情報を持っていない;
- もし我々が知られてインターフェイスを実装するための"プラグイン"の構造が(私たち、まもなく)を参照しなければならないし、インターフェイスのメソッドを呼び出すオブジェクトをインスタンス化します。
これ以外にもはるかにそれる2私の場合検討していくのは非常に複雑であり、興味深い反射件名。
は、次の場合を考えます:
クラス A(1たちをロードする)Bのインターフェイスを実装します。
new ClassLoader ( ) ; ClassLoaderをローダ= 新しい ClassLoader(); gt ; cls = loader. loadClass ( "A" ) ;クラス&LTの;?&グアテマラ;分類=ブートローダーがあります。LoadClass(""); B ) cls. newInstance ( ) ; Istanza_di_AのB =(Bの)分類。newInstance()を; ... ) ; istanza_di_A。metodoDiA (...); |
このようにプロセスを見ることができる、非常に実装するために、単純な性は、今何が主な制限を見てみましょう。
UnloadingReloading:
残念なことには、JVMを許可しない場合にバイトコードをロードされたクラスのアンロード。
かつて私たちのプログラムで、その型のオブジェクトをインスタンス化した後は、クラスのコードの改正のアイデアを考えてみましょう。 我々として、クラスを変更するのは、一度読み込まれたバイトコードとコンパイル型の新しいオブジェクトの"A"が作成されます自然に見えるであろうが、最新のバージョンが利用可能になった。
残念ながら、この現象が発生しない場合は、なぜしてください。
これまで我々充電"を"私たちのクラスのバイトコードのメモリ内の実行時に使用するクラスローダを、我々(手動または自動)を処理することができないとしているクラスのインスタンスのアプリケーションをアンロードする。 オブジェクトの作成時には、単に次のアルゴリズムに従うことです(これは実行が非常に簡体字):
- チェックデータ構造(ハッシュテーブル)がある場合は、クラスが、彼はクラス名("class_nameで" - ""バイト")行くことで、負荷に頼まれたのエントリです。
- 場合は、名前に一致するエントリを見つけることができ、1つ作成し、ファイルの読み込み後のクラス、そのような構造体のバイトコードを保存し、プログラムのインスタンスを返します。
- また、もし、クラス名のエントリを見つけるかどうかは、バイトコードかどうか更新され評価するためにいかなる方法でも心配していないですからオブジェクトのインスタンスをバイトコードを保存し、プログラムに返されます。
このようにして、変更する場合にのみ、プログラムを再起動が有効になります想像することができます。
現存する唯一のソリューションは、カスタムClassLoaderを我々のプラグインとして使用すると、1回の変更が発生した、我々"退席中"(nullにすべての参照を配置する)で投げることができる場合caricareistanziareクラスを使用する場合は契約を実装することですそのプライベートなデータ構造では、新しいコードを管理するの面倒を見る、新しいアプリケーションのreinstanziarene。
面倒な本当の解決? さて、もし彼もTomcatのJSPはそれを調整することが適当であると思いますMENDMENTSを更新する場合 ![]()
人気:19%[?]
キーワード: バイトコード 、ClassLoaderを、 コンパイル、 動的ロード、HotSwap は、 ジャワ、JSP や JVMは、 ロード、 リロード、 ランタイムは、Tomcat は、 アンロード
leave a response , or trackback from your own site. あなたは RSS 2.0の 供給を通してこの記入項目への応答に従うことができます。あなたが自分のサイトから の応答、 または trackbackトラックバック を残す ことができます。



!['を追加[Java]を動的ロード'Del.icio.usに Aggiungi '[Java] Dynamic Loading' a Del.icio.us](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/delicious.png)
!['を追加[Java]を動的ロード'ディグする Aggiungi '[Java] Dynamic Loading' a digg](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/digg.png)
!['を追加[Java]を動的ロード'FURLに Aggiungi '[Java] Dynamic Loading' a FURL](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/furl.png)
!['を追加[Java]を動的ロード'blinklistに Aggiungi '[Java] Dynamic Loading' a blinklist](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/blinklist.png)
!['を追加[Java]を動的ロード'redditに Aggiungi '[Java] Dynamic Loading' a reddit](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/reddit.png)
!['を追加[Java]を動的ロード'リンクMeをフィードを購読する Aggiungi '[Java] Dynamic Loading' a Feed Me Links](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/feedmelinks.png)
!['を追加[Java]を動的ロード'Technoratiに Aggiungi '[Java] Dynamic Loading' a Technorati](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/technorati.png)
!['を追加[Java]を動的ロード'はYahoo MyするWeb Aggiungi '[Java] Dynamic Loading' a Yahoo My Web](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/yahoo_myweb.png)
!['を追加[Java]を動的ロード'Socializerに Aggiungi '[Java] Dynamic Loading' a Socializer](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/socializer.png)
!['を追加[Java]を動的ロード'Ma.Gnoliaにする Aggiungi '[Java] Dynamic Loading' a Ma.gnolia](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/magnolia.png)
!['を追加[Java]を動的ロードのGoogleブックマークに追加 Aggiungi '[Java] Dynamic Loading' a Google Bookmarks](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/google.png)
!['を追加[Java]を動的ロード'Bloglinesはに Aggiungi '[Java] Dynamic Loading' a Bloglines](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/bloglines.png)
!['を追加[Java]を動的ロード'Squidooに Aggiungi '[Java] Dynamic Loading' a OKnotizie](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/oknotizie.gif)
!['を追加[Java]を動的ロード'Bookmark.itする Aggiungi '[Java] Dynamic Loading' a Bookmark.it](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/bookmark.png)
!['を追加[Java]を動的ロード'[Ask]に Aggiungi '[Java] Dynamic Loading' a Ask](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/ask.png)
!['を追加[Java]を動的ロード'にせん妄 Aggiungi '[Java] Dynamic Loading' a Delirious](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/delirious.png)
!['を追加[Java]を動的ロード'LiveにMSNの Aggiungi '[Java] Dynamic Loading' a Live-MSN](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/live.png)
!['を追加[Java]を動的ロード'SlashDotにする Aggiungi '[Java] Dynamic Loading' a SlashDot](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/slashdot.png)
!['を追加[Java]を動的ロード'Diggitaする Aggiungi '[Java] Dynamic Loading' a Diggita](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/diggita.png)
!['を追加[Java]を動的ロード'Facebookへ Aggiungi '[Java] Dynamic Loading' a FaceBook](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/facebook.png)
!['を追加[Java]を動的ロードのWikioする Aggiungi '[Java] Dynamic Loading' a Wikio](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/wikio.png)
!['を追加[Java]を動的ロード'MySpaceに投稿する Aggiungi '[Java] Dynamic Loading' a MySpace](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/myspace.png)
!['を追加[Java]を動的ロード'Twitterに Aggiungi '[Java] Dynamic Loading' a Twitter](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/twitter.png)
!['を追加[Java]を動的ロード'TailRankをする Aggiungi '[Java] Dynamic Loading' a Technotizie](http://www.vitruviantux.net/wp-content/plugins/social-bookmarking-reloaded/technotizie.png)
返信コメントを残す