zoukankan      html  css  js  c++  java
  • Spring IOC(四)总结升华篇

    本系列目录

    Spring IOC(一)概览

    Spring IOC(二)容器初始化

    Spring IOC(三)依赖注入

    Spring IOC(四)总结升华

    =============正文分割线==================

    Spring 有很多特性,支撑这些特性的是优良的设计思想,IOC(DI)就是其中最典型的控制反转思想,或者叫依赖注入。本系列文章追踪了容器的初始化、以及获取bean的过程。下面总结了几个核心流程图。

    1.spring容器中Bean生命周期

    2.IOC容器中核心接口

      Spring Ioc容器的核心是BeanFactoryBeanDefinition。分别对应对象工厂和依赖配置的概念。虽然我们通常使用的是ApplicationContext的实现类,但ApplicationContext只是封装和扩展了BeanFactory的功能。XML的配置形式只是Spring依赖注入的一种常用形式而已,而AnnotationConfigApplicationContext配合Annotation注解和泛型,早已经提供了更简易的配置方式,AnnotationConfigApplicationContext和AnnotationConfigWebApplicationContext则是实现无XML配置的核心接口,但无论你使用任何配置,最后都会映射到BeanDefinition。

            其次,这里特别要注意的还是BeanDefinition, Bean在XML文件里面的展现形式是<bean id="…">…</bean>,当这个节点被加载到内存中,就被抽象为BeanDefinition了,在XML Bean节点中的那些关键字,在BeanDefinition中都有相对应的成员变量。如何把一个XML节点转换成BeanDefinition,这个工作自然是由BeanDefinitionReader来完成的。Spring通过定义BeanDefinition来管理基于Spring的应用中的各种对象以及它们之间的相互依赖关系。BeanDefinition抽象了我们对Bean的定义,是让容器起作用的主要数据类型。我们知道在计算机世界里,所有的功能都是建立在通过数据对现实进行抽象的基础上的。Ioc容器是用BeanDefinition来管理对象依赖关系的,对Ioc容器而言,BeanDefinition就是对控制反转模式中管理的对象依赖关系的数据抽象,也是容器实现控制反转的核心数据结构,有了他们容器才能发挥作用。

    3.IOC容器启动流程

    不管通过何种渠道定义的bean,xml配置还是注解,最终容器启动时,都会调用AbstractAplicationContext的Refesh()方法,流程图整理如下,可对应第一节中的Bean生命周期图,先beanFactory初始化、后置处理器,再bean后处理器,实例化bean。

    4.IOC依赖注入流程

    这里的依赖注入就是获取bean时依赖注入相关属性(或者其他bean)。主要是AbstractBeanFactory和AbstractAutoWireCapableBeanFactory.

    主要分两步:

    1.bean实例化和初始化

    2.根据实例化bean获取bean对象。流程图如下:

    值得一提的是bean初始化方法:AbstractAutoWireCapableBeanFactory.initializeBean中封装了

    1.Aware接口方法:
    BeanNameAware:setBeanName
    ResourceLoaderAware:setBeanClassLoader
    BeanFactoryAware:setBeanFactory
    2.BeanPostProcessors: postProcessBeforeInitialization初始化前置处理器
    3.InitializingBean:afterPropertiesSet
    4.init-method自定义初始化方法
    5.BeanPostProcessors :PostProcessorsAfterInitialization初始化后置处理器

    这些接口方法全部在bean的生命周期中可以查到。

    我们可以对比Bean生命周期图、容器启动流程图、IOC依赖注入流程图,可以发现这三个图,相互印证,互相依存。

    精髓思想:

    如果说容器就是社会,是有秩序的。容器中的Bean就像社会中的人一样,人生活在社会中,由社会创造人并维护人的生命周期。那么IOC依赖注入就是容器把Bean安插在各个需要的地方,就像是社会把人安排在需要的岗位上去实现自己的价值。

    容器、Bean、IOC依赖注入刚好对应社会、人、依存关系。不知道这样讲,大家是否了然了。正所谓大道归一......

  • 相关阅读:
    chrome被篡改 导航到搜狗 或者特殊页面
    安装tomcat jdk
    监控tomcat 启动
    关于如何关闭445端口
    python模拟大数据登陆
    搭建vsftpd服务
    kali syn洪水攻击实例
    HP880G3 安装RHEL6.5
    Python_列表
    Python第一个请求接口
  • 原文地址:https://www.cnblogs.com/dennyzhangdd/p/7730050.html
Copyright © 2011-2022 走看看