一、Spring是什么?如何理解Spring
我们通常所说的Spring,其实也就是Spring Framework ,是java圈子里应用非常广泛的一种框架,如果用一句话概括,那就可以说Spring是包含了众多工具方法的IoC容器。
如果需要对这个概述做进一步阐释,前半句没什么好说的,那我们就需要从IoC和容器这两个角度来入手进一步讨论。
二、IoC和DI是啥?有啥区别?
一说起这个IoC,我们一般会和这个DI联想到一起,他们就跟一对CP一样,所以理清楚他俩之间的联系也可以帮助理解。当然我还是先分别说说我对他俩的理解再说其他的哈。
IoC其实是Inversion of Control的缩写,其实翻译成中文,我们可以理解为是控制权的反转。这里我举一个例子来说明:
假定我们要造车子,按照一般的思路是从车--》框架--》车底--》轮胎的吧,那么如果将这个过程程序化,我们就需要定一个Car类,然后里边有个Frame的对象,然后定义Frame类,里边有一个Bottom对象,再定一个Bottom类,里边有一个Tire对象,最后Tire类里边有造一辆车需要的最基本的属性,比如,轮胎大小,轮胎的颜色(红、蓝、黑、白),这一组程序中,Car对象就对Frame对象有控制权,Frame对象就对Bottom,Bottom对Tire有控制权。但是试想,现在来了个超级有钱的少爷或者小姐说,我有钱,我不想要和别人一样款式的车,我要超级拉风的车子,车线要流畅,要非常酷/靓,颜色要个黑曜色/暗夜紫,轮胎要个更大的,再加一些别人没有的配置等等一些类要求,这个生意做吗!当然得做!但是我们如果按照现有的工厂模式,一层嵌一层的,想要完成这笔订单,得非老力了,我们这整个调用链上的代码都得调整。
但是如果我们换个思路,不在每个类下边创建自己依赖的子类,而是直接在终端创建对象,然后一层一层的放到需要依赖它的对象里边,这样即使下层发生变化,上层也不需要改动任何代码。这样就可以完成了程序的耦合性,实现了车子定制化自由~~
后边思路里相当于Tire对象对Bottom对象有控制权,Bottom对Frame,Frame对car有控制权,与之前相比,发生了控制权反转,这个对象控制权发生反转的过程,就体现了IoC思想。
至于DI,其实也就是Dependency Injection即依赖注入,也就是把依赖的某个对象动态的拿到当前类的行为。
关于两者的联系,相同的是它都描述了同一件事,就是通过依赖关系注入的方式,实现对象之间的解耦,都有方便、高效、解耦的优点,不同的是IoC是一种思想,DI则是IoC思想落地的具体实现。
三、Spring最核心的功能是啥?
简单来讲,就是两个,一是从spring容器中取对象,而是从往spring容器中放对象。
具体说存取的流程的话,就是首先创建一个spring项目,然后创建一个Bean,并把它注册到spring的配置文件中(resources目录下);取Bean的话就是获取全局配置文件,创建spring上下文对象,通过getBean获取bean,然后使用bean。