2014-12-21 3 views
0

Я пришел через эту точку, пока я исследовал Singleton PatternClassLoader в Singleton Pattern

Если класс Singleton загружается 2 различных загрузчиков классов мы есть 2 разных классов, по одному для каждого загрузчика классов ,

Я не знаю, как два класса загрузчика будут доступны для JVM и как это сделать.

ответ

1

Несколько классов ClassLoaders обычно встречаются в Java EE. Серверы приложений 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 уже реализует одноэлементный узор.

Обновлено Не могли бы вы объяснить, что такое многозарядный загрузчик и как он разрешает проблему.

Скажем, у вас есть библиотека Foo. Для части вашего проекта требуется Foo_version1.jar, а для какой-либо другой части требуется Foo_version2.jar. Итак, в вашем classpath у вас есть Foo_version1.jar и Foo_version2.jar. Теперь загрузчик классов должен загрузить класс Bar от Foo, он загрузит его с первого Foo_versionX, который он найдет на classpath. Чтобы решить эту проблему, вам понадобится другой загрузчик классов, потому что помните, что для части вашего проекта требуется класс Bar из разных jar, а затем тот, который загружается загрузчиком классов.

Используя приведенный выше код, вы убедитесь, что если более 1 загрузчик классов попытается загрузить ваш класс, то всегда будет использоваться один и тот же экземпляр.

+0

Не могли бы вы объяснить, что такое многоклассный загрузчик и как он разрешает проблему. –

+0

@SivaKumar обновлен – sol4me

+0

Спасибо за ваше обновление. –