Spring容器最基本的接口就是BeanFactory. BeanFactory負(fù)責(zé)配置椿疗、創(chuàng)建、管理Bean羹蚣,它有一個子接口ApplicationContext,也稱為Spring上下文舔涎。Spring容器負(fù)責(zé)管理Bean與Bean之間的信賴關(guān)系脸候。
BeanFactory有很多實(shí)現(xiàn)類,通常使用org.springframework.beans.factory.xml.XmlBeanFactory類讯屈。但對于大部分J2EE應(yīng)用而言蛋哭,推薦使用ApplicationContext. ApplicationContext是BeanFactory的子接口,其常用實(shí)現(xiàn)類是org.springframework.context.support.FileSystemXmlApplicationContext和org.springframework.context.support.ClassXmlAplicationContext涮母。
Springr的配置信息通常采用XML配置文件來設(shè)置谆趾,因此,創(chuàng)建BeanFactory實(shí)例時哈蝇,應(yīng)該提供XML配置文件作為參數(shù)棺妓。
下面詳細(xì)介紹ApplicationContext的實(shí)際運(yùn)用:
一:ClassPathXmlApplicationContext
1.沒有前綴:默認(rèn)為項(xiàng)目的classpath下相對路徑
ApplicationContext appCt = new ClassPathXmlApplicationContext("app.spring.xml");
2.前綴classpath:表示的是項(xiàng)目的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.默認(rèn)為項(xiàng)目工作路徑 即項(xiàng)目的根目錄
ApplicationContext appCt2 = new FileSystemXmlApplicationContext("src/main/resources/app.spring.xml");
2.前綴classpath:表示的是項(xiàng)目的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");
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.ClassPathXmlApplicationContext;
importorg.springframework.context.support.FileSystemXmlApplicationContext;
importaoplog.LogAfterAdvice;
importaoplog.LogBeforeAdvice;
/**
*?@author?Michael
*
*/
publicclassTestApplicationContext?{
/**
*?@param?args
*/
publicstaticvoidmain(String[]?args)?{
/**
*?ClassPathXmlApplicationContext
*/
//?沒有前綴:默認(rèn)為項(xiàng)目的classpath下相對路徑
ApplicationContext?appCt?=newClassPathXmlApplicationContext(
"app.spring.xml");
//?前綴classpath:表示的是項(xiàng)目的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?=newClassPathXmlApplicationContext(
"*.spring.xml");
//?多文件加載
String[]?xmlCfg?=newString[]?{"classpath:base.spring.xml",
"myapp.spring.xml"};
ApplicationContext?appCtMore?=newClassPathXmlApplicationContext(
xmlCfg);
/*
*?FileSystemXmlApplicationContext
*/
//?默認(rèn)為項(xiàng)目工作路徑?即項(xiàng)目的根目錄
ApplicationContext?appCt2?=newFileSystemXmlApplicationContext(
"src/main/resources/app.spring.xml");
//?前綴classpath:表示的是項(xiàng)目的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());
}
}