理解Spring IoC(一)

毫无疑问,Spring是目前Java web的头号框架,而其最重要的特性就是IoC和AOP。

这里,我会用通俗的方式表达我对Spring IoC的理解


IoC 即 Inversion of Control,意为控制倒转。

它的实现需要DI,也就是依赖注入。

那么这个控制倒转到底是怎么倒转的呢?

其实就是让Spring控制。Spring说,你要什么类,都在我这里注册,我来向你提供管理,你可以自己制定一些管理的细节,要修改或者添加等等这些工作,通知我一下,让我来完成。

比如我们有A B C三个类,可能存在各种依赖,我们需要的时候就去跟Spring去注册,要修改的话,就告知Spring,而在运行的时候,Spring自然就会去把依赖修改掉。

我们不必因一个类的修改而改变大量的类的代码,我们要做的只是改变Spring的配置文件。

于是看起来,是Spring向我们需要操作的类下命令,而不是我们。这就是IoC。

可是,Spring具体是怎么搞定它的呢?为什么Spring能够完成找到Bean、创建Bean、配置Bean依赖等工作呢?

Spring涉及到IoC最主要的是两个数据结构:

一个是BeanDefinition,可以把它看成一个Map

另一个是BeanFactory等Spring IoC容器,暂且也当作Map好了

要想Spring框架对Bean的操作,就要先了解Spring中Bean的生命周期:

1、配置文件解析,IoC容器初始化

不管是BeanFactory,还是ApplicationContext的实现类,都是先解析我们的配置文件的(因为我们要通过修改配置文件的方式向Spring传达命令)

配置文件读取后,其中的内容会按照格式映射到BeanDefinition中,然后将字符串解析成类的信息,这时候读出来的信息就归属BeanDefinition管理了

BeanDefinition则会在解析后注册到Spring IoC容器中

2、Bean实例化

这一步就是通过getBean从IoC容器中获取Bean

getBean方法有许多重载函数,其实现比较复杂,也是IoC十分重要的一环

 3、检查Aware相关接口并配置依赖

4、BeanPostProcessor前置处理

5、检查是否是IntializingBean,决定是否调用afterPropertiesSet方法

6、检查是否自定义init-method

7、BeanPostProcessor后置处理

8、注册Destruction相关接口

9、使用

10、销毁

猜你喜欢

转载自www.cnblogs.com/sh1296/p/10802366.html