IOC容器在web容器中初始化——(一)两种配置方式

参考文章http://blog.csdn.net/liuganggao/article/details/44083817http://blog.csdn.net/u013185616/article/details/52186184

最近在研究IOC容器在web容器中初始化的过程。阅读了源码,参照了很多文章,在这里记录一下。

使用的web容器为tomcat7.spring的jar包为4.3.7.RELEASE版本。

我们可以通过web.xml配置文件web容器中声明spring容器。有以下两种方式:

1:通过配置监听器来实现

<servlet>
    <servlet-name>springServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

2:通过配置servlet来实现

由于web容器再启动时优先先扫描<listener>与<context-param>两个标签,所以推荐通过配置监听器的方式实现。

下面是通过配置监听器实现ioc容器在web容器中注册的方式。

Spring提供了ServletContextListener接口,以及他的实现类ContextLoaderListener。

它实现了创建初始化ServletContext后的事件监听和销毁ServletContext前的事件监听。

下面是web.xml中的代码

<context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>ffback</param-value>
</context-param>
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
         classpath:spring/ApplicationContext1.xml,
         classpath:spring/ApplicationContext2.xml
    </param-value></context-param>
<listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>标签用与配置ServletContext的参数。

我们配置了webAppRootKey和contextConfigLocation两个参数。

webAppRootKey:web项目的绝对路径。同一个web容器中,不同的项目要有不同的webAppRootKey。

contextConfigLocation:指定要初始化的文件的位置。默认

原文地址:https://www.cnblogs.com/WangYunShuaiBaoLe/p/8135727.html

时间: 2024-08-06 08:11:02

IOC容器在web容器中初始化——(一)两种配置方式的相关文章

Springboot中IDE支持两种打包方式,即jar包和war包

Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war    在项目的根目录执行maven 命令clean package -Dmaven.test.skip=true,即可打包,如下 命令执行成功后,在target目录下即可看到打包好的文件 提示:若打的包为jar包,可通过java -jar guns-xxx.jar来启动Guns系统 原文地址:https://www.cnblogs.com/mracale

细说java中Map的两种迭代方式

以前对java中迭代方式总是迷迷糊糊的,今天总算弄懂了,特意的总结了一下,基本是算是理解透彻了. 1.再说Map之前先说下Iterator: Iterator主要用于遍历(即迭代访问)Collection集合中的元素,Iterator也称为迭代器.它仅仅只有三个方法:hasNext(),next()和remove() hasNext():如果仍有元素可以迭代,则返回 true.(换句话说,如果 next 返回了元素而不是 抛出异常,则返回 true). next():返回迭代的下一个元素. re

Android中BroadcastReceiver的两种注册方式(静态和动态)详解

今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来接收来自系统和应用中的广播.在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能:当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作:当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户

Java中String的两种赋值方式的区别

本文修改于:https://www.zhihu.com/question/29884421/answer/113785601 前言:在java中,String有两种赋值方式,第一种是通过"字面量"赋值,如:String str="hello",第二种是通过new关键字创建新对象,如:String str=new String("hello").那么这两种赋值的方式到底有什么区别呢,下面给出具体分析. 1.首先回顾Java虚拟机的结构图. 在上面的

ANDROID中FRAGMENT的两种创建方式

fragment是Activity中用户界面的一个行为或者是一部分.你可以在一个单独的Activity上把多个Fragment组合成为一个多区域的UI,并且可以在多个Activity中再使用.你可以认为fragment是activity的一个模块零件,它有自己的生命周期,接收它自己的输入事件,并且可以在Activity运行时添加或者删除. 两个概念:Fragment.宿主 fragment的生命周期直接受其宿主activity的生命周期的影响.例如,一旦activity被暂停,它里面所有的fra

Java中异常的两种处理方式

异常处理的两种方式: 声明抛出 throws  声明抛出的位置:是在方法声明的位置上使用throws关键字向上抛出异常. 捕捉 try....catch.. public class ExceptionTest03{     public static void main(String[] args){     //创建文件输入流读取文件     //思考:java编译器是如何知道以下的代码执行过程中可能出现异常,     //java编译器是如何知道这个异常发生的几率比较高呢?    //ja

android中的OnClickListener两种实现方式

android的activity点击事件中,通过OnClickListener来实现,要实现点击事件有两种方式 1.通过定义一个OnClickListener的内部类来实现 The example below shows how to register an on-click listener for a Button. // Create an anonymous implementation of OnClickListener private OnClickListener mCorkyL

Java---29---Map中元素的两种取出方式

Map中是没有迭代器的,那么Map中的元素是如何取出的呢? 有两种方法: 一种是通过Set <k> keySet () 一种是通过 Set <Map.Entry<k,v>> entrySet () keySet:: 将map中所有的键存入到Set集合中.在通过map的getKey ()方法即可获得 value的值 entrySet: 返回此映射中包含的映射关系的Set视图.既包含键也包含值. 这个映射关系的数据类型就是Map.Entry. public class Ma

node.js中函数的两种封装方式

1.创建一js文件(funs.js)function  controller(req,res){          //res.write("发送");          call('hello',req,res);          res.end("");      }module.exports  =  controller;    //此文件中只有一个函数被发布 其他文件中调用:require('./models/funs.js'); controller(