原创链接: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)。好处是节约内存,缺点是速度比较慢。

Spring加载XML配置文件的更多相关文章

  1. Spring加载xml配置文件的方式 ApplicationContext

    大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件的呢? ...

  2. Spring加载xml配置文件的方式(BeanFactory和ApplicationContext区别)

    描述 大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件 ...

  3. Spring加载xml配置文件的方式

    梳理Spring的流程 xml是最常见的spring 应用系统配置源.Spring中的几种容器都支持使用xml装配bean,包括: XmlBeanFactory,ClassPathXmlApplica ...

  4. Spring中加载xml配置文件的六种方式

    Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog  因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...

  5. spring加载xml的六种方式

    因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装入系统,这就需要利用Spring去动态加载某一位置下的配置文件,所以就总结了下Spring中加载xml配置文件的方式,我总结的有6 ...

  6. 使用Spring加载properties配置文件.md

    背景 类似于datasource.properties之类的配置文件,最初通过Java的Properties类进行处理.这种方式有许多弊端,如每次都需要读取配置文件:若将Properties作为成员变 ...

  7. spring加载属性配置文件内容

    在spring中提供了一个专门加载文件的类PropertyPlaceholderConfigurer,通过这个类我们只需要给定需要加载文件的路径就可以 通过该类加载到项目,但是为了后面在程序中需要使用 ...

  8. spring加载xml

    加载文件顺序 情形一:使用classpath加载且不含通配符 这是最简单的情形,Spring默认会使用当前线程的ClassLoader的getResource方法获取资源的URL,如果无法获得当前线程 ...

  9. Spring加载XML机制

    转载自跳刀的兔子   http://www.cnblogs.com/shipengzhi/articles/3029872.html 加载文件顺序 情形一:使用classpath加载且不含通配符 这是 ...

随机推荐

  1. 个人作业Week2-代码复审

    代码复审Check List 概要部分 代码能符合需求和规格说明么? 符合.针对-c和-s可以将正确的结果输出到相应的sudoku.txt,并在规定的时间内求解. 代码设计是否有周全的考虑? 有的.我 ...

  2. PAT 1063 计算谱半径

    https://pintia.cn/problem-sets/994805260223102976/problems/994805267860930560 在数学中,矩阵的“谱半径”是指其特征值的模集 ...

  3. terminal record & gif

    terminal record & gif ascii nema https://asciinema.org/ https://asciinema.org/docs/how-it-works ...

  4. win 批处理

    前言 批处理文件(batch file)包含一系列 DOS命令,通常用于自动执行重复性任务.用户只需双击批处理文件便可执行任务,而无需重复输入相同指令.编写批处理文件非常简单,但难点在于确保一切按顺序 ...

  5. MT【184】$\epsilon$助力必要性

    已知满足不等式$|x^2-4x+a|+|x-3|\le5$的最大值为$3$,求实数$a$的值,并解该不等式. 证明:1)当$x=3$时,$|a-3|\le5$,得$a\in[-2,8]$2)$\for ...

  6. HGOI20180813 (NOIP2018 提高组 Day2 模拟试题)

    省常中省选提高Day2 继续 第一题就考了贪心,正解95pts的贪心策略第一印象是想到的,但是被自己否定掉了qwq,然后打了 不是正解的贪心,样例5没过(可怜)思路如下:先找出每个门对应可以通过的人数 ...

  7. Flash 解题报告

    Flash Description 给你一颗树,需要把每个点染色,每个点染色时间为\(t_i\),要求同时染色的点的集合为树的独立集,最小化染色结束时间之和. 其实题面蛮有趣的♂ HINT \(n\l ...

  8. 【CF1077F2】Pictures with Kittens 单调队列+dp

    题目大意:给定一个长度为 N 的序列,点有点权,从序列中选出恰好 X 个数,并且保证任意连续的 K 个数中均有一个被选中,求选出的点权最大是多少. 题解:此题可以作为 烽火传递+ 来处理,只不过在烽火 ...

  9. ByteBuffer: 当由一个byte[]来生成一个固定不变的ByteBuffer时,使用ByteBuffer.wrap(byte[]);

    StringBuilder sb = new StringBuilder(1024); //向sb中写入900个左右的随机字符内容 for(int j=1; j< 50;j++) { sb.ap ...

  10. bzoj千题计划294:bzoj3139: [Hnoi2013]比赛

    http://www.lydsy.com/JudgeOnline/problem.php?id=3139 队伍的顺序不会影响结果 将队伍的得分情况作为状态,记忆化搜索 就是先搜索第一只队伍的得分情况, ...