Spring与Web项目整合的原理
引言:
在刚开始我们接触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项目整合的原理的更多相关文章
- Spring Boot Web项目整合jsp页面访问
这个内容就是实操过程中各种访问不了jsp页面,各种尝试后的解决方案吧.可能不是最优的,但是目前能解决项目中的一些问题.之前觉得没有什么问题直接可以操作的,没想到在这部分还是耗时了. 开发工具idea2 ...
- (转) shiro权限框架详解06-shiro与web项目整合(上)
http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springM ...
- (转)shiro权限框架详解06-shiro与web项目整合(下)
http://blog.csdn.net/facekbook/article/details/54962975 shiro和web项目整合,实现类似真实项目的应用 web项目中认证 web项目中授权 ...
- 重新学习Spring一--Spring在web项目中的启动过程
1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系,实现高内聚.低耦合.(高内聚:相关性很强的代码组成,既单一责任原则:低耦 ...
- 实战突击: Java Web项目整合开发(PDF)
实战突击: Java Web项目整合开发(PDF)
- IntelliJIdea 2016.2 使用 tomcat 8.5 调试spring的web项目时,bean被实例化两次导致timer和thread被启动了两遍的问题的解决
今天新搭建了一个spring的web项目,项目启动时会启动一个线程,线程里定时执行任务,另外还启动了一个定时器,每秒钟统计系统吞吐量等业务性能数据.但是调试的时候惊奇的发现定时器和线程均被启动了两次. ...
- 小记如何有顺序的搭建一个Spring的web项目
如何有顺序的搭建一个Spring的web项目 一.新建一个简单的maven,war工程 eclipse下如有报错,右键 Deployment 单击 Generate 生成web.xml后可解决报错 二 ...
- 007-shiro与spring web项目整合【一】基础搭建
一.需求 将原来基于url的工程改成使用shiro实现 二.代码 https://github.com/bjlhx15/shiro.git 中的permission_shiro 三.去除原项目拦截器 ...
- 从Spring看Web项目开发
之前简单介绍过Spring框架,本文换个角度重新诠释Spring.使用Java语言开发的项目,几乎都绕不过Spring,那么Spring到底是啥,为何被如此广泛的应用,下面从以下两个问题出发来剖析Sp ...
随机推荐
- ASP.NET Core 6框架揭秘实例演示[13]:日志的基本编程模式[上篇]
<诊断跟踪的几种基本编程方式>介绍了四种常用的诊断日志框架.其实除了微软提供的这些日志框架,还有很多第三方日志框架可供我们选择,比如Log4Net.NLog和Serilog 等.虽然这些框 ...
- 你的程序员女孩「GitHub 热点速览 v.22.09」
本周最火的项目要数上周推荐的开源项目 How to Cook,火到一周涨了 18k+ star,但网友对它的定量烹饪方法褒贬不一.在本人看来,烹饪本就是一门"玄学",萝卜青菜各有所 ...
- C# KeyValuePair<TKey,TValue>的用法
命名空间:System.Collections.Generic 构造函数:public KeyValuePair (TKey key, TValue value); 属性:只读属性 Key ,只读属性 ...
- Scrapy:用cmdline运行爬虫后导致主程序也结束——CrawlerProcesser
学习自: Scrapy官方文档--CrawlerRunner相关 解决django或者其他线程中调用scrapy报ReactorNotRestartable的错误 - liuxianglong - 博 ...
- Python:Scrapy(一) 基础知识与实例
学习自: Scrapy爬虫框架教程(一)-- Scrapy入门 - 知乎 Scrapy爬虫框架,入门案例(非常详细)_ck784101777的博客-CSDN博客_scrapy爬虫案例 爬虫框架Scra ...
- 转 Linux下安装Tomcat服务器和部署Web应用
转载声明: http://www.cnblogs.com/xdp-gacl/p/4097608.html 一.上传Tomcat服务器
- Spring Cloud Alibaba 2021.0.1.0 发布:版本号再也不迷糊了
大家好,DD又来了! 3月9日,Spring官方博客发文:Spring Cloud Alibaba 2021.0.1.0发布了. 前段时间DD还在微信群里看到小伙伴吐槽Spring Cloud Ali ...
- Sqlserver 2008 导出数据库
sqlserver2008中导出数据库: ①当数据库中的数据量比较大时,可使用备份的方法. 路径可以默认,想自定义就点击[添加],最后[确定]即可. ②当数据量不是很大时,可以采用导出SQL执行语句的 ...
- 阿里云CND加速
1: :2: 3: 4: 5: 6: 7:将解析信息如实添加 8:如果报错添加 CNAME 记录提示和 A 记录冲突,也就是说如果你要添加 CDN 全站加速,域名解析那里就不能再有 A 记录了, 只有 ...
- 2022年官网下安装Logstash最全版与官网查阅方法(8.1.0最新安装)
一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 相关文章推荐 NodeJS 16.0.0 https://www.cnblogs.com/liuyangfirst/p/15998172.h ...