发散问题——Spring容器及加载

1、前言 web

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

   

2、背景描述 shell

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

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

这些工程的结构大体是这样子的: 3d

   

3、问题提出 code

若是在shell项目的web.xml中,有设置以下: 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的容器是什么,用来干什么? blog

答: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互相引用,这样子可能会形成加载时的问题。

相关文章
相关标签/搜索