博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring之IOC容器加载初始化的方式
阅读量:4647 次
发布时间:2019-06-09

本文共 6034 字,大约阅读时间需要 20 分钟。

  引言

  我们知道IOC容器时Spring的核心,可是如果我们要依赖IOC容器对我们的Bean进行管理,那么我们就需要告诉IOC容易他需要管理哪些Bean而且这些Bean有什么要求,这些工作就是通过通过配置文件告诉Spring 的IOC容器。在我们的完成这些配置文件以后,如果IOC容易要实现对这些Bean的管理,除了资源的定位还有一个很重要的一步就是完成IOC加载初始化,也就是配置文件的载入过程。完成IOC容器加载初始化的方式只要有三种,第一种就是通过File文件加载,第二种是通过Classpath(相对路径)加载,还有一种就是通过web引入的方式。我们分别做简单的 介绍。

  

  文件加载:

  在介绍通过文件方式加载之前我们首先写一些简单的测试案例

  A:项目布局

    

  B:测试主要用到的类和接口:

  接口Hello.java

  

package service; public interface Hello {    public void sayHello();    public void sayGoodbye();    }

 接口实现:HelloImpl.java

  

package service.impl;import service.Hello; public class HelloImpl implements Hello {    @Override    public void sayHello() {        System.out.println("This is  from the spring,I want to  say  Hello!!");    }    @Override    public void sayGoodbye() {        System.out.println("This is  from the spring ,I want to say Goodbye!!");    }}

  C:spring相关配置文件(spring的默认配置文件位于WEB-INF文件夹中的applicationContext.xml)

  

 

 D:通过FileSystemXmlApplicationContext加载

  

/*FileSystemXmlApplicationContext加载方式*/       FileSystemXmlApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");        Hello hello2 = (Hello) context.getBean("hello");        hello2.sayHello();        hello2.sayGoodbye();

 E:通过FileSystemResource方式加载

  

/*FileSystemResource加载方式*/        BeanFactory factory2 = new XmlBeanFactory(new FileSystemResource("E:\\WorkSpace\\IntellijIDEAworkspace\\springFunctions\\ManvenSpringTest\\src\\main\\resources\\applicationContext.xml"));        Hello  hello4= factory2.getBean("hello",Hello.class);        hello4.sayHello();        hello4.sayGoodbye();

  F:(FileSystemXmlApplicationContext)其他说明

  1.默认为项目工作路径 即项目的根目录 

      ApplicationContext appCt2 = new FileSystemXmlApplicationContext("src/main/resources/XXXXXX.xml"); 

  2.前缀classpath:表示的是项目的classpath下相对路径 

    ApplicationContext appCt2 = new FileSystemXmlApplicationContext("classpath:XXXXxml"); 

  3.使用前缀file 表示的是文件的绝对路径 

   ApplicationContext appCt2 = new FileSystemXmlApplicationContext("file:D:/XXXX.xml"); 

     ApplicationContext appCt2 = new FileSystemXmlApplicationContext("D:/XXXX.xml"); 

  4.可以同时加载多个文件 

  String[] xmlCfg = new String[] { "src/main/resources/XXXXX.xml","classpath:YYYY.xml"}; 

    ApplicationContext appCt2 = new FileSystemXmlApplicationContext(xmlCfg); 

  5.使用通配符加载所有符合要求的文件 

   ApplicationContext appCt2 = new FileSystemXmlApplicationContext("classpath:*.xml"); 

ClassPath方式加载

  A:所使用的文件如果上面一致

  B:通过ClassPathXmlApplicationContext加载

  

/*ClassPathXmlApplicationContext加载方式*/        ClassPathXmlApplicationContext context  = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");        Hello hello = (Hello) context.getBean("hello");        hello.sayHello();        hello.sayGoodbye();

  C:通过ClassPathResource方式加载

  

/*ClassPathResource加载方式*/      BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));        Hello  hello3= factory.getBean("hello",Hello.class);        hello3.sayHello();        hello3.sayGoodbye();

  D:其他说明

  1.没有前缀:默认为项目的classpath下相对路径 

    ApplicationContext appCt = new ClassPathXmlApplicationContext("XXXX.xml"); 

  2.前缀classpath:表示的是项目的classpath下相对路径 

   ApplicationContext appCt = new ClassPathXmlApplicationContext("classpath:YYYY.xml"); 

  3.使用前缀file 表示的是文件的绝对路径 

ApplicationContext appCt = new ClassPathXmlApplicationContext("file:D:/XXXX.xml"); 

  4.可以同时加载多个文件 

  String[] xmlCfg = new String[] { "classpath:XXX.xml","YYYY.xml"}; 

    ApplicationContext appCt = new ClassPathXmlApplicationContext(xmlCfg); 

  5.使用通配符加载所有符合要求的文件 

  ApplicationContext appCt = new ClassPathXmlApplicationContext("*.xml"); 

WEb方式加载

  A:这个需要通过配置ContextLoaderListener

  

contextConfigLocation
classpath*:/applicationContext.xml
org.springframework.web.context.ContextLoaderListener

  B:这样就可以将IOC容器加载到环境中了。

执行结果

  代码:TestDemo1.java

  

import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.FileSystemResource;import service.Hello;public class TestDemo1 {    public static void main(String []args){        System.out.println("ClassPathXmlApplicationContext");        /*ClassPathXmlApplicationContext加载方式*/        ClassPathXmlApplicationContext context  = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");        Hello hello = (Hello) context.getBean("hello");        hello.sayHello();        hello.sayGoodbye();        System.out.println("ClassPathResource");        /*ClassPathResource加载方式*/        BeanFactory factory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));        Hello  hello3= factory.getBean("hello",Hello.class);        hello3.sayHello();        hello3.sayGoodbye();        System.out.println("FileSystemXmlApplicationContext");        /*FileSystemXmlApplicationContext加载方式*/       FileSystemXmlApplicationContext fileSystemXmlApplicationContext = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");        Hello hello2 = (Hello) fileSystemXmlApplicationContext.getBean("hello");        hello2.sayHello();        hello2.sayGoodbye();        System.out.println("FileSystemResource");        /*FileSystemResource加载方式*/        BeanFactory factory2 = new XmlBeanFactory(                new FileSystemResource("E:\\WorkSpace\\IntellijIDEAworkspace\\springFunctions\\ManvenSpringTest\\src\\main\\resources\\applicationContext.xml"));        Hello  hello4= factory2.getBean("hello",Hello.class);        hello4.sayHello();        hello4.sayGoodbye();    }}

  

  运行结果:

  

其他:

  上面的测试用例都是采用最原来的凡是来实现的,这样对于做项目来说就是不专业的也是效率低下的。Spring自己提供了单元测试的相关支持,通过这个我们可以极大地优化我们的测试用例,下篇文章做个总结和说明。

转载于:https://www.cnblogs.com/zhangminghui/p/4164011.html

你可能感兴趣的文章
引入css的四种方式
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>
3月7日 ArrayList集合
查看>>
jsp 环境配置记录
查看>>
Python03
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
Some configure
查看>>
流量调整和限流技术 【转载】
查看>>
正由另一进程使用,因此该进程无法访问此文件。
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
MyEclipse安装Freemarker插件
查看>>
计算多项式的值
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
最强的篮球队和马尔可夫模型
查看>>
pyQt 每日一练习 -- 登录框
查看>>
wp 删除独立存储空间文件(多级非空文件夹删除)
查看>>
Loadrunner安装使用入门
查看>>