Java クラスを動的にロードしようとしています。基本的な考え方は、実行時に動的にロードされるモジュールが jar に含まれているということです。これが私のやり方です(ハックであることは知っていますが、既存のクラスローダーにjarを動的に追加する方法は他にありません):
Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[] { URL.class });
method.setAccessible(true);
method.invoke(moduleLoader, new Object[] { file.toURI().toURL() });
Class fooClass = moduleLoader.loadClass("com.coderunner.Foo");
Object foo = fooClass.newInstance();
すべてのモジュールには @Module アノテーションが付けられます。したがって、モジュールに関する詳細情報を取得するために、注釈を取得しようとします。問題は、foo の注釈が com.coderunner.Module ではなく com.sun.$Proxy$27 型であるため、
ClassCastException: Cannot cast com.sun.proxy.$Proxy42 (id=64) to com.coderunner.Module
ここで何が起こっているのか、少し混乱していると言わざるを得ません。私がやりたいことは可能ですか?どのように?
編集: spring/spring-mvc および tomcat 環境でこれを試していることにも言及する必要があるかもしれません。