zoukankan      html  css  js  c++  java
  • Spring加载xml配置文件的方式(BeanFactory和ApplicationContext区别)

    描述

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

    这就要靠IoC容器的两个接口BeanFactory ApplicationContextBeanFactory在spring-bean的jar里,ApplicationContext在spring-context的jar里

    BeanFactory (接口)

    |--------XmlBeanFactory(实现类)

    |-继承-ApplicationContext (接口)

      |-------- ClassPathXmlApplicationContext(实现类)

      |---------FileSystemXmlApplicationContext(实现类)

      |---------XmlWebApplicationContext(实现类)

    BeanFactory:

    BeanFactory是一个接口,是Spring里面最底层的接口,提供了最简单的容器的功能,有一个getBean()方法,只提供了实例化对象和拿对象的基础功能;

    ApplicationContext:

    应用上下文,继承BeanFactory接口,它是Spring的一各更高级的容器,提供了更多的有用的功能,一般的spring项目用ApplicationContext;

    1) 国际化(MessageSource)

    2) 访问资源,如URL和文件(ResourceLoader)

    3) 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层  

    4) 消息发送、响应机制(ApplicationEventPublisher)

    5) AOP(拦截器)

    1. 编译路径

    ClassPathXmlApplicationContext来加载xml文件

    这种方式xml文件必须在项目的build path里面,一般用classpath:作为前缀,也可以省略

    1)/src目录下

    ApplicationContext factory=new ClassPathXmlApplicationContext("classpath:appcontext.xml"); 
    ApplicationContext factory=new ClassPathXmlApplicationContext("appcontext.xml");

    2)/ src/conf 目录下的 
    ApplicationContext factory=new ClassPathXmlApplicationContext("conf/appcontext.xml");

    3)同时加载多个xml文件

    ApplicationContext factory=new ClassPathXmlApplicationContext(new String[] {"bean1.xml","bean2.xml"});

    2.文件系统的路径

    xml文件的绝对路径,一般用file:作为前缀,也可以省略

    ApplicationContext factory=new FileSystemXmlApplicationContext("file:G:/Test/src/appcontext.xml"); 
    ApplicationContext factory=new FileSystemXmlApplicationContext("G:/Test/src/appcontext.xml");

    3. XmlWebApplicationContext是专为Web工程定制的

    ServletContext servletContext = request.getSession().getServletContext(); 
    ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(servletContext ); 

    BeanFactory和ApplicationContext的区别

    BeanFactory:

    BeanFactory在启动的时候不会去实例化Bean,有从容器中拿Bean的时候才会去实例化;

    ApplicationContext:

    ApplicationContext在启动的时候就把所有的Bean全部实例化了。它还可以为Bean配置lazy-init=true来让Bean延迟实例化; 

  • 相关阅读:
    JPA01
    mybatis入门
    PHP 循环- While循环
    PHP超级全局变量
    PHP 数组排序
    PHP数组
    PHP Switch语句
    PHP IF...Else语句
    PHP运算符
    PHP字符串变量
  • 原文地址:https://www.cnblogs.com/shamo89/p/8051948.html
Copyright © 2011-2022 走看看