day1 - spring技术内幕

123 阅读3分钟

spring技术内幕学习笔记

spring IoC容器的实现

spring IoC设计模式

spring IoC模式设计采用依赖控制反转模式,看了很多文章对依赖控制反转都是一笔带过,其实很不负责任。
IoC的容器的主要核心就是依赖控制反转,结果对与这个模式确实是一笔带过,使很多学习spring的人往往只闻其名,不见其意。
下面一段话IoC容器的学习者其实可以细细体会。
  如果合作对象的饮用或依赖关系的管理由具体对象来完成,会导致代码的高度耦合和可测试性的降低,这对复杂的面向对象系统的设计是非常不利的。
  摘自spring技术内幕

学习spring ioc容器需要我们自己对其有一个全面的解读?

  1. spring容器是如何创建bean对象的?
  2. spring容器是如何管理bean对象的生命周期的?
  3. spring容器是如何销毁bean对象的?

认识了这几点之后,我们就可以从全流程中定位每一个模块的作用从而便于理解和认识ioc容器。

流程一: spring ioc通过读取bean配置文件生成相应的bean对象。

此过程我们只关心bean对象的生命周期,关于bean的生命周期已经有很多大神讲解的很详细了,下面总结个人的理解总结的。

bean的生命周期不应该只关注bean本身的初始化和销毁过程,如果只从bean本身出发,就是初始化,应用业务,销毁三个阶段。但是如果只理解这三个阶段其实没有什么可说的。如果从spring容器的初始化,到销毁阶段就可以完美的理解bean的生命周期了。

1. IOC容器启动,此时如果开发人员想要在此处做容器启动阶段需要做的操作,就是bean的容器级操作,就是经常看到的BeanFactoryPostProcessor接口,如果开发者实现了这个接口这个方法只会在容器启动的时候执行一次,切记是一次。

2. IOC容器启动后,会初始化每一个bean,简单的理解就是new 一个bean对象,如果开发者想在初始化bean之前进行一些业务操作就是这一处其实也是容器级的但是是想再每一个bean初始化之前和之后执行,就是BeanPostProcessor接口,开发者实现了此接口,有多少个bean就需要执行多少次实现类。

3. 全面连个都是偏向大方向但是在初始化bean之后,初始化就是实例化一个对象,远远没达到spring bean提供的依赖注入,这时候就是需要将配置文件中属性注入到bean实例中,这时候才是一个真正的实例对象。注入就是一堆的属性的setter方法了,他们会执行,同时这时候你想把容器的一些星系注入到这个实例中,其实就是实现一堆spring提供的接口BeanFactoryAware,BeanNameAware等会在属性注入后执行,InitializingBean和DisposableBean就是定义在一些自定义的方法而已,切记一定要明白一点,这些东西执行的前提bean已经是一个完整的实例对象,只是要在上面做修饰而已。bean自身的init-method和destroy-method同理。