Spring 框架基础(03):核心思想 IOC 说明,案例演示
本文源码:GitHub·点这里 || GitEE·点这里
一、IOC控制反转
1、IOC容器思想
Java系统中对象耦合关系十分复杂,系统的各模块之间依赖,微服务模块之间的相互调用请求,都是这个道理。降低系统模块之间、对象之间、微服务的服务之间耦合度,是软件工程核心问题之一。因为Spring框架中核心思想就是IOC控制反转,用来实现对象之间的解耦。
2、控制反转

- 传统方式
对象A如果想使用对象B的功能方法,在需要的时候创建对象B的实例,调用需要的方法,对对象B有主动的控制权。
- IOC容器
当使用IOC容器之后,对象A和B之间失去了直接联系,对象A如果想使用对象B的功能方法,IOC容器会自动创建一个对象B实例注入到对象A需要的功能模块中,这样对象A失去了主动控制权,也就是控制反转了。
3、依赖注入
IOC给对象直接建立关系的动作,称为DI依赖注入(Dependency Injection);依赖:对象A需要使用对象B的功能,则称对象A依赖对象B。注入:在对象A中实例化对象B,从而使用对象B的功能,该动作称为注入。
二、IOC容器案例
1、买票乘车场景
- 简单乘车类
public class ByBus {
// 方式一:直接实例化
// private BuyTicket buyTicket = new BuyTicket () ;
private BuyTicket buyTicket ;
public BuyTicket getBuyTicket() {
return buyTicket;
}
public void setBuyTicket(BuyTicket buyTicket) {
this.buyTicket = buyTicket;
}
public void takeBus (){
String myTicket = this.getBuyTicket().getTicket() ;
if (myTicket.equals("ticket")){
System.out.println("乘车");
}
}
}
- 简单买票类
public class BuyTicket {
public String getTicket (){
return "ticket" ;
}
}
2、Spring配置文件
这里用过Spring配置文件,给乘车类中,注入买票类,进而完成完整动作。
<bean id="byBus" class="com.spring.mvc.entity.ByBus">
<property name="buyTicket" ref="buyTicket" />
</bean>
<bean id="buyTicket" class="com.spring.mvc.entity.BuyTicket"/>
3、测试代码
public class Test1 {
@Test
public void test01 (){
ApplicationContext context =
new ClassPathXmlApplicationContext("/ioc-contain-01.xml");
ByBus byBus = (ByBus) context.getBean("byBus");
byBus.takeBus();
}
}
三、核心API总结

针对上面用到的几个核心API进行说明,后续持续总结。
1、BeanFactory
这是一个工厂,用于生成任意bean。采取延迟加载,第一次getBean时才会初始化Bean。
2、ApplicationContext
是BeanFactory的子接口,功能更强大。(国际化处理、事件传递、Bean自动装配、各种不同应用层的Context实现)。当配置文件被加载,就进行对象实例化。
3、ClassPathXmlApplicationContext
用于加载classpath(类路径、src)下的xml加载xml运行时位置:/WEB-INF/classes/...xml
4、FileSystemXmlApplicationContext
用于加载指定盘符下的xml加载xml运行时位置:/WEB-INF/...xml,通过ServletContext.getRealPath()获得具体盘符配置。
四、源代码地址
GitHub·地址
https://github.com/cicadasmile/spring-mvc-parent
GitEE·地址
https://gitee.com/cicadasmile/spring-mvc-parent

Spring 框架基础(03):核心思想 IOC 说明,案例演示的更多相关文章
- Spring框架中的核心思想包括什么
(1)依赖注入 (2)控制反转 (3)面向切面
- Spring核心思想Ioc和Aop (面试)
Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...
- Spring最核心的功能是什么?使用Spring框架的最核心的原因是什么?
quote:Spring最核心的功能是什么?使用Spring框架的最核心的原因是什么? (IT公司面试手册,可以多看看) spring 框架中核心组件有三个:Core.Context 和 Beans. ...
- Spring框架基础2
Spring框架基础2 测试Spring的AOP思想和注解的使用 导包(在前面的基础上添加) SpringAOP名词解释 AOP编程思想:横向重复代码,纵向抽取:就是说多个地方重复的代码可以抽取出来公 ...
- 4-1 Spring框架基础知识
Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...
- 译:Spring框架参考文档之IoC容器(未完成)
6. IoC容器 6.1 Spring IoC容器和bean介绍 这一章节介绍了Spring框架的控制反转(IoC)实现的原理.IoC也被称作依赖注入(DI).It is a process wher ...
- Spring学习指南-第二章-Spring框架基础(完)
第二章 Spring框架基础 面向接口编程的设计方法 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...
- spring最核心思想--ioc控制反转
一核心概念 控制反转:将bean的生成交给容器,程序可以从容器中获取指定的bean. 个人理解:此优势也是spring能够流行并成为java主流框架的主要原因,java是帮助java程序员以对象的方式 ...
- Spring核心思想——IOC和DI
基本概念 IOC是什么? IOC(Inversion of Control)控制反转,IOC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. IOC解决了什么问题? ...
随机推荐
- 输出错误long类型
Microsoft Visual C++ 输出不了long 类型的数字怎么办? 在C/C++中,64为整型一直是一种没有确定规范的数据类型.现今主流的编译器中,对64为整型的支持也是标准不一,形态各异 ...
- 根据WSGI协议自己实现mini-web框架(1)
1. 为什么要研究WSGI 我之前在学习web开发时,往往都是根据MVT等架构直接写所谓的“视图”,使用其本身自带的http服务器,当时就一直很好奇,为什么有了HTTP协议之后,还要研究WSGI协议, ...
- oracle中的分组排序
1.首先,需要建表. 表名:coursr(失误,表名写错了) 2.我们需要对每个课程进行排序. 3.知识准备: 分组排序函数有3种: row_number() over() rank() over() ...
- 《Java练习题》进阶练习题(一)
编程合集: https://www.cnblogs.com/jssj/p/12002760.html 前言:不仅仅要实现,更要提升性能,精益求精,用尽量少的时间复杂度和空间复杂度解决问题. [程序48 ...
- 更改CSDN博客皮肤的一种简易方法
CSDN改版后,皮肤设置变得不能够更改了,不过下面这种方法依然可以做到: 首先来到博客设置的主页面:. 接下来按ctrl + shift + i进入 如下页面,然后点击图中红色标记圈起来的选择元素按钮 ...
- net core 3.1 跨域 Cors 找不到 “Access-Control-Allow-Origin”
首先在ConfigureServices添加 public void ConfigureServices(IServiceCollection services) { services.AddCors ...
- MongoDB(八):索引
1. 索引 索引支持查询的有效地提高效率.没有索引,MongoDB必须扫描集合的每个文档,以选择与查询语句匹配的文档.这种扫描效率很低,需要MongoDB处理大量的数据. 索引是特殊的数据结构,以易于 ...
- Elasticsearch(GEO)数据写入和空间检索
Elasticsearch简介 什么是 Elasticsearch? Elasticsearch 是一个开源的分布式 RESTful搜索和分析引擎,能够解决越来越多不同的应用场景. 本文内容 本文主要 ...
- sessionstorage中存储JSON数据
在web开发时,可能经常会用到sessionstorage存储数据,存储单个字符串数据变量时并不困难 var str = 'This is a string'; sessionstorage.setI ...
- VMware Workstation 15 Pro中安装ubuntu1804
这篇笔记是一篇安装教程,没有什么实际的意义,仅为了记录一下……距离上次弄这东西不知道多长时间了,以至于这次再次使用时很是生疏,于是就想着把过程记录下来方便之后查看. 这里不涉及VMware Works ...