Spring加載XML配置文件


原創鏈接:http://www.cnblogs.com/yanqin/p/5282929.html(允許轉載,但請注明原創鏈接) 

BeanFactory加載單個文件

當使用beanfactory去獲取bean,當你只是實例化該容器,那么容器內的bean不會被實例化,只有當使用某個bean(getBean)時,才會實時去實例化該bean。

FileSystemResource和ClassPathResource都是實現了Resource接口,他們都可以用來加載XML文件。
BeanFactory是需要時getBean(),才會去加載。
具體代碼如下:
Resource resource1 = new ClassPathResource("文件.xml");
Resource resource2 = new FileSystemResource("盤符:/項目路徑/src/文件.xml");
BeanFactory factory = new XmlBeanFactory(resource);
ClassPathResource加載文件,是從源文件夾下(比如src),去找文件。
注:web項目中,不同源文件夾的文件最終都會被編譯到classes目錄中,所以不同源文件夾下的文件不能同名,不然會覆蓋。FileSystemResource加載文件,是從盤符為起點,去找文件。 

 

BeanFactory加載單個或多個文件,並且不再分file classpath不同類來加載

當使用beanfactory去獲取bean,當你只是實例化該容器,那么容器內的bean不會被實例化,只有當使用某個bean(getBean)時,才會實時去實例化該bean。

//ResourceLoader是加載文件的接口。
//ResourcePatternResolver接口繼承了ResourceLoader接口。
//PathMatchingResourcePatternResolver類實現了ResourcePatternResolver接口。
//BeanFactory是需要時才加載,也就是代碼運行getBean()才會去加載。
//Spring中加載文件的代碼如下:
package com.tz.dao;
 
import java.io.IOException;

import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;

public class B {

    public static void main(String[] args) throws IOException {
        ResourcePatternResolver rp = new PathMatchingResourcePatternResolver();

        // 空1,此處可填入classpath或file,classpath是以項目src目錄為起點,file是以盤符為起點。
        // 空2,是文件的路徑+名字。
        Resource resource = rp.getResource("空1:空2");

        // classpath*
        // 空1后面加*,如classpath*,這個意思是,在空2的路徑下查名字是空2里名字的文件,返回的是數組。
        // 如:classpath*:com/bean.xml,是從源文件夾下的com目錄下找所有的bean.xml,包括jar里面com目錄下的的文件。
        Resource[] resources = rp.getResources("classpath*:applicationContext.xml");

        // classpath:com/*.xml     classpath:com/?.xml
        // ? 單個字符
        // * 多個字符 0個或多個
        // ** 層級關系 (多級目標)子孫目錄都找到
        Resource[] resources1 = rp.getResources("classpath:com/bean*.xml");
        Resource[] resources2 = rp.getResources("classpath:com/bean?.xml");
        // 找com目錄下的xml文件和 com目錄下,子目錄中的xml文件
        Resource[] resources3 = rp.getResources("classpath:com/*/bean.xml");
        // 找com目錄下xml文件和com目錄下所有目錄(子孫目錄)的xml文件
        Resource[] resources4 = rp.getResources("classpath:com/**/bean.xml");

     //BeanFactory  factory = new XMLBeanFactory(resource);
    }
}

  

applicationContext加載Spring配置文件 

當我們實例化bean.xml時,該文件中配置的bean都會被實例化。該bean默認是單例模式

applicationContext接口  繼承了ResourcePatternResolver接口
applicationContext是在容器啟動時,就會加載。
applicationContext接口 有三個子類:ClassPathXmlApplicationContext,FileSystemXmlApplicationContext,WebApplicationContext三個子類都可以去找到文件,然后加載,區別是,路徑不一樣。
代碼如下:
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/bean.xml");

總結

1.當使用ApplicationContext,則配置的bean都被實例化,好處是可以預先加載,壞處是浪費內存。

2.當使用BeanFactory實例化對象時,配置的bean不會馬上被實例化,當你使用該bean時才會被實例化(getBean)。好處是節約內存,缺點是速度比較慢。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM