原创链接: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. Linux下利用json-c从一个json数组中提取每一个元素中的部分字段组成一个新json数组

    先把代码贴上来,有时间整理一下 首先说一下要实现的功能: 假定现在有一个json格式的字符串,而且他是一个josn中的数组,比如: [ { "id": "NEW20170 ...

  2. Fantacy团队第一次站立会议

    1.队名解释 首先队名Fantacy,并没有任何含义,想取幻想(Fantasy)之名,却并非幻想一词,因为我们组的基础并不好,幻想需要有了坚实的基础才能实现,没有基础等于空想.所以我们组的目的是,提升 ...

  3. Java多线程1:进程和线程的区别

    之前看了2天的多线程,就不看了.现在继续拾起来吧.最近有点松散,多线程内容都是看毕向东的视频以及网络教程和各种书籍 什么是进程? 通俗一点讲,就是正在进行的程序,进程是操作系统控制的基本运行单元: 如 ...

  4. bzoj1214 [HNOI2004]FTP服务器

    题目挺复杂的. 但有一点好,就是这题没数据,交个空程序就好了. begin end.

  5. 51nod 1463 找朋友 (扫描线+线段树)

    1463 找朋友  基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80 难度:5级算法题  收藏  关注 给定: 两个长度为n的数列A .B 一个有m个元素的集合K 询问Q次 每次询 ...

  6. js判断checkbox是否选中

    $('.div0 .checkbox1').prop('checked')选中返回 true未选中返回 false $('.div0').prop("checked", true) ...

  7. 【BZOJ4883】棋盘上的守卫(最小生成树)

    [BZOJ4883]棋盘上的守卫(最小生成树) 题面 BZOJ 题解 首先\(n\)行\(m\)列的棋盘显然把行列拆开考虑,即构成了一个\(n+m\)个点的图.我们把格子看成边,那么点\((x,y)\ ...

  8. CSUOJ 1170 A sample problem

    J: A Simple Problem Submit Page   Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 87     S ...

  9. springboot配置文件的配置

    转:https://www.cnblogs.com/zheting/p/6707036.html Spring Boot使用了一个全局的配置文件application.properties,放在src ...

  10. SQL Server手把手教你使用profile进行性能监控

    介绍 经常会有人问profile工具该怎么使用?有没有方法获取性能差的sql的问题.自从转mysql我自己也差不多2年没有使用profile,忽然profile变得有点生疏不得不重新熟悉一下.这篇文章 ...