IOC到底是干啥的呢?
他啊,就是创建对象的,并且把他们管理起来。所谓的管理就是管理对象与对象之间的关系,还有是不是单例啊、需不需懒加载啊、生命周期啊等等,这些啊这时可以不用去深究;
如何加载资源呢?
首先为什么要加载资源呢?资源是啥,就是配置文件嘛,XML啊。
上面说了IOC是要去创建对象的,那他去哪里找对象呢。得有个指南或说明书之类的来告诉他吧,谁谁在哪,这个谁谁就是类。所以要达成IOC的工作就得先加载资源。
说到加载,首先看看这个Spring提供了那些工具,
这个Resource,你们可把这个Resource看成一个包工头;
这个AbstractResource呢就是这个包工头的副手;
干活的肯定不是这二位了,其实实际干活是ClassPathResource,FileSystemResource,ServletContextResource这三位;
这活得分工去干才能有效率嘛,即工种。那个谁干这个,那那你干那个。
ClassPathResource这个哥们就是专门就做classpath开头的xml文件路径解析的。这个classpath,这个东东你可以理解他就是一个文件夹路径,即源文件路径。什么是源文件路径呢?以web项目为例看下图:
classpath: 就代表 项目名/WEB-INF/classes
Resource resource = new ClassPathResource("classpath:bean.xml"); -- 项目名/WEB-INF/classes/bean.xml
FileSystemResource,他是负责做绝对路径文件的解析的,即:
Resource resource = new FileSystemResource("D:/projects/spring02/src/bean.xml");
ServletContextResource,这哥们就不介绍了,有兴趣的自己去了解吧,面试也几乎不会问的。
说到这,大家暂停一下,我提个问题,假如在做项目的时候,这个两种文件路径我都要使用,那岂不是我得去雇佣这两位同时给我干活,那岂不是太亏了点呢!那有没有两种工作都会干的呢?当然是肯定有啦,,有点尴尬
Resource又请了一位副手,即又扩展了一个类,就是ResourceLoader,这个resourceloader就把这个两个活全都揽过来了。具体干活同样也不是他resourceloader,而在他手底下干活的PathMatchingResourcePatternResolver,名字有点长,根据字面上的意思,中文名为路径匹配资源模式解析器
PathMatchingResourcePatternResolver resource = new PathMatchingResourcePatternResolver("D:/projects/spring02/src/bean.xml");
PathMatchingResourcePatternResolver resource = new PathMatchingResourcePatternResolver("classpath:bean.xml");
这两个活他就都可以干了,并且项目中基本都用他了。
讲到这,是不是感觉这个Spring的资源加载也不过如此嘛!!呵呵