Spring IoC的概念
Spring框架是目前Java世界非常成功的框架,在企业的实际应用中,大部分的企业架构都是基于Spring框架。
Spring最为核心的理念是IoC(控制反转) 和 AOP(面向切面编程),IoC 是Spring的基础,而AOP则是Spring的重要功能。对于初学者来说,掌握这两者对于以后深入理解Spring整套框架体系至关重要。
IoC(控制反转)光听这个名字可能对于初学者来说比较难以理解,甚至可以说是比较抽象。但其实我们可以通过以下一个生活中的例子来说明:
比如此时此刻你感觉到饿,想要吃饭,有很多种选择你可以做,可以通过自己去买来新鲜的菜然后自己做饭,这其实是一种自己主动的过程;当然你也可以点外卖,将做菜的过程交由他人实现,这样也能达到自己当初的目的,但这其中的过程与自己做饭又产生了很大的区别,这并不是你主动去做的饭。
上述简单的例子就是Spring IoC的一个简单表现,接下来阐述控制反转的概念:
控制反转是一种通过描述(XML或者是注解)并通过第三方去产生或获取特定对象的方式。
Spring会提供IoC容器来管理对应的资源,正如我上面讲述的例子,餐饮店和外卖订单,他们形成依赖注入的关系,我们并不需要去了解它是如何被加工制作出来的,只需要明白点外卖能满足你的需求就好。
在企业中亦是这样,负责开发财务模块的完成对财务接口的开发,并将其发布到Spring IoC容器中,这个时候你就能通过接口完成你对应的测试,但你却不需要了解到它整个开发的过程。同样的,当你完成了你负责开发的接口后,上传到IoC容器中,你的同事也能够调用其对应的业务功能。
这就死控制反转的一种理念,它能够降低对象之间的耦合,从而降低测试的复杂度,降低开发难度。
Spring IoC容器
上述所说,我们知道了Spring IoC容器的作用,它可以装载我们开发所需要的各种Bean,并且我们能很轻易的获取到IoC容器中的Bean。
Spring IoC容器的设计主要是基于BeanFactory 和 ApplicationContext两个接口,并且ApplicationContext接口是BeanFactory的子接口之一,BeanFactory是Spring IoC容器定义的最底层接口,ApplicationContext是其高级接口之一,并且扩展了许多功能。所以我们在绝大多数场景下选择ApplicationContext作为Spring IoC容器,至于接口的源码,大家可以网上查阅。
Spring IoC容器的初始化和依赖注入
Spring IoC容器的生成十分复杂,但是我们能了解其大体的过程,这对于我们继续深入理解Spring框架有重要帮助。
Bean的定义和初始化在Spring IoC容器中是两大步骤,它是先定义,然后初始化和依赖注入。
Bean的定义分为三步:
(1)Resource定位,这一步是Spring IoC容器根据开发者的配置,进行资源定位,在Spring的开发中,XML和注解的配置十分常见,定位的内容都是由开发者提供的。
(2)BeanDefinition的载入,这时候并没有完成Bean的创建,只是将BeanDefinition的信息发布到Spring IoC容器中。
(3)BeanDefinition的注册,这一个过程是将BeanDefinition的信息发布到Spring IoC容器中,而此时并没有创建对应Bean的实例。
以上三个步骤完成后,Bean在Spring IoC容器中定义了,但是还没有完成初始化和依赖注入。Spring Bean还有一个配置选项——lazy-init,默认值是default实际值是false,也就是Spring IoC默认会自动初始化Bean,当它设置为true时,则我们在调用getBean方法时才会完成Bean的初始化,完成依赖注入。
总结:
每当学习一样新的事物时,我们应当对其抱有兴趣,才能学好它。而IT行业更应当如此,光说不练,纸上谈兵永远都当不了一个合格的开发者,我们应当对自己所学抱有怀疑的态度,尽自己所能去了解它,以上所述,我们可以通过IDE去试着编写,打断点去一步一步验证,毕竟,只有亲身经历,亲眼所见的才能牢牢地映刻在我们心中。