本文源码: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 说明,案例演示的更多相关文章

  1. Spring框架中的核心思想包括什么

    (1)依赖注入 (2)控制反转 (3)面向切面

  2. Spring核心思想Ioc和Aop (面试)

    Spring核心思想Ioc和Aop (面试) 注意: Ioc和Aop并不是Spring提出的,在Spring之前就已经存在,Spring只是在技术层面给这两个思想做了非常好的实现. 1 Ioc 1.1 ...

  3. Spring最核心的功能是什么?使用Spring框架的最核心的原因是什么?

    quote:Spring最核心的功能是什么?使用Spring框架的最核心的原因是什么? (IT公司面试手册,可以多看看) spring 框架中核心组件有三个:Core.Context 和 Beans. ...

  4. Spring框架基础2

    Spring框架基础2 测试Spring的AOP思想和注解的使用 导包(在前面的基础上添加) SpringAOP名词解释 AOP编程思想:横向重复代码,纵向抽取:就是说多个地方重复的代码可以抽取出来公 ...

  5. 4-1 Spring框架基础知识

    Spring框架基础知识 1.Spring 框架作用 主要解决了创建对象和管理对象的问题. 自动装配机制 2.Spring 框架 (Spring容器,JavaBean容器,Bean容器,Spring容 ...

  6. 译:Spring框架参考文档之IoC容器(未完成)

    6. IoC容器 6.1 Spring IoC容器和bean介绍 这一章节介绍了Spring框架的控制反转(IoC)实现的原理.IoC也被称作依赖注入(DI).It is a process wher ...

  7. Spring学习指南-第二章-Spring框架基础(完)

    第二章 Spring框架基础 面向接口编程的设计方法 ​ 在上一章中,我们看到了一个依赖于其他类的POJO类包含了对其依赖项的具体类的引用.例如,FixedDepositController 类包含 ...

  8. spring最核心思想--ioc控制反转

    一核心概念 控制反转:将bean的生成交给容器,程序可以从容器中获取指定的bean. 个人理解:此优势也是spring能够流行并成为java主流框架的主要原因,java是帮助java程序员以对象的方式 ...

  9. Spring核心思想——IOC和DI

    基本概念 IOC是什么?     IOC(Inversion of Control)控制反转,IOC是一种新的Java编程模式,目前很多轻量级容器都在广泛使用的模式. IOC解决了什么问题?      ...

随机推荐

  1. ELK 理论小知识

    ELK 是现阶段众多企业单位都在使用的一种日志分析系统,它能够方便的为我们收集你想要的日志并且展示出来 ELK是Elasticsearch.Logstash.Kibana的简称,这三者都是开源软件,通 ...

  2. 《Java基础知识》Java变量的声明、初始化和作用域

    一.Java变量的声明 在 Java 程序设计中,每个声明的变量都必须分配一个类型.声明一个变量时,应该先声明变量的类型,随后再声明变量的名字.下面演示了变量的声明方式. double salary; ...

  3. Day01-基础数据类型/用户交互/流程控制之-if

    1.基础数据类型 什么是数据类型 我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,计算机虽然很强大,但从某种角度上看又很傻,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘ ...

  4. B站上传字幕问题解决

    博客:blog.shinelee.me | 博客园 | CSDN B站上传字幕时,如果srt文件中出现如下空行,则会报错,仅上传了空行前的部分 于是写了个python脚本,如下: import pys ...

  5. GeoServer 2.15.0版本跨域问题解决方法

    geoserver默认不开启跨域设置,开启步骤如下: 1.修改配置文件web.xml,该配置文件的路径如下 \webapps\geoserver\WEB-INF\web.xml 2.搜索:cross- ...

  6. 定制Dynamics 365 Portal 界面

    1.通过Portal Designer直接进行定制 以管理员用户登录Portal后会出现Portal Designer,可以进行对homepage的部分元素及Navigation直接进行定制 2.通过 ...

  7. Scrum Meeting - 第六周【Alpha阶段】

    每日任务内容: 本次会议为第六次Scrum Meeting会议 本次会议项目经理召开时间为20:00,在北区男生宿舍楼召开,召开时长约15分钟,探讨了本周选课网站编写的后续工作. 小组成员 本周任务 ...

  8. sql server查询(SELECT ,where,distinct,like 查询,in,is null,group by 和having,order by,as)

    基本查询: 实例表 示例表 --部门表 create table dept( deptno int primary key,--部门编号 dname ),--部门名 loc )--地址 ); --雇员 ...

  9. Linux_crontab参数表示的意思

    *       *      *       *      * (下面的字体对应) 分     时    日    月    周 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满 ...

  10. Sqoop 抽数报错: java.io.FileNotFoundException: File does not exist

    Sqoop 抽数报错: java.io.FileNotFoundException: File does not exist 一.错误详情 2019-10-17 20:04:49,080 INFO [ ...