• 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延迟实例化; 

  • 相关阅读:
    C# git .gitignore文件
    Python常用库
    STM32移植LWIP之客户端与服务端的数据传输
    linux_cam_test文件
    DEBUG调试文件
    Linux多线程总结
    Git add命令
    Git使用总结
    C语言中可变参数的使用
    Hi3518EV300编译U-Boot和内核报错:loadlocale.c:130: _nl_intern_locale_data: Assertion `cnt < (sizeof (_nl_value_type_LC_TIME) / sizeof (_nl_value_type_LC_TIME[0]))' failed. Aborted (core dumped)
  • 原文地址:https://www.cnblogs.com/shamo89/p/8051948.html
Copyright © 2020-2023  润新知