通俗易懂的Spring学习一、IOC之资源加载

IOC到底是干啥的呢?

他啊,就是创建对象的,并且把他们管理起来。所谓的管理就是管理对象与对象之间的关系,还有是不是单例啊、需不需懒加载啊、生命周期啊等等,这些啊这时可以不用去深究;

如何加载资源呢?

首先为什么要加载资源呢?资源是啥,就是配置文件嘛,XML啊。

上面说了IOC是要去创建对象的,那他去哪里找对象呢。得有个指南或说明书之类的来告诉他吧,谁谁在哪,这个谁谁就是类。所以要达成IOC的工作就得先加载资源。

说到加载,首先看看这个Spring提供了那些工具,通俗易懂的Spring学习一、IOC之资源加载

这个Resource,你们可把这个Resource看成一个包工头;

这个AbstractResource呢就是这个包工头的副手;

干活的肯定不是这二位了,其实实际干活是ClassPathResource,FileSystemResource,ServletContextResource这三位;

这活得分工去干才能有效率嘛,即工种。那个谁干这个,那那你干那个。

ClassPathResource这个哥们就是专门就做classpath开头的xml文件路径解析的。这个classpath,这个东东你可以理解他就是一个文件夹路径,即源文件路径。什么是源文件路径呢?以web项目为例看下图:

 

通俗易懂的Spring学习一、IOC之资源加载

 

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的资源加载也不过如此嘛!!呵呵