Spring——IOC容器(常用装载文件方式)
一、BeanFactory加载文件(默认【懒加载】配置,加载文件时,不会生成实例,仅在getBean()获取该实例时new对象)
1.FileSystemResource 系统文件路径装载与解析xml文档
① 相对路径 Resource resource = new FileSystemResource("applicationContext_1.xml"); Resource resource = new FileSystemResource("config/applicationContext_2.xml"); ② 绝对路径 Resource resource = new FileSystemResource("E:\\zhaorong\\workspace\\day01_spring_ioc容器\\applicationContext_1.xml");
注意:相对路径是相对于项目根目录
1 BeanFactory factory= new XmlBeanFactory(resource);
2. ClassPathResource 根据类路径装载并解析xml文档(推荐这种方式)
1 Resource resource = new ClassPathResource("config/applicationContext_3.xml"); 2 BeanFactory factory= new XmlBeanFactory(resource);
注意:路径相对于src的路径
二、ApplicationContext加载文件(【非懒加载】配置,加载文件时,生成所有实例,同时对xml文件配置信息进行校验)
1.FileSystemXmlApplicationContext 系统文件路径装载与解析xml文档
2. ClassPathXmlApplicationContext 根据类路径装载并解析xml文档-----------【推荐使用】
{
1 //读取多个配置文件 2 String[] configLocations = new String[]{"applicationContext.xml","applicationContext4.xml"}; 3 BeanFactory factory = new ClassPathXmlApplicationContext(configLocations);
}
注意:这两种方法与BeanFactory加载文件的相同,只是生成实例的时机不同
3. XmlWebApplicationContext:通过ContextLoaderListener从内部导入context文件(结合web环境使用)(需添加支持web开发jar包: spring-web.jar)
1 XmlWebApplicationContext factory = new XmlWebApplicationContext(); 2 factory.setServletContext(request.getSession().getServletContext());//配置application应用环境 3 factory.setConfigLocation("/WEB-INF/applicationContext.xml");//配置applicationContext.xml路径 4 factory.refresh();
注意:默认路径/WEB-INF/applicationContext.xml,相对路径于网站根
4.WebApplicationContext:通过ContextLoaderListener从内部导入context文件(结合web环境使用)
① 需添加支持web开发jar包: spring-web.jar
② 在web.xml添加监听:
<!-- spring监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置applicationContext.xml路径 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/applicationContext.xml</param-value>
</context-param>
1 ServletContext application = request.getSession().getServletContext(); 2 WebApplicationContext factory = WebApplicationContextUtils.getWebApplicationContext(application);