FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

javaでjarファイルを動的ロードする方法

 プラグイン的なものを作りたくて、jarの動的ロード方法を調べてみた。
 URLClassLoaderというクラスを使用すれば可能らしい。




■呼び出し側

import java.io.File;
import java.net.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
 ・・・省略・・・
  //jarファイルを引数に指定
 File file = new File("D:\\test\\plugin2.jar");
 URLClassLoader load =
  URLClassLoader.newInstance(new URL[]{file.toURI().toURL()});
 //クラスをロード
 Class cl = load.loadClass("plugin.Plugin2");

 //リフレクションで利用
 Method mt =
  cl.getMethod("decorate", new Class[]{String.class});
 System.out.println( mt.invoke(cl.newInstance(), "a") );
 ・・・省略・・・



■呼び出される側

public class Plugin2 implements PluginIF{
 public String decorate(String args){
  return "[" + args + "]";
 }
}




■実行結果

[a]




■おまけ
 リフレクションは遅いので、インタフェースを用意しておいてキャストして使用することも可能。

 //IFにキャストして利用
 PluginIF plug = (PluginIF)cl.newInstance();
 System.out.println( plug.decorate("a") );

 簡単に計測した感じだと、倍ぐらい速くなった。
 (1万回、上記のdecorateメソッド呼び出しで、リフレクション:55ミリ秒 キャスト:20ミリ秒)


■参考
駆け抜けろ!プログラマの青春!
 
JavaDoc URLClassLoader
 

以上。
スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

管理者にだけ表示を許可する

検索フォーム
プロフィール

takuan93

Author:takuan93
本ブログの説明書→「ReadMe」

管理者に連絡

カテゴリ
WiX (5)
Ant (1)
フリーエリア
最新記事
カウンター
カレンダー
10 | 2018/11 | 12
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。