我也碰到過這一點,而我已經探索Singleton模式的ClassLoader在Singleton模式
如果Singleton類是由兩個不同的類加載器加載,我們將 有2個不同的類,每一個類加載器。
我不知道如何兩個類加載器可用於JVM和如何來它。
我也碰到過這一點,而我已經探索Singleton模式的ClassLoader在Singleton模式
如果Singleton類是由兩個不同的類加載器加載,我們將 有2個不同的類,每一個類加載器。
我不知道如何兩個類加載器可用於JVM和如何來它。
在Java EE中經常遇到多個ClassLoader。 Java EE應用程序服務器通過類加載器樹從已部署的War/EAR中加載類。他們這樣做的原因是將一個應用程序與其他應用程序隔離,但仍然在部署的模塊之間共享類。如果你想讓你的類成爲真正的單身人士,那麼你需要確保同一個類加載器加載你的單身人士。你可以這樣實現它
private static Class getClass(String clazz) throws ClassNotFoundException {
ClassLoader loader = Thread.currentThread().getContextClassLoader();
if(loader == null)
loader = YourSingleton.class.getClassLoader();
return (loader.loadClass(clazz));
}
}
注意java中的枚舉已經實現了單例模式。
更新你能解釋什麼是多類Loader以及它是如何解決問題的。
假設你有一個庫Foo
。您項目的某些部分需要Foo_version1.jar
,其他部分需要Foo_version2.jar
。所以在你的classpath
你有Foo_version1.jar
和Foo_version2.jar
。現在類加載器需要從Foo
加載Bar
類,它將從它在classpath
上找到的第一個Foo_versionX
加載它。爲了解決這個問題,您需要另一個類加載器,因爲請記住,您的項目的某些部分需要Bar
類,而不同的類是jar
,然後是類加載器加載的類。
通過使用上面提到的代碼,確保如果超過1個類加載器嘗試加載您的類,則始終使用相同的實例。
你能解釋一下什麼是多類Loader以及它是如何解決問題的。 –
@SivaKumar更新 – sol4me
感謝您的更新。 –