最近我参观了一次采访。
我被问到:
MyClass myClass =(MyClass) applicationContext.getBean("myClass");
抛出ClassCastException
但applicationContext.getBean("myClass").getClass()
会返回MyClass
。
我对这个问题感到惊讶。我只能回复不同类加载器加载的类。
答案 0 :(得分: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");