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

  • 相关阅读:
    万里长征,始于足下——菜鸟程序员的学习总结(二)
    google云笔记keep试用感受
    程序员英语学习—理论篇(一)
    LLVM每日谈之十六 LLVM的学习感悟
    LLVM每日谈之十五 LLVM自带的examples
    C++学习书单
    人品计算器小案例
    隐式意图&显示意图
    Activity有多个启动图标
    Android中四大组件
  • 原文地址:https://www.cnblogs.com/yanqin/p/5282929.html
Copyright © 2020-2023  润新知