Spring02——理解IOC原理(一)

SpringIOC

  • IOC (Inversion Of Control)
  • DI(Dependency Injection)
  • IOC底层原理
    • 1、传统式开发:
    • IOC原理图解

如何通俗的理解spring的控制反转、依赖注入、面向切面编程等等详解

IOC (Inversion Of Control)

Spring的一大特色,也是Spring用来降低代码之间的耦合的关键。也是一种编程思想!!! 在之前的文章中我们谈了如何简单的使用IOC容器创建对象!今天我们来看看它是如何实现的!
IOC:控制反转,既然说到控制反转,那么我们首先就要明白谁控制谁,控制了什么。这里引用开涛大大的一句话:

传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IoC是有专门一个容器来创建这些对象,即由Ioc容器来控制对象的创建;谁控制谁?当然是IoC容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。

在我理解看来,99%的编码思想大部分来源于我们的生活,以上总结就可以联想到我们平时生活中一幕来理解:

比如:我们想要一台电脑,我们可以自己从零开始组装(当然首先你要会做各种硬件)显卡、硬盘、显示器、主机等等,对于博主这种不懂电脑的屌丝来说,这太难了。传统的开发是不是就像是这样的呢。对,没错!所以才有个联想、dell、apple、神舟、华硕…这些生产笔记本的厂商!这些厂商呢就好比我们的IOC容器,我们想买一台电脑,只需打开某宝、或者某东、选一下品牌、配置就可以轻轻松松获得一台电脑。制作电脑的过程我们无需了解,也无需参与!!!是不是很容易就会获得一台自己心仪的电脑呢!是的!
Spring也倡导这么做!在我们开发中,我们只需要告诉Spring我们需要什么东西,Spring内部进行一定的操作,在适当的时候就会返回给你一个你想要的东西,同时也会把你的东西交给其他需要你的东西。所有的类的创建、销毁都由Spring来进行控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转

DI(Dependency Injection)

说到了IOC,我们通常还会同时听到这个名词DI(Dependency Injection,依赖注入)

还是上面那个话题“买电脑”,难道生产笔记本的厂商什么都要自己做吗?屏幕也要自己做?塑料壳也自己做吗?答案肯定是不可能的,肯定需要各个厂商的合作才能生产出我们能使用的电脑,电脑生产商需要屏幕,那么就会有专门制造屏幕的工厂为他们提供、需要处理器,就有专门制造处理器的工厂为他们提供…那么我们是不是就可以理解为电脑生产商就要依赖于各个零件制造商呢!Spring亦是如此,比如我们操作对象需要连接数据库,以前我们要自己编写代码来获得一个Connection对象,有了Spring,我们就管Spring要,至于Connection对象如何构造,何时构造,我们无需知道,我们要用的时候,Spring就会注入进来,这样我们就完成了对各个对象之间关系的控制。而这个Connection是由spring注入进来的,这就是DI,依赖注入

IOC底层原理

说了这么多!那么IOC底层原理到底是怎样的呢!
可以总结一下四点:
(1)xml配置文件
(2)dom4j解决xml
(3)工厂设计模式
(4)反射
接下来我们就用代码来反映我们上面所说的!

1、传统式开发:

Spring02——理解IOC原理(一)_第1张图片

一开始我们调用对象的方法如图左所示,当我们需要在Servlet中调用User类的add方法时,需要先new一个User对象,然后在调用它的add()方法。这样的话,如果我们User类名发生了变化或者add()方法发生了变化,那么我们其他的地方也需要改,耦合度太高,关联太紧密,后面我们有出现了一种解耦的方案,工厂模式解耦!入上图右所示,我们通过创建工厂类,在类中创建一个静态方法,返回UserService()对象,在UserServlet中我们通过调用Factory.getService()方法!然而这种方案又存在新的耦合度,Servlet和工厂类耦合!不符合我们“高内聚,低耦合”的编程思想!

IOC原理图解

Spring02——理解IOC原理(一)_第2张图片
我们通过配置文件的形式将对象创建,创建工厂类,使用dom4j解析配置文件,通过反射创建类对象。在UserServlet中直接调用UserFactory.getService()得到UserService的对象。这样就完美的实现了解耦。

你可能感兴趣的:(Spring)