网站开发 APP开发 小程序开发 SEO优化 公司新闻

BeanDefanition的Resource定位

2018-05-30 10:10:28
1311

  这是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


请您留言

感谢您的关注,当前客服人员不在线,请填写一下您的信息,我们会尽快和您联系。

提交