背景
在spring源码导入的工程里新建了个module,编写单元测试作为调试入口,来阅读源码,如下所示:
Resource resource = new ClassPathResource("spring-config.xml");
XmlBeanFactory beanFactory = new XmlBeanFactory(resource);
XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(beanFactory);
reader.loadBeanDefinitions(resource);
Car car = (Car)beanFactory.getBean("car");
‘’’
说明:loadBeanDefinitions是BeanDefinition注册入口,getBean是Bean初始化入口。这两者对理解spring非常重要。
问题及解决
运行报spring-config.xml文件找不到,查看ClassPathResource源码及java类加载机制1。
了解到不同的ClassLoader加载时的当前路径不一样,于是加了如下代码来打印,并将上面报错的代码先注释掉。
URL cl = this.getClass().getResource("/");
System.out.println(cl.toString());
Class.getResource也是调用的classLoader。所以上面的代码是等效的。打印结果