这是SpringIOC初始化的第一步,找到水
当我们以编程的方式去使用Factory时,首先会定义一个对象的Resource来定位要使用的BeadnDefinition,这时我们使用的是ClassPathResouce,这就以为着,这个Resource会类路径去寻找这个xml文件,虽然说Resource是资源的意思,但是这不意味着DefaultListableFacory能够直接使用这个Resource资源,这个资源是要被经过净化的呢,Spring通过BeanDefinitionReader对这些Resource资源进行一些处理,这时我们就可以跟明显的看到直接使用ApplicationContext的好处了,applicationContext里面已经有很多加载不同Resource的Reader的实现,而如果直接使用DefaultListableBeanFactory的话需要为他配置特定的ResourceReader才能完成相应的功能,当然么有绝对的利弊,直接使用DefaultListableFactory更具有灵活性。
回到我们经常使用的ApplicationContext中,例如FileSystemXmlApplicationContext,ClassPathXmlApplication以及XmlWebApplicationContext中,我们很简单的能从他们的名字就能看到FileSystem使用文件系统中寻找的Resource,ClassPath是直接从类路径去寻找文件的载入Resource,webXml是直接从网上载入Resource
我们以文件系统为例分析如何完成定位的,
FileSystemXmlApplicationContext中有好多个构造器,最大的,最长的构造有三个参数
其余的分别是一个或者是两个参数,都是调用了最大的参数构造器,这个构造是这样的
public FileSystemXmlApplicationContext(String[] configLOcation, boolean refresh, ApplicationContext parent){
super(parent);
setConfigLocation(configLOcation);
If(refresh){refresh()}
}
我们可以清楚的看到该方法有三个作用:①设置父类容器 ②设置资源路径 ③调用初始化方法
该类中还有另一个方法getResourceByPath()
Protect Resorce getResourceByPath(String path){
If(path!=null && path.startWith(“/”)){path=path.subString(1) }
Return new FileSystemResource(path);
}
该方法在BeanDefanitionReader中被调用采用了模板的形式具体的定位在各个子类实现返回某种类型的Resource
咨询热线
010-85377344
135-21581588
微信客服
QQ客服
3026106565 点击咨询