菜鸟的成长之路——应用上下文(ApplicationContext)

  如果说BeanFactory是spring的心脏,那么ApplicationContext就是spring的身躯了。ApplicationContext由BeanFactory派生而来,提供了更多面向实际应用的的功能。还记得上节课我们提到XmlBeanFactory过期的api吗?他的代替方法就是ApplicationContext。

1、ApplicationContext是什么?

  ApplicationContext,即应用上下文。ApplicationContext是spring的一个接口,它主要有两个实现类,ClassPathXmlApplicationContext和FileSystemXmlApplicationContext。
下面我们来看一下ApplicationContext的结构体系:

菜鸟的成长之路——应用上下文(ApplicationContext)_第1张图片
  可以看得出来,ApplicationContext接口的最终父接口是BeanFactory,而最终的实现类,正是我们刚才所说的ClassPathXmlApplicationContext和FileSystemXmlApplicationContext两个类。

2、两个最终实现类有什么区别?

  ClassPathXmlApplicationContext默认从类路径加载配置文件,而FileSystemXMLApplicationContext默认从文件系统中加载配置文件,其他方面没有很大区别。

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class SpringTest{
    public static void main(String[] args) {
//      ApplicationContext content = new FileSystemXmlApplicationContext("//Users/beijingduanluo/Documents/applicationContext.xml");
        ApplicationContext content = new ClassPathXmlApplicationContext("applicationContext.xml");
        People peo = (People) content.getBean("peo");
        System.out.println(peo);
    }
}

  值得注意的是,FileSystemXmlApplicationContext的构造传参如果是字符串并且第一个字符是“/”的话,spring会自动去掉这个“/”,所以必要的时候,需要多谢个“/”,就像上面的例子。

3、应用上下文相对于BeanFactory来说,有哪些扩展?

  我们分析一下ApplicationContext相对于BeanFactory多实现的这些接口:

  • ApplicationEventPublisher:使容器拥有了事件的功能,包括容器启动事件、关闭事件等。
  • MessageSource:为应用提供i18n国际化消息访问的功能。
  • ResourcePatternResolver:这个接口让容器可以通过带前缀的ant风格的资源文件路径装载spring的配置文件,其实就是放弃了spring的Resource类,并直接在ApplicationContext构造函数传参带通配符的路径字符串。
  • LifeCycle:该接口提供了start()和stop()两个方法,主要用于控制异步处理。
      这些接口,是BeanFactory没有,而ApplicationContext特有的,也就意味着ApplicationContext要比BeanFactory多出这些功能。所以我们经常这么来描述BeanFactory和ApplicationContext的关系:BeanFactory面向的是程序底层,ApplicationContext面向的应用功能。

你可能感兴趣的:(spring,spring)