引言:

  在刚开始我们接触IOC时,我们加载并启用SpringIOC是通过如下代码手动加载 applicationContext.xml 文件,new出context对象,完成Bean的创建和属性的注入。

public class TestIOC {

    @Test
public void testUser() {
// 1.加载Spring配置文件,创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("/spring/applicationContext.xml"); // 2.得到配置创建的对象
Person person = (Person) context.getBean("person"); // 3.调用bean对象中的方法
person.test1();
}
}

  注意:这只是测试代码,我们使用 Junit 进行单元测试,如果我们在实际生产过程中,每次创建对象都使用该代码加载配置文件,再创建对象。这种方法当然不可取,太浪费资源。其实,Spring早就帮我们解决了这个问题。

  

Spring和Web项目整合原理:

  1、实现思想:

    把加载配置文件和创建对象的过程,在服务器启动时完成。

  2、实现原理:

    (1)ServletContext对象

    (2)监听器

  3、具体使用:

    (1)在服务器启动时候,会为每个项目创建一个ServletContext对象

    (2)在ServletContext对象创建的时候,使用监听器(ServletContextListener)可以知道ServletContext对象在什么时候创建

    (3)监听到ServletContext对象创建的时候,即在监听器的 contextInitialized()方法中加载Spring的配置文件,把配置文件配置对象创建

    (4) 把创建出来的对象放到ServletContext域对象里面(setAttribute方法),获取对象的时候,从ServletContext域里得到(getAttribute方法)

Spring整合Web项目演示

  1、演示问题(Struts2项目整合Spring时,不写监听,只通过代码加载Spring配置文件)

  (1)action调用service,service调用dao

  

 

  (2)每次访问 Action 的时候,都会重新加载Spring配置文件

  

  

  2、解决方案:

(1)在服务器启动的时候,创建对象加载配置文件

(2)底层使用监听器、ServletContext对象

  3、使用Spring框架,不需要我们写代码实现,帮我们进行了封装

(1)封装了一个监听器,我们只需要配置监听器就可以了

(2)配置监听器之前做的事:导入Spring整合 web 项目的 jar 包(Maven项目)

4、实际操作

(1)pom.xml中引入以下依赖:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.0.2.RELEASE</version>
</dependency>

  (2)web.xml中配置监听器:

<!-- 配置监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

  (3)web.xml中指定加载Spring配置文件的位置

  注意:如果我们不指定Spring配置文件的位置,容器会自动去 WEB-INF 目录下找 applicationContext.xml 作为默认配置文件。如果找不到,就会报如下错误。

<!-- 指定Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param> 

  控制台打印日志:

Spring与Web项目整合的原理的更多相关文章

  1. Spring Boot Web项目整合jsp页面访问

    这个内容就是实操过程中各种访问不了jsp页面,各种尝试后的解决方案吧.可能不是最优的,但是目前能解决项目中的一些问题.之前觉得没有什么问题直接可以操作的,没想到在这部分还是耗时了. 开发工具idea2 ...

  2. (转) shiro权限框架详解06-shiro与web项目整合(上)

    http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springM ...

  3. (转)shiro权限框架详解06-shiro与web项目整合(下)

    http://blog.csdn.net/facekbook/article/details/54962975 shiro和web项目整合,实现类似真实项目的应用 web项目中认证 web项目中授权 ...

  4. 重新学习Spring一--Spring在web项目中的启动过程

    1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系,实现高内聚.低耦合.(高内聚:相关性很强的代码组成,既单一责任原则:低耦 ...

  5. 实战突击: Java Web项目整合开发(PDF)

    实战突击:  Java  Web项目整合开发(PDF)

  6. IntelliJIdea 2016.2 使用 tomcat 8.5 调试spring的web项目时,bean被实例化两次导致timer和thread被启动了两遍的问题的解决

    今天新搭建了一个spring的web项目,项目启动时会启动一个线程,线程里定时执行任务,另外还启动了一个定时器,每秒钟统计系统吞吐量等业务性能数据.但是调试的时候惊奇的发现定时器和线程均被启动了两次. ...

  7. 小记如何有顺序的搭建一个Spring的web项目

    如何有顺序的搭建一个Spring的web项目 一.新建一个简单的maven,war工程 eclipse下如有报错,右键 Deployment 单击 Generate 生成web.xml后可解决报错 二 ...

  8. 007-shiro与spring web项目整合【一】基础搭建

    一.需求 将原来基于url的工程改成使用shiro实现 二.代码 https://github.com/bjlhx15/shiro.git 中的permission_shiro 三.去除原项目拦截器 ...

  9. 从Spring看Web项目开发

    之前简单介绍过Spring框架,本文换个角度重新诠释Spring.使用Java语言开发的项目,几乎都绕不过Spring,那么Spring到底是啥,为何被如此广泛的应用,下面从以下两个问题出发来剖析Sp ...

随机推荐

  1. 零售BI解决方案_新零售时代转型升级思路全都在这里

    新零售是什么意思?新零售即企业以互联网为依托,通过运用大数据.人工智能等先进技术手段,对商品的生产.流通与销售过程进行升级改造,进而重塑业态结构与生态圈,并对线上服务.线下体验以及现代物流进行深度融合 ...

  2. 用图帮你了解https的原理

    Http存在的问题 上过网的朋友都知道,网络是非常不安全的.尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵.还有大家平时喜欢用的万能钥匙,等等.那我们平时上网可能会存在哪些风险呢? 泄密, ...

  3. 【C# 程序集】把自己的程序集添加|卸载 到GAC 全局程序集缓存中

    添加全局程序集缓存 Global Assembly Cache Tool (Gacutil.exe) 操作环境windows10+vs2019 cmd.exe位置在 C:\Windows\System ...

  4. Unicode 详细介绍

    总结起来为啥需要Unicodey就是为了适应全球化的发展,便于不同语言之间的兼容交互,而ASCII不再能胜任此任务了 UTF-8 与UTF-16的区别 UTF-8的优缺点 程序员那么到底该如何选择呢? ...

  5. Android系统编程入门系列之硬件交互——无线通信WLAN

    Android系统的移动设备大多支持无线WLAN技术.利用该技术,不仅能实现互联网通信,还能实现无线定位,热点共享等远程通信功能.针对使用WLAN的不同功能,可能需要分别申请不同的权限声明,同时调用不 ...

  6. QT:Qt Creator中创建的各种项目说明

    Qt Widgets Application:支持桌面平台GUI的应用程序.GUI的设计完全基于C++,采用Qt提供的一套C++类库: Qt Console Application:控制台应用程序,无 ...

  7. Python 内存管理与垃圾回收

    Python 内存管理与垃圾回收 参考文献:https://pythonav.com/wiki/detail/6/88/ 引用计数器为主标记清除和分代回收为辅 + 缓存机制 1.1 大管家refcha ...

  8. OS模块的补充使用---执行终端命令

    Python基础至os模块 由于近期的项目需要用到对应的终端命令去调用其他程序,因此温习一下os.system()函数: 参考文献:https://zhuanlan.zhihu.com/p/51716 ...

  9. 微信小程序文件上传至七牛云(laravel7)

    1 wxml: <view> <form bindsubmit="dopost"> <view> <label>真实姓名</l ...

  10. AQS详解之独占锁模式

    AQS介绍 AbstractQueuedSynchronizer简称AQS,即队列同步器.它是JUC包下面的核心组件,它的主要使用方式是继承,子类通过继承AQS,并实现它的抽象方法来管理同步状态,它分 ...