2017-01-18 1 views
0

Недавно я посетил интервью.Почему и в каких случаях весенняя бобовая фаза дважды используется разными классами?

меня спросили:

MyClass myClass =(MyClass) applicationContext.getBean("myClass"); 

бросает ClassCastException

но applicationContext.getBean("myClass").getClass() возвращает MyClass.

Я был удивлен вопросом. Я мог отвечать только на классы, загруженные разными загрузчиками классов.

  1. Как это достичь?
  2. Почему Spring использует разные загрузчики классов?
+0

ли как 'MyClass' тот же класс из одного пакета? – Berger

+0

@Berger yes, sure – gstackoverflow

ответ

1

Да, разный загрузчик классов приведет к этому сценарию. Это не общий сценарий, однако в некоторых приложениях используется несколько загрузчиков классов (наиболее распространенными примерами являются контейнеры и серверы приложений). Вы можете воспроизвести его

Вы можете инициализировать контекст пружинного приложения, указав URLClassLoader

ли ваш класс расположен в

/home/jigar.joshi/foo/package/MyClass 

и настроить контекст приложения для использования URLClassLoader как этого

URL[] classURLs = { new URL("file:///home/jigar.joshi/foo") }; 
URLClassLoader urlClassLoader = new URLClassLoader(classURLs); 
ApplicationContext context = new  ClassPathXmlApplicationContext("spring/applicationContext.xml") { 
      protected void initBeanDefinitionReader(XmlBeanDefinitionReader reader) { 
       super.initBeanDefinitionReader(reader); 
       reader.setValidationMode(XmlBeanDefinitionReader.VALIDATION_NONE); 
       reader.setBeanClassLoader(urlClassLoader); 
       setClassLoader(urlClassLoader); 
      } 
     }; 

     MyClass m = context.getBean("MyClass"); 
+0

Какая возможная причина иметь эту функциональность? – gstackoverflow

+0

Я работал только с Tomcat/причал. Пожалуйста, укажите пример для этих контейнеров. – gstackoverflow

+0

, когда tomcat имеет несколько приложений. возможно, что несколько приложений имеют одинаковое имя класса. он использует разные загрузчики классов для каждого приложения таким образом –

Смежные вопросы