zoukankan      html  css  js  c++  java
  • 发散问题——Spring容器及加载

    一、前言

    发散问题系列,是围绕日常工作,发散思考,提取问题,并寻求答案的一个系列。总的来说,就是将遇到的问题发散来提出更多的问题,并通过解决发散问题,从而对问题有更深入的了解,对知识有更深刻的记忆,帮助自身的提高。欢迎大家将问题继续发散,或者将已有问题更深入的阐述,以达到共同进步的目的。

       

    二、背景描述

    有这样一个几个相关的工程:

    Shell层打包成war包后,会将其他几个项目的jar包引用到WEB_INF\lib目录下

    这些工程的结构大致是这样子的:

       

    三、问题提出

    如果在shell项目的web.xml中,有设置如下:

       <context-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:/META-INF/spring/*.xml</param-value>
        </context-param>
        <listener>
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        </listener>

    那么,

    1Spring的容器是什么,用来干什么?

    答:Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。Spring 容器使用依赖注入(DI)来管理组成一个应用程序的组件。这些对象被称为 Spring Beans。通过阅读配置元数据提供的指令,容器知道对哪些对象进行实例化,配置和组装。配置元数据可以通过 XMLJava 注释或 Java 代码来表示。

       

    2)应用会加载哪些xml配置文件到spring中(本项目的xml、还是包括其他项目的xml,还会包括jar包的xml吗?)

    答:这里要留意到"classpath*"这个符号,web.xmlclasspathclasspath*有以下区别:

    classpath:只会到你的class路径中查找找文件;

    classpath*:不仅包含class路径,还包括jar文件中(class路径)进行查找

    所以,这样子配置的话,会搜索本项目xml、其他项目xml以及jar包中的xml。只要是位于/META-INF/spring/目录下的xml,都会作为Spring容器的配置文件加载到一起。

       

    3web.xml中指示读了一堆xml,那这些配置是作为同一个容器,还是分开多个容器?

    答:作为同一个容器来读取,也就是说,所有提到的xml里面的bean都会装载到一个容器上来。

       

    4)这些xml的加载顺序是怎么样的?

    答:经试验,顺序不确定,所以建议定义的每个xml有自己的工作范围,xmlxml之间不要有太多的关系,例如xml之间的bean互相引用,这样子可能会造成加载时的问题。

  • 相关阅读:
    ( 三十一 )、 SpringBoot项目启动自动执行sql脚本
    转:OAuth 2.0 介绍
    采坑:python base64
    Redis学习——数据结构介绍(四)
    美化你的博客园,flash插件的使用
    Redis学习——详解Redis配置文件(三)
    Redis学习——Windows环境下Redis的安装(二)
    Redis学习——Linux环境下Redis的安装(一)
    NPM 安装速度慢,镜像修改
    日志配置(springboot、mybatis、Lombok)
  • 原文地址:https://www.cnblogs.com/huangzijian/p/6701334.html
Copyright © 2011-2022 走看看