spring容器继承关系图:
说明:
ApplicationContext是BeanFactory的子类,与BeanFactory功能相比,功能更加丰富。
平时常用的Bean容器有3个,它们都是ApplicationContext的子类,如图所示。
- ClassPathXmlApplicationContext主要用在在类路径加载xml文件的场景,该容器从 XML 文件中加载已被定义的 bean。在这里,你不需要提供 XML 文件的完整路径,只需正确配置 CLASSPATH 环境变量即可,因为,容器会从 CLASSPATH 中搜索 bean 配置文件。
- FileSystemXmlApplicationContext主要用在在文件系统加载xml文件的场景,该容器从 XML 文件中加载已被定义的 bean。在这里,你需要提供给构造器 XML 文件的完整路径。
- XMLWebApplicationContext主要用在在Web中加载xml文件的场景,该容器会在一个 web 应用程序的范围内加载 XML 文件中已被定义的 bean。
代码示例:
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
ApplicationContext context = new FileSystemXmlApplicationContext
("C:/myworkspace/workspace/springtest/src/Beans.xml");
BeanFactory和ApplicationContext在Bean加载方面有什么不同呢?
BeanFactory是延迟加载。BeanFactory初始化完成后,并不加载任何Bean,只有在第一次获取Bean时,BeanFactory才会加载该Bean。而ApplicationContext会在启动后主动加载好单例Bean,这样,从ApplicationContext中获取Bean时效率会更高。