Spring IoC 学习(1)

简介: 以前做开发的时候,一直逃避,逃避不想深入。但是目前的工作不允许我逃避,没有任何借口,总归还是得迎难而上。该Spring系列是我目前想做的第一个系列,首先想把Spring IoC的相关源码和原理研究一下这篇即为入门第一篇。

基本概念

IoC是什么?

如果这个问题要是面试的问题,那么我会这么回答。

IoC(Inversion of Control 控制反转),当然它还有另一个名字,DI(Dependency Injection 依赖注入)。这两个名称其实实质上指的都是同一样的东西。只不过看问题的角度是不一样的。IoC指的是,原来我们需要获得一个对象(Object)的时候,我们的第一想法就是用new。搭配下图,效果更好。

299d19dac9cdc145.png | center

现在我们不用new了,是别人给我们的。既然是别人给的,那么,别人可以给,也可以不给。主动权这个时候,肯定就不在我们自己的手里了,在别人的手里了。所以,名叫IoC,控制反转。

为什么要使用IoC?

至于为什么要使用IoC,不用自己new,我说说自己的看法。

Person person= new Asian("Alibaba");

看看,上面的代码可以看出,我们需要一个Person,这个person,我们选择new出来。但实际上new的不是Person本身,而是其继承类,Asian。那如果有一天这个叫Alibaba的亚洲人,不这么想了。程序需要更精确些。是不是要改成下面这样的。

Person person=new Chinese("Alibaba");

那如果改的地方其实还挺多的呢,我们的应用还大呢?【一般公司的应用,都不会小】你还一个个去new,去改吗?

image.png | center | 382x239

这时候就体现出IoC的优势了,即别人帮你管要new的东西,在Spring的配置文件里面改就好了,给你的这部分代码是不用改的。我们来看看

//读取bean.xml中的内容
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
//创建bean的引用对象
Person p = ctx.getBean("person");

当然,以上的代码并不难,实际中,我们很有可能也不这么用。但是,本质的意思总归是这个意思的。

我说了这么多,其实就只为了体现一个IoC的优势。

==资源集中管理,实现资源的可配置和易管理。==

第二个优势,看下面两张图

image.png | center | 424x240
image.png | center | 424x319

这是我画的有关IoC Provider与其他POJO类的关系图,其实本来,Person拥有Pets,Person和Pets都拥有Life是一件再平常不过的事儿。所以原来他们的关系是很紧密的,后来有了IoC Provider之后,就把这三者紧密联系的类分开了。而且,其实分的很开。

你要问,这又有什么优势?看来还是不行啊,还是要整代码。

Person person= new Asian("Alibaba");
person.setPet=new Dog("Lili");
person.setLife=new Life("good");

那我dog改成cat呢,Life改成bad呢?代码的耦合性很强,一个改,个个改。这不就很麻烦吗?如果把bean的管理都交给IoC,那就是IoC帮你管,要变化,IoC变化了之后再给你。不就不用你操心了吗?这还不算优势吗?

优势总结

1、 资源集中管理,实现资源的可配置和易管理。

2、降低了使用资源双方的依赖程度,解耦。

以上总结来自 https://www.zhihu.com/question/23277575

感谢

各位朋友,请原谅一只小菜鸟写的入门文章及感悟,若有不足请指出。

目录
相关文章
|
2月前
|
XML Java 数据格式
Spring IoC容器初始化过程(xml形式)
Spring IoC容器初始化过程(xml形式)
46 0
|
2月前
|
Java Spring
Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)
Spring5深入浅出篇:Spring中ioc(控制反转)与DI(依赖注入)
|
1月前
|
Java 数据库连接 API
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
49 0
|
20天前
|
XML Java 数据格式
Spring(一)IOC小案例
Spring(一)IOC小案例
|
1月前
|
XML Java 数据格式
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (下)
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界
|
1月前
|
XML Java 数据格式
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (上)
Spring 的奇幻起源:从 IoC 容器到 Bean 的魔法世界 (上)
|
2月前
|
XML 缓存 Java
Spring IoC原理解读
Spring IoC原理解读
26 0
|
2月前
|
Java 测试技术 开发者
探究 Spring Boot 的核心:IOC 和 AOP
Spring Boot 作为一种简化 Spring 应用开发的工具,继承了 Spring 框架的核心概念,其中最重要的是控制反转(IOC)和面向切面编程(AOP)。它们是 Spring 框架的基础,同时也深深植根于 Spring Boot 中。本文将讨论 IOC 和 AOP 的概念以及它们在 Spring Boot 中的应用。
59 4
|
2月前
|
Java 调度 开发工具
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
SpringCloud【微服务架构进化论、微服务的拆分规范和原则、为什么选择Spring Cloud、什么是服务治理 】(一)-全面详解(学习总结---从入门到深化)
179 0
|
2月前
|
缓存 Java uml
SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)
SpringBoot2 | Spring IOC 流程中核心扩展接口的12个扩展点源码分析(十一)
37 0