先看下BeanFactory的调用过程
public class BeanFactoryTest { public static void main(String[] args) { ClassPathResource res = new ClassPathResource("beans.xml"); XmlBeanFactory factory = new XmlBeanFactory(res); Object obj = factory.getBean("beanFactory"); System.out.println(obj.getClass()); } }
beans.xml定义
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="beanFactory" class="com.hz.yk.spring.test.BeanFactoryTest" /> </beans>
就是简单的定义下自己。
ClassPathResource的构造函数跟进去看,其实就是对本地path和classload进行设置,为下一步做好准备。
public ClassPathResource(String path, ClassLoader classLoader) { Assert.notNull(path, "Path must not be null"); String pathToUse = StringUtils.cleanPath(path); if (pathToUse.startsWith("/")) { pathToUse = pathToUse.substring(1); } this.path = pathToUse; this.classLoader = (classLoader != null ? classLoader : ClassUtils.getDefaultClassLoader()); }
先看下ClassPathResource 的类图
Resource其实就封装了对文件的定位,并封装成spring定义的访问接口。具体看下getInputStream(),getFile()等方法的实现。
可以看到资源的定位其实挺没花头的,下一节将研究bean的解析