大家都知道Java讀普通文件是通過(guò)Basic I/O 中的InputStream、OutStream姐浮、Reader谷遂、Writer 等實(shí)現(xiàn)的。在spring 框架中卖鲤,它是怎樣識(shí)別xml這個(gè)配置文件的呢肾扰?
這就要靠IoC容器的兩個(gè)接口BeanFactory?和ApplicationContext:
BeanFactory?(接口)
|--------XmlBeanFactory(實(shí)現(xiàn)類)
ApplicationContext?(接口)
|-------- ClassPathXmlApplicationContext(實(shí)現(xiàn)類)
|---------FileSystemXmlApplicationContext(實(shí)現(xiàn)類)
|---------XmlWebApplicationContext(實(shí)現(xiàn)類)
BeanFactory是一個(gè)接口,Spring使用它來(lái)實(shí)例化蛋逾、配置和管理對(duì)象集晚,它里面有一個(gè)getBean()方法,只提供了spring最基礎(chǔ)的特征区匣,一般使用在低內(nèi)存的情況下偷拔,如Applet。一般的spring項(xiàng)目用它的派生類ApplicationContext亏钩,這個(gè)類會(huì)自動(dòng)解析我們配置的xml文件莲绰,然后根據(jù)配置的bean來(lái)new對(duì)象,將new好的對(duì)象放進(jìn)一個(gè)Map中铸屉,鍵是bean的id,值就是new的對(duì)象钉蒲。
這種方式xml文件必須在項(xiàng)目的build path里面,一般用classpath:作為前綴,也可以省略
1)/src目錄下
ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:appcontext.xml");?
ApplicationContext factory=new ClassPathXmlApplicationContext("appcontext.xml");?
2)/ src/conf 目錄下的?
ApplicationContext factory=new ClassPathXmlApplicationContext("conf/appcontext.xml");
3)同時(shí)加載多個(gè)xml文件
ApplicationContext factory=new ClassPathXmlApplicationContext(new String[] {"bean1.xml","bean2.xml"});
2.文件系統(tǒng)的路徑
xml文件的絕對(duì)路徑彻坛,一般用file:作為前綴顷啼,也可以省略
ApplicationContext factory=new FileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml");?
ApplicationContext factory=new FileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");
3. XmlWebApplicationContext是專為Web工程定制的
ServletContext servletContext = request.getSession().getServletContext();?
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext );?