Java/ClassLoaderの分割 : kamranzafar/JCL
Java / ClassLoaderの分割 : kamranzafar / JCL
id: 1218 所有者: msakamoto-sf
作成日: 2013-07-21 11:16:56
カテゴリ: Java
ClassLoaderを分割したい場合のメモ。
kamranzafar/JCL
Jarファイルをロードするカスタムクラスローダ。
https://github.com/kamranzafar/JCL
特色としては、単にクラスローダを分割するだけでなく、分割したクラスローダ間でのクラスキャストに対応していること。
Javaでは異なるクラスローダでロードされたClassは別物として扱われるため、以下の様なケースでは一般にClassCastExceptionが発生する。
- クラスローダAでHogeクラスをロード、インスタンスa生成
- クラスローダBでHogeクラスをロード、インスタンスb生成
- インスタンスa = インスタンスb で参照代入 -> 同じHogeクラスでもロードしたクラスローダが異なるためClassCastException
JCLでは、これを解決するために二種類の方式を提供している。
- (デフォルト)JDKのリフレクションAPIを使って、java.lang.reflect.ProxyによるProxyクラスで別クラスローダで生成したインスタンスをラップする。内部ではリフレクションを使ってインスタンスのメソッドを参照し、委譲する。
- cglibを使ったProxyクラスでラップする。内部ではリフレクションを使ってインスタンスのメソッドを参照し、委譲する。
詳しくはJCLのソースコード、"org.xeustechnologies.jcl.proxy"パッケージを参照。
プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2013-07-21 11:40:58
md5:619289d2a8fc219d22cb40296f3883a8
sha1:d033c96fbd82156390ba6ce8685f27eedfa1e969
コメント