home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

日記/2007/05/27/Understanding Class.forName()

日記/2007/05/27/Understanding Class.forName()

日記 / 2007 / 05 / 27 / Understanding Class.forName()
id: 261 所有者: msakamoto-sf    作成日: 2007-05-27 22:46:12
カテゴリ: Java 

http://www.javageeks.com/Papers/ClassForName/index.html
より。
JDK1.0 - 1.2の境目で発生した、ClassLoaderの委譲モデルの変更点とその影響の解説、がメインといえばメインなんだけど、SunのJavaVMにおけるClassLoaderの構成や、JavaVMSpecの2nd以降のClassLoaderの親子関係、委譲モデル、Extension ClassLoaderに読み込ませるときの問題点などを丁寧に扱っている。

惜しむらくは、親サイトの
http://www.javageeks.com/index.html
のリンクが色々とおかしくなってて現状機能していない事か。
まあPDFはローカルにDLしたからいいけど。

ClassLoader周りは、この辺りの「基本」が分かっていないとTomcatや各種APの該当解説ページを見ても「何を言っているのか理解不能」な領域である為、こういうのがあると非常に助かる。

ExtClassLoader(JAVA_HOME/lib/ext*.jarを自動ロードするClassLoader)から読み込まれたクラス内で、CLASSPATH上にあるクラスをClass.forName()で牽こうとすると、クラスが見つからない。何故か。それはExtClassLoaderの親がBootstrapClassLoaderになってしまうため、CLASSPATHが検索対象に入らないからだ。

で、上記PDFではその解決方法としてThead.getContextClassLoader()で取得したCLを、Class.forName(完全限定名, クラスの初期化是非, CL)に渡す手法が述べられている。
確かに、ThreadをCLASSPATH以降でロードされたクラス内で生成するのであればこの手法が間違いない。但し実際にTomcatのCLツリーなどは専用のドキュメントが用意されているほど独特なので、そちらに合わせるが吉、か。


プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2009-03-29 22:47:28
md5:2999660d8001e4a82ab1fa0f73968014
sha1:4c6206ed8fff2908c80d57a5105abe1cc9a56112
コメント
コメントを投稿するにはログインして下さい。