Spring ioc

                                                                文章目录

一、Spring简介

二、Spring中ioc的特点

三、依赖注入的3种方式

set注入

         构造注入

自动搭配

byName 

  byType 

四、Spring与web容器的整合 

why:建模的过程是十分耗时

解决问题 

how:监听器的初始化方法

Spring的上下文要存放在Tomcat上下文中

本章小结 


一、Spring简介

 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

二、Spring中ioc的特点

我们直接看IoC在工程中的体现,接下来我们创建一个maven项目,至于怎么创建,不记得了看这https://blog.csdn.net/weixin_67450855/article/details/126146653?spm=1001.2014.3001.5502

项目创建好了嘞,会报错,所以我们就要在pom.xml中配置插件还有等等一些步骤,一步一步来咯

<properties>
		<spring.version>5.0.1.RELEASE</spring.version>
		<javax.servlet.version>4.0.0</javax.servlet.version>
		<junit.version>4.12</junit.version>
	</properties>

 导入jar包依赖(注意格式❗❗) 如果报红,当前目录解决不了就切一个目录,再不行就把仓库清空

<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<!-- 2、导入spring依赖 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 5.1、junit -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
		<!-- 5.2、servlet -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>${javax.servlet.version}</version>
			<scope>provided</scope>
		</dependency>

 导入jdk插件

<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.7.0</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
				</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配置文件中

<?xml version="1.0" encoding="UTF-8"?>
<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中的即可⬇⬇⬇

三、依赖注入的3种方式

set注入

 我们去Ioc_test中运行测试一下

构造注入

 

 在Ioc_test中运行测试一下

自动搭配

byName 

 

 运行后

我们把UserAction中的userBiz改为userBiz1 ⬇⬇⬇

 全部改好了之后我们在去运行一下,会报错如图所示:

报的错就是我们刚刚改动的地址

 

  byType 

当我们换成byType的时候

运行一下就不会报错了 

 

 看一个错误演示

byName: 是Spring管理的bean对象的ID进行查找 ,如果找不到则注入失败,反之成功

byType: 是Spring管理的bean对象接口实现类进行查找,如果没有或2个以上,则注入失败,反之成功

四、Spring与web容器的整合 

为了解决问题的,最终我们的开发肯定是开发web应用的web网页程序,最终就是要运行起来,要拿到整个工程里的任何一个bin对象的,那么我们当前是通过建模的方式去拿的,那么我们不可能把建模的那段代码放到每一个servlet里面去做

why:建模的过程是十分耗时

 项目启动两三分钟少之又少,如果每一次请求都要加这个文件,给客户的响应速度是极其慢的

 如果要走上面那个建模就相当于睡觉了,也就相当于Thread.sleep(10000)

解决问题 

建模是耗时间的, 怎么才能让建模执行一次,并且同时能让每一个Servlet拿到context对象?

1.建模必不可少
2.建模要保障只执行一次
3.建模后期望在每一个Servlet都能够拿到Spring的上下文对象ClassPathXmlApplicationContext 

how 监听器的初始化方法

Tomcat一启动监听器就打印,那么它会保障一定不会给你建模,并且它还保证执行一次

 Spring的上下文要存放在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上下文 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值