#navi_header|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"パッケージを参照。 #navi_footer|Java|