Spring 是什么
什么是 IoC 容器
容器就是一个能 存 和 取 东西的载具。IoC(Inversion of Control)翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器,详述地说就是 控制权的反转。
比如我现在要创建一个“车”对象,然后就得创建一个实例,但是“车”依赖于“车身”,“车身”又依赖于“底盘”,同时“底盘”又依赖于“轮胎”。因此,代码的实现就是这样的:
随着时间的推移,有的人不喜欢这个大轮胎,就像换个小轮胎,那么此时别的类也得跟着一起变:
如果有的人又喜欢别的颜色别的车身时,改变的地方就会很多,因为耦合太高了(控制权在自己手上),因此 IoC 容器就出现了,当一个类依赖另一个类时,不会自己创建了,而是统一交给一个地方创建(控制权都在他这里),此时,当再创建一个 car 对象时就不需要创建依赖的类了,而是在进行实例的时候把依赖的作为参数传过来就行,这样就算哪个地方改了参数也不影响,因为传过来的时候就已经都包含了:
这时候,有人喜欢大轮胎的时候只需要改变一个地方就行了,这就实现了“解耦”(控制权交出去了)。
关于 Spring IoC
Spring IoC 就是对象的创建和销毁的权利都交给 Spring 来管理了,它本身⼜具备了存储对象和获取对象的能⼒。
因为传统在创建对象的时候出了这个作用域就用不了了,然后下次再想用的时候就还得再创建。new 对象的⽅式相当于,每次需要⼯具了,才现做,⽤完就扔掉了也不会保存,下次再⽤的时候还得重新做。而 Spring IoC 相当于将以后可能⽤的所有⼯具制作好都放到仓库中,需要的时候直接取就⾏了,⽤完再把它放回到仓库。
关于 DI
说到 IoC 不得不提的⼀个词就是“DI”,DI 是 Dependency Injection 的缩写,翻译成中⽂是“依赖注⼊”的意思。
总结
Spring 就是一个包含了多种工具和方法的 IoC 容器。把 Bean 对象存进 IoC 容器中,从 IoC 中把 Bean 对象取出来。
IoC 和 DI 描述的是同一件事,只是再细致区分的话会有所不同:IoC 是一种思想,DI 是一种具体实现的技术。
Spring 最核心的功能就是 IoC 容器的 存 和 取。