码迷,mamicode.com
首页 > 移动开发 > 详细

ClassPathXmlApplicationContext源码分析

时间:2019-12-25 13:04:48      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:efault   ring   util   实例化   文件   abstract   父类   extends   resource   

ClassPathXmlApplicationContext源码解读

入口函数

通过ClassPathXmlApplicationContext类构造方法启动父类AbstractApplicationContext的函数refresh方法

ClassPathXmlApplicationContext源码:

package org.springframework.context.support;
?
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
?
public class ClassPathXmlApplicationContext extends AbstractXmlApplicationContext {
  @Nullable
  private Resource[] configResources;
?
  public ClassPathXmlApplicationContext() {
  }
?
  public ClassPathXmlApplicationContext(ApplicationContext parent) {
      super(parent);
  }
?
  public ClassPathXmlApplicationContext(String configLocation) throws BeansException {
      this(new String[]{configLocation}, true, (ApplicationContext)null);
  }
?
  public ClassPathXmlApplicationContext(String... configLocations) throws BeansException {
      this(configLocations, true, (ApplicationContext)null);
  }
?
  public ClassPathXmlApplicationContext(String[] configLocations, @Nullable ApplicationContext parent) throws BeansException {
      this(configLocations, true, parent);
  }
?
  public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh) throws BeansException {
      this(configLocations, refresh, (ApplicationContext)null);
  }
?
  public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh, @Nullable ApplicationContext parent) throws BeansException {
      super(parent);
      this.setConfigLocations(configLocations);
      if (refresh) {
          this.refresh();
      }
?
  }
?
  public ClassPathXmlApplicationContext(String path, Class<?> clazz) throws BeansException {
      this(new String[]{path}, clazz);
  }
?
  public ClassPathXmlApplicationContext(String[] paths, Class<?> clazz) throws BeansException {
      this(paths, clazz, (ApplicationContext)null);
  }
?
  public ClassPathXmlApplicationContext(String[] paths, Class<?> clazz, @Nullable ApplicationContext parent) throws BeansException {
      super(parent);
      Assert.notNull(paths, "Path array must not be null");
      Assert.notNull(clazz, "Class argument must not be null");
      this.configResources = new Resource[paths.length];
?
      for(int i = 0; i < paths.length; ++i) {
          this.configResources[i] = new ClassPathResource(paths[i], clazz);
      }
?
      this.refresh();
  }
?
  @Nullable
  protected Resource[] getConfigResources() {
      return this.configResources;
  }
}
?

ClassPathXmlApplicationContext(String configLocation) 一般使用这个方法,传入一个string类型的xml文件名,通过xml配置文件指定特定的组件,实例化到bean工厂里,即DefaultSingletonBeanRegistry 下的Map集合里

ClassPathXmlApplicationContext(String... configLocations):可传入多个xml,装配到spring,bean工厂

public ClassPathXmlApplicationContext(String[] configLocations, boolean refresh) :传入String数组

@Test
  public void TestXmlBean(){
      ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("classpath:xmlRegBean.xml");
      Animal cat =context.getBean("cat", Cat.class);
      cat.getName();
  }
?
  @Test
  public void TestMultiXml(){
          ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext("classpath:xmlRegBean.xml","classpath:xmlRegBean2.xml");
          Animal cat =context.getBean("cat", Cat.class);
          cat.getName();
          System.out.println(cat);
          Animal cat2 =context.getBean("cat2", Cat.class);
          cat2.getName();
          System.out.println(cat2);
  }
   
@Test
  public void TestArrayXml(){
      String[] arrXml = {"classpath:xmlRegBean.xml","classpath:xmlRegBean2.xml"};
      ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext(arrXml,true);
      Animal cat =context.getBean("cat", Cat.class);
      cat.getName();
      System.out.println(cat);
      Animal cat2 =context.getBean("cat2", Cat.class);
      cat2.getName();
      System.out.println(cat2);
  }

 

ClassPathXmlApplicationContext源码分析

标签:efault   ring   util   实例化   文件   abstract   父类   extends   resource   

原文地址:https://www.cnblogs.com/nicklin/p/12095885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!