Spring中載入xml配置檔案的常用的幾種方式
專案中一個需求就是所有的功能都是外掛的形式裝入系統,這就需要利用Spring去動態載入某一位置下的配置檔案,就總結了下Spring中載入xml配置檔案的方式, xml是最常見的spring 應用系統配置源。Spring中的幾種容器都支援使用xml裝配bean,包括:
XmlBeanFactory,
ClassPathXmlApplicationContext,
FileSystemXmlApplicationContext,
XmlWebApplicationContext,
.....
一: XmlBeanFactory 引用資源
1.Resource cr = new ClassPathResource("applicationContext.xml");
BeanFactory bf=new XmlBeanFactory(cr);
UserDao userDao = (UserDao)bf.getBean("userDao");
二: ClassPathXmlApplicationContext 編譯路徑
使用ClassPathXmlApplicationContext物件獲取,必須把applicationContext.xml放置到類的載入路徑中,也就是Src下面
1.ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:appcontext.xml");
// src目錄下的
2.ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao)context.getBean("userDao");
3.ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext-oracle.xml","applicationContext.xml"});
UserDao userDao = (UserDao)context.getBean("userDao");
// src/conf 目錄下的
4.ApplicationContext factory=new ClassPathXmlApplicationContext("conf/appcontext.xml");
5.ApplicationContext factory=new ClassPathXmlApplicationContext("file:G:/Test/src/appcontext.xml");
三: FileSystemXmlApplicationContext用檔案系統的路徑
必須把applicationContext.xml放置到工程目錄下面,也就是專案路徑的下面
1.ApplicationContext factory=new FileSystemXmlApplicationContext("src/appcontext.xml");
//使用了 classpath: 字首,作為標誌, 這樣,FileSystemXmlApplicationContext 也能夠讀入classpath下的相對路徑
沒有classpath的話就是從當前的工作目錄
2.ApplicationContext factory=new FileSystemXmlApplicationContext("classpath:appcontext.xml");
3.ApplicationContext factory=new FileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml");
4.ApplicationContext factory=new FileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");
四: XmlWebApplicationContext是專為Web工程定製的。
1.ServletContext servletContext = request.getSession().getServletContext();
ApplicationContext ctx= WebApplicationContextUtils.getWebApplicationContext(servletContext );
2.XmlWebApplicationContext ctx = new XmlWebApplicationContext(); ctx.setConfigLocations(new String[] {"/WEB-INF/applicationContext.xml"); ctx.setServletContext(pageContext.getServletContext());
ctx.refresh();
UserDao userDao = (UserDao ) ctx.getBean("userDao ");
五:Web 應用啟動時載入多個配置檔案
通過ContextLoaderListener 也可載入多個配置檔案,在web.xml檔案中利用
<context-pararn>元素來指定多個配置檔案位置,其配置如下:
<context-param>
<!-- Context Configuration locations for Spring XML files -->
<param-name>contextConfigLocation</param-name>
<param-value>
./WEB-INF/**/Appserver-resources.xml,
classpath:config/aer/aerContext.xml,
classpath:org/codehaus/xfire/spring/xfire.xml,
./WEB-INF/**/*.spring.xml
</param-value>
</context-param>
參考文件: