Spring有两个核心接口:BeanFactory 和 ApplicationContext,其中ApplicationContext是BeanFactory 的子接口。它们代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean,Bean是Spring管理的基本单位,在基于spring的javaEE应用中,所有的组件都被当成bean来处理。很多时候,ApplicationContext 都是以声明式方式操作容器,无须手动创建。例如:可利用像ContextLoader 的支持类,在 Web 应用启动时自动创建 ApplicationContext。当然,也可以采用编程方式创建 ApplicationContext。
Spring中ApplicationContext的三种不同实现:
1)FileSystemXmlApplicationContext:这种方式是通过程序在初始化的时候,导入Bean配置文件,然后得到Bean实例。ApplicationContext ctx = newFileSystemXmlApplicationContext("spring-config.xml"); //当前路径加载单个配置文件String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};ApplicationContext ctx = new FileSystemXmlApplicationContext(locations ); //同时加载多个配置文件ApplicationContext ctx = new FileSystemXmlApplicationContext("D:/project/bean.xml");//根据具体路径加载文件。对于FileSystemXmlApplicationContext:
默认表示的是两种:
1.没有盘符的是项目工作路径,即项目的根目录;
2.有盘符表示的是文件绝对路径.
注意:如果要使用classpath路径,需要前缀classpath:
2)ClassPathXmlApplicationContext,ApplicationContext ctx = new ClassPathXmlApplicationContext("bean.xml");//加载单个配置文件,String[] locations = {"bean1.xml", "bean2.xml", "bean3.xml"};ApplicationContext ctx = newClassPathXmlApplication(locations);//同时加载多个配置文件。或者用通配符同时加载多个配置文件:ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:/*.xml");
注:其中FileSystemXmlApplicationContext和ClassPathXmlApplicationContext与BeanFactory的xml文件定位方式一样是基于路径的。ClassPathXmlApplicationContext和FileSystemXmlApplicationContext的区别如下:
1、classpath:前缀是不需要的,默认就是指项目的classpath路径下面;
2、如果要使用绝对路径,需要加上file:前缀表示这是绝对路径;
3、XmlWebApplicationContext:在B/S系统中,通常在web.xml初始化bean的配置文件,然后由WebAppliCationContextUtil得到ApplicationContext,ServletContext servletContext =request.getSession().getServletContext();ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext);