[转]Spring加载配置文件的几种方式
第一种:
??? //获得spring资源,加载配置文件
??? Resource resource = new ClassPathResource("applicationContext.xml");
??? //获得spring的容器实例,BeanFactory这是一个抽象的接口
??? BeanFactory factory = new XmlBeanFactory(resource);
??? //从容器中找到我们的bean,也就是我们的类
??? IHello hi = (IHello)factory.getBean("hellobean");
第二种:
??? //从项目的src目录下加载applicationContext.xml
??? ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
??? IHello hi = (IHello)ac.getBean("hellobean");
第三种:
??? //从整个文件系统中加载配置文件
??? new FileSystemXmlApplicationContext("WebRoot/WEB-INF/applicationContext.xml");
??? ApplicationContext ac = new FileSystemXmlApplicationContext("src/applicationContext.xml");
第四种:
??? ServletContext servletContext = request.getSession().getServletContext();
??? ApplicationContext factory = WebApplicationContextUtils.getWebApplicationContext(servletContext);
??? 可以用在spring mvc的Controller中,从WEB-INF/下加载配置文件 。
public void contextInitialized(ServletContextEvent sce) {this.context = sce.getServletContext();this.webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);this.context.setAttribute("WEBAPPLICATIONCONTEXT", webApplicationContext);}
?
在web程序应用中,这是几种常用的spring配置文件加载方式。
?
?
?
单元测试:
public class TestCompare extends TestCase {private static BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext-*.xml");public void testCompare(){String countryCode = "TH";HotelFacade hotelFacade = (HotelFacade)factory.getBean("hotelFacade");CompareHotelFacade compareHotelFacade = (CompareHotelFacade)factory.getBean("compareHotelFacade");HotelDbFacade hotelDbFacade = (HotelDbFacade)factory.getBean("hotelDbFacade");HotelDownloadControll hdc = new HotelDownloadControll();hdc.setHotelFacade(hotelFacade);hdc.setCompareHotelFacade(compareHotelFacade);hdc.setHotelDbFacade(hotelDbFacade);hdc.compare(countryCode);}}
?..