我正在寫一個自定義類加載器來加載我的一些類(不是全部)。Java,自定義類加載器的問題
類加載器是非常簡單的:
public Class loadClass(String className, boolean resolve) throws ClassNotFoundException {
Class cls=findLoadedClass(className);
if(cls!=null) {
return cls;
}
// Search first for encrypted classes
cls=decryptClass(className);
if(cls==null) {
// Then try with default system classloader
cls=super.loadClass(className, resolve);
}
return cls;
}
這也是我如何使用它:
// In my Launcher class
public static void main(String[] args) {
MyClassLoader loader=new MyClassLoader();
try {
final Class main=loader.loadClass("com.MyAppMain");
Method toInvoke=main.getMethod("main", args.getClass());
toInvoke.invoke(main, new Object[]{args});
}
catch(Exception ex) {
}
}
都似乎要被罰款在我小的測試項目,但是當我使用這部分代碼在我的大項目(使用spring + hibernate和IoC的客戶端 - 服務器應用程序)不起作用。 我沒有在我的類加載器particulate異常,但例如,新的Socket實例拋出一個「java.net.ConnectException:連接拒絕」沒有一個真正的原因...
其他問題是我的主要形式不成爲可見......以及其他奇怪的問題。
所以,這個問題,是由我的類加載器引起的這些問題,以不同的方式加載不同類的類?
編輯1
我的項目中使用的彈簧,所以我用@Autowired或有時
springApplicationContext.getBean(clazz);
注入一個bean。
問題是春天找不到我的豆,如果這些類被加密(所以他們需要由我的類加載器加載)。 這個錯誤有一個解決方法嗎? 謝謝。
編輯2
我已在春天的ClassPathXmlApplicationContext我的類加載器,現在我注意到,春季使用我的類加載器加載豆類,但儘管這樣,它拋出一個org.springframework.beans.factory.NoSuchBeanDefinitionException因爲它找不到豆類......我能做什麼? 感謝
如果你的類加載......你不必與你的類加載器的問題。沒有連接的套接字與此無關。 –
我認爲您的問題不是由自定義類加載直接導致的。嘗試將問題分解爲較小的問題並進行調試。將斷點放入'java.net.Socket'並查看它嘗試連接的位置。我相信你沒有正確地得到參數。 – AlexR
謝謝大家,我認爲問題在於Spring和IoC與我的類加載器。我編輯第一個問題的更多細節。 – blow