1.利用ClassPathXmlApplicationContext 可以從classpath中讀取XML文件
(1) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
UserDao userDao = (UserDao)context.getBean("userDao");
(2) ClassPathXmlApplicationContext resource = new ClassPathXmlApplicationContext(new String[]{"applicationContext-ibatis-Oracle.xml","applicationContext.xml","applicationContext-data-oracle.xml"});
BeanFactory factory = resource;
UserDao userDao = (UserDao) ;
factory.getBean("userDao");
- 利用ClassPathResource 可以從classpath中讀取XML文件 Resource cr = new ClassPathResource("applicationContext.xml");
BeanFactory bf=new XmlBeanFactory(cr);
UserDao userDao = (UserDao)bf.getBean("userDao");
加載一個(gè)xml文件org.springframework.beans.factory.config.PropertyPlaceholderConfigurer不起作用
3.利用XmlWebApplicationContext讀取 從Web應(yīng)用程序的文件架構(gòu)中皂吮,指定相對(duì)位置來(lái)讀取定義文件辆沦。 XmlWebApplicationContext 的建構(gòu)子無(wú)法帶參數(shù),參考API文件會(huì)發(fā)現(xiàn)翠肘,預(yù)設(shè)的location會(huì)指向/WEB-INF/applicationContext.xml檔案。
使用其 public static屬性DEFAULT_CONFIG_LOCATION可取得此預(yù)設(shè)檔名辫秧。由於我使用MyEclipse束倍,預(yù)設(shè)會(huì)多一個(gè)"/WebRoot"的 目錄在WEB-INF之前,因此若在web project裡有一些與web無(wú)關(guān)的程式要使用context時(shí)(例如處理一些MVC架構(gòu)中的"M"的部份)盟戏,就無(wú)法使用 XmlWebApplicationContext來(lái)讀取bean定義檔绪妹,因?yàn)閐efault location會(huì)差一個(gè)"WebRoot"的目錄。
即 使在web.xml裡面柿究,在DispatcherServlet定義中重新定義contextConfigLocation也一樣(此定義可以 override掉XmlWebApplicationContext中的DEFAULT_CONFIG_LOCATION值)邮旷,因?yàn)榕cweb無(wú)關(guān)的程式 並不會(huì)經(jīng)過(guò)web.xml的定義檔設(shè)定。目前我還沒(méi)試成功過(guò)XmlWebApplicationContext取得bean定義檔蝇摸,使用 ClassPathXmlApplicationContext反而會(huì)快一些婶肩。
XmlWebApplicationContext ctx = new XmlWebApplicationContext(); ctx.setConfigLocations(new String[] {"/WEB-INF/ applicationContext.xml"); ctx.setServletContext(pageContext.getServletContext()); ctx.refresh(); UserDao userDao = (UserDao ) ctx.getBean("userDao ");
4.利用FileSystemResource讀取 Resource rs = new FileSystemResource("D:/tomcat/webapps/test/WEB-INF/classes/ applicationContext.xml"); BeanFactory factory = new XmlBeanFactory(rs); UserDao userDao = (UserDao )factory.getBean("userDao"); 值得注意的是:利用FileSystemResource,則配置文件必須放在project直接目錄下貌夕,或者寫(xiě)明絕對(duì)路徑律歼,否則就會(huì)拋出找不到文件的異常
5.利用FileSystemXmlApplicationContext讀取 可以指定XML定義文件的相對(duì)路徑或者絕對(duì)路徑來(lái)讀取定義文件。
方法一: String[] path={"WebRoot/WEB-INF/applicationContext.xml","WebRoot/WEB-INF/applicationContext_task.xml"}; ApplicationContext context = new FileSystemXmlApplicationContext(path);
方法二: String path="WebRoot/WEB-INF/applicationContext*.xml"; ApplicationContext context = new FileSystemXmlApplicationContext(path);
方法三: ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:地址"); 沒(méi)有classpath的話就是從當(dāng)前的工作目錄