文章目录
Spring是一个开源框架,它由Rod Johnson创建,它是为了解决企业应用开发的复杂性而创建的
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情,然而,Spring的用途不仅限于服务器端的开发;从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受 益。
目的:解决企业应用开发的复杂性
功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
范围:任何Java应用
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
中间层框架、万能胶 容器框架
struts2 JavaBean 项目中的一个个类
spring IOC和AOP
hibernate
spring包括的功能有很多👀👀

spring tool suite官方下载地址:http://spring.io/tools/sts/all
在线安装教程很详细的网文地址:http://www.cnblogs.com/liuyungao/p/6213997
我们直接看IoC在工程中的体现,接下来我们创建一个maven项目,至于怎么创建,不记得了看这https://blog.csdn.net/weixin_67450855/article/details/126146653?spm=1001.2014.3001.5502
项目创建好了嘞,会报错,所以我们就要在pom.xml中配置插件还有等等一些步骤,一步一步来咯
- <properties>
- <spring.version>5.0.1.RELEASEspring.version>
- <javax.servlet.version>4.0.0javax.servlet.version>
- <junit.version>4.12junit.version>
- properties>

导入jar包依赖(注意格式❗❗) 如果报红,当前目录解决不了就切一个目录,再不行就把仓库清空
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>3.8.1version>
- <scope>testscope>
- dependency>
-
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-contextartifactId>
- <version>${spring.version}version>
- dependency>
- <dependency>
- <groupId>org.springframeworkgroupId>
- <artifactId>spring-aspectsartifactId>
- <version>${spring.version}version>
- dependency>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>${junit.version}version>
- <scope>testscope>
- dependency>
-
- <dependency>
- <groupId>javax.servletgroupId>
- <artifactId>javax.servlet-apiartifactId>
- <version>${javax.servlet.version}version>
- <scope>providedscope>
- dependency>
导入jdk插件
- <plugins>
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-compiler-pluginartifactId>
- <version>3.7.0version>
- <configuration>
- <source>1.8source>
- <target>1.8target>
- <encoding>UTF-8encoding>
- configuration>
- plugin>
- plugins>

更换工程目录

更换java编译器版本,web版本
- <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
- version="3.1">

右键项目-->properties-->Project Facets-->⬇⬇⬇

右键项目,更新工程





需求:
同时在用户模块、订单模块拿到所有的用户数据
需求变更1:
同时在用户模块、订单模块拿到所有的用户数据,并且要求用户数据是已经通过年龄排序的
对应策略:修改UserBiz中的list方法,添加排序功能
需求变更2:
同时在用户模块、订单模块拿到所有的用户数据、并且要求用户数据是在已经注册的时间序
对应策略:修改UserBiz中的list方法,添加排序功能、按时间点排序
那如果说客户又觉得还是改回原来的需求吧,这样代码是不是就改来改去
这个时候呢,我们可以用到接口多实现
但是这么做也有弊端:
最原始的方法就是频繁修改业务层biz层的代码,频繁修改bog会越来越多
接口多实现方法:凡是涉及到用户业务层调用的地方,都需要修改代码那我们该怎么去解决这个问题——IoC,接下来我们看看使用IoC是怎么解决这个问题的⬇⬇⬇⬇
IOC的主要作用就是管理整个项目的javabean,依靠注入、控制反转的特点进行管理
IOC的特点:依赖注入,控制反转
控制反转:指的是将创建对象的权利反转给Spring容器来完成
导入spring的配置文件 | 配置文件中内容⬇⬇⬇
- 所有的类将都配置到spring配置文件中
-
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
-
- beans>


创建一个测试类
得出spring运行逻辑:
1.对spring框架的配置文件进行建模,建模后,spring-context.xml中所有的javabean的信息都
会加载进spring容器上下文
2.上下文中就包含了spring-context.xml所有对象,建模最终获取对象
在不用ioc状态下,我们需要根据需求不断更改代码,而使用ioc时我们更改代码只需要更改spring-context.xml中的即可⬇⬇⬇



我们去Ioc_test中运行测试一下


在Ioc_test中运行测试一下



运行后
我们把UserAction中的userBiz改为userBiz1 ⬇⬇⬇

全部改好了之后我们在去运行一下,会报错如图所示:
报的错就是我们刚刚改动的地址

当我们换成byType的时候

运行一下就不会报错了

看一个错误演示
byName: 是Spring管理的bean对象的ID进行查找 ,如果找不到则注入失败,反之成功
byType: 是Spring管理的bean对象接口实现类进行查找,如果没有或2个以上,则注入失败,反之成功
为了解决问题的,最终我们的开发肯定是开发web应用的web网页程序,最终就是要运行起来,要拿到整个工程里的任何一个bin对象的,那么我们当前是通过建模的方式去拿的,那么我们不可能把建模的那段代码放到每一个servlet里面去做

项目启动两三分钟少之又少,如果每一次请求都要加这个文件,给客户的响应速度是极其慢的
如果要走上面那个建模就相当于睡觉了,也就相当于Thread.sleep(10000)
建模是耗时间的, 怎么才能让建模执行一次,并且同时能让每一个Servlet拿到context对象?
1.建模必不可少
2.建模要保障只执行一次
3.建模后期望在每一个Servlet都能够拿到Spring的上下文对象ClassPathXmlApplicationContext
Tomcat一启动监听器就打印,那么它会保障一定不会给你建模,并且它还保证执行一次

SpringLoadListener源码:

1.Spring的理解及作用
容器框架 中间层框架 用来整合其他的第三方框架
有两大核心组件 第一个是ioc 第二个是aop
2.IOC的作用
特点:依赖注入、控制反转
控制反转:经创建对象的权利,有程序员手动new对象的权利转交给Spring容器完成
优点:便于维护,拥抱变化
3.依赖注入的方式
set注入
构造注入
自动装配
4.自动装配
byName:根据bean 的 id在Spring的上下文中进行寻找,匹配上了会自动注入给属性
byType:根据属性接口在Spring上下文中找对应的接口实现类,如果找到一个,就会自动注入;如果0或者2个以上就会报错
5.Spring如何与web容器集成
5.1.在监听器中初始化Spring上下文--建模
5.2.拿到tomcat上下文,将Spring上下文存储到tomcat中
5.3.在web.xml中配置监听器
5.4.在测试的servlet中进行测试,在servlet看能否拿到Spring上下文