zoukankan      html  css  js  c++  java
  • 【Spring】IOC容器到底是咋肥事啊?

    菜瓜:网上整天说的IOC容器是个啥啊?

    水稻:IOC?就是Inversion of Control,控制反转啊

    菜瓜:soga,原来是控制反转啊,我知道了!你这不是等于白说吗?

    水稻:别急,听我慢慢说(概念只是为了帮助人们去理解的辅助工具):

    • 作为一个正常的Javaer,如果没有Spring,我们在A对象里面用到B对象,是不是要自己创建或者引用B,这些操作都是由调用者A来控制
    • 来到熟悉的Spring,直接使用@Autowired注入B开箱即用,A不用再管B的创建啥的,只需要有个装B的容器给A分配就行了。这个容器就是IOC容器

    菜瓜:哦,就是A引用B本来由自己创建的,结果变成了IOC容器分配对象了。且如果有多个对象之间存在引用关系就省了好多代码?

    水稻:deideidei,那你知道Spring的IOC容器初始化是咋做的吗?

    菜瓜:如果是我的话,就利用工厂,在项目启动的时候将所有的对象封装到一个大的容器里面,就是上次我们说的那个工厂模式稍微改造一下,把创建出来的对象存起来,用的时候再去取。

    水稻:思路正确,接下来进入你最喜欢的源码解析环节。Spring启动的过程其实也是IOC容器初始化的过程,以SpringBoot为例

    • 先介绍几个重点对象,再看流程
    • AbstractApplicationContext:核心方法refresh()定义了Spring容器的整个初始化流程 - 模板方法模式(你懂的)
      AnnotationConfigApplicationContext:以注解方式启动Spring容器时的上下文。
      - 初始化它的时候会调用方法AnnotationConfigUtils.registerAnnotationConfigProcessors(this.registry);
      - 该方法会注册BeanPostProcessor接口的实现类信息到BeanDefinitionNames中,最为关键的ConfigurationClassPostProcessor为SpringBoot启动类上的注解提供了支撑 BeanFactoryPostProcessor接口:对BeanFactory指指点点 BeanPostProcessor接口:对Bean的信息指指点点 - 你知道的@Autowired@Resource@ComponentScan@Bean@Import@Configuration注解都是它的实现类来解析的
    • 假设你看过SpringBoot的启动类源码(你点一下那个run方法跟进去找)能发现流程中反射初始化了AnnotationConfigApplicationContext类,然后调用AbstractApplicationContext的refresh方法,对容器进行初始化
    • 第一步是创建BeanFactory工厂,过程中会解析xml标签并将其封装成BeanDefinition对象
    • 接下来会初始化BeanFactoryPostProcessor和BeanPostProcessors实现类对象,该过程会搜集注解形式配置的bean对象放入容器BeanDefinitionNames容器
    • 最后遍历BeanDefinitionNames容器,挨个实例化对象,放入工厂中

    菜瓜:流程我大概清楚了,里面还有好多细节还是懵的。想具体了解一下注解是怎么扫描的。BeanDefinition是什么。BeanPostProcessors干了什么

    水稻:这个我也还整不太灵清。我得下去再看看

            

  • 相关阅读:
    聊聊WS-Federation
    用双十一的故事串起碎片的网络协议(上)
    责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析
    最小化局部边际的合并聚类算法(中篇)
    最小化局部边际的合并聚类算法(上篇)
    UVaLive 7371 Triangle (水题,判矩形)
    UVaLive 7372 Excellence (水题,贪心)
    POJ 3312 Mahershalalhashbaz, Nebuchadnezzar, and Billy Bob Benjamin Go to the Regionals (水题,贪心)
    UVa 1252 Twenty Questions (状压DP+记忆化搜索)
    UVa 10817 Headmaster's Headache (状压DP+记忆化搜索)
  • 原文地址:https://www.cnblogs.com/nightOfStreet/p/13042718.html
Copyright © 2011-2022 走看看