轉http://www.cnblogs.com/vigarbuaa/p/3616947.html
Spring容器最基本的接口就是BeanFactory. BeanFactory負責配置丁鹉、創(chuàng)建妒潭、管理Bean,它有一個子接口ApplicationContext,也稱為Spring上下文揣钦。Spring容器負責管理Bean與Bean之間的信賴關系雳灾。
BeanFactory有很多實現(xiàn)類,通常使用 org.springframework.beans.factory.xml.XmlBeanFactory類冯凹。但對于大部分J2EE應用而言谎亩,推薦使 用ApplicationContext. ApplicationContext是BeanFactory的子接口,其常用實現(xiàn)類是org.springframework.context.support.FileSystemXmlApplicationContext 和org.springframework.context.support.ClassXmlAplicationContext 。
Springr的配置信息通常采用XML配置文件來設置匈庭,因此夫凸,創(chuàng)建BeanFactory實例時,應該提供XML配置文件作為參數(shù)阱持。夭拌、
下面詳細介紹ApplicationContext的實際運用:
一:ClassPathXmlApplicationContext
1.沒有前綴:默認為項目的classpath下相對路徑
ApplicationContext appCt = new ClassPathXmlApplicationContext("app.spring.xml");
2.前綴classpath:表示的是項目的classpath下相對路徑
ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:app.spring.xml");
3.使用前綴file 表示的是文件的絕對路徑
ApplicationContext appCt = new ClassPathXmlApplicationContext("file:D:/app.spring.xml");
4.可以同時加載多個文件
String[] xmlCfg = new String[] { "classpath:base.spring.xml","app.spring.xml"};
ApplicationContext appCt = new ClassPathXmlApplicationContext(xmlCfg);
5.使用通配符加載所有符合要求的文件
ApplicationContext appCt = new ClassPathXmlApplicationContext("*.spring.xml");
二:FileSystemXmlApplicationContext
1.默認為項目工作路徑 即項目的根目錄
ApplicationContext appCt2 = new FileSystemXmlApplicationContext("src/main/resources/app.spring.xml");
2.前綴classpath:表示的是項目的classpath下相對路徑
ApplicationContext appCt2 = new FileSystemXmlApplicationContext("classpath:app.spring.xml");
3.使用前綴file 表示的是文件的絕對路徑
ApplicationContext appCt2 = new FileSystemXmlApplicationContext("file:D:/app.spring.xml ");
ApplicationContext appCt2 = new FileSystemXmlApplicationContext("D:/app.spring.xml ");
4.可以同時加載多個文件
String[] xmlCfg = new String[] { "src/main/resources/base.spring.xml","classpath:app.spring.xml"};
ApplicationContext appCt2 = new FileSystemXmlApplicationContext(xmlCfg);
5.使用通配符加載所有符合要求的文件
ApplicationContext appCt2 = new FileSystemXmlApplicationContext("classpath:*.spring.xml");
詳細代碼如下:
Java代碼
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import aoplog.LogAfterAdvice;
import aoplog.LogBeforeAdvice;
/**
- @author Michael
*/
public class TestApplicationContext {
/**
* @param args
*/
public static void main(String[] args) {
/**
* ClassPathXmlApplicationContext
*/
// 沒有前綴:默認為項目的classpath下相對路徑
ApplicationContext appCt = new ClassPathXmlApplicationContext(
"app.spring.xml" );
// 前綴classpath:表示的是項目的classpath下相對路徑
// ApplicationContext appCt = new ClassPathXmlApplicationContext(
// "classpath:app.spring.xml");
// 使用前綴file 表示的是文件的絕對路徑
// ApplicationContext appCt = new ClassPathXmlApplicationContext(
// "file:D:/app.spring.xml");
LogBeforeAdvice logBefore = (LogBeforeAdvice) appCt
.getBean("logBefore" );
System.out.println("ClassPathXmlApplicationContext test:"
+ logBefore.getClass());
// 利用通配符文件加載
ApplicationContext appCtXx = new ClassPathXmlApplicationContext(
"*.spring.xml" );
// 多文件加載
String[] xmlCfg = new String[] { "classpath:base.spring.xml" ,
"myapp.spring.xml" };
ApplicationContext appCtMore = new ClassPathXmlApplicationContext(
xmlCfg);
/*
* FileSystemXmlApplicationContext
*/
// 默認為項目工作路徑 即項目的根目錄
ApplicationContext appCt2 = new FileSystemXmlApplicationContext(
"src/main/resources/app.spring.xml" );
// 前綴classpath:表示的是項目的classpath下相對路徑
// ApplicationContext appCt2 = new FileSystemXmlApplicationContext(
// "classpath:app.spring.xml");
// 使用前綴file 表示的是文件的絕對路徑
// ApplicationContext appCt2 = new FileSystemXmlApplicationContext(
// "file:D:/app.spring.xml");
LogAfterAdvice logAfter = (LogAfterAdvice) appCt2.getBean("logAfter" );
System.out.println("FileSystemXmlApplicationContext test:"
+ logAfter.getClass());
}
我出現(xiàn)的問題是ClassPathXmlApplicationContext(new String[] {"a.xml","b.xml"});配置兩個a.xml,b.xml,之后編譯運行衷咽,
然后在一個a.xml里面<import src="b.xml">,然后ClassPathXmlApplicationContext("a.xml")報錯說什么b.xml路徑不對啼止。我就改了
classpath:b.xml就行了再改回去也可以了 - -