栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring IOC创建流程一(概述)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring IOC创建流程一(概述)

        关于IOC的创建流程,本篇文章只介绍他的大体流程,旨在让多数人对spring有一个整体的概念,源码介绍将在下一篇文章讲解。

        首先介绍一下IOC是什么, IOC全称Inversion of Control 中文直译叫做控制反转,这个概念非常抽象,导致初学者一头雾水(包括我在内,其实现在也只是一知半解,还请各位大佬指导),通常IOC这个概念会跟IOC容器一起出现。

        那么spring的容器到底是什么,以及里面存储了一些什么东西。

        spring容器,顾名思义就是一个存放东西的地方,java是面向对象的语言,所以,容器中存放的都是对象,但是在spring中,对象给起了一个名字,叫做bean,所以说,spring容器就是存放一个别名叫做bean的对象的地方。

        那容器是以什么结构存放bean(也就是对象,后面就不再提这个了)呢?

        可以看一下spring的源码是怎么存放的:

	private final Map singletonObjects = new ConcurrentHashMap<>(256);

        可以看出来spring的单例模式的bean被存放到了一个concurrentHashMap中,获取bean的时候都会从这个map中尝试获取。

        这个map中存放的key是String类型的,所以spring通过bean的名称来进行bean的寻找,Object中则存放着bean的各种信息,那么spring如何调用这些bean呢?

        java中存在反射机制,可以通过类名和方法名称就可以实现类的调用和方法的调用,这也就是spring要用到反射原理的原因,这也就是解释了为什么spring的容器又叫IOC容器:我们这需要把bean的名字给spring,spring来控制对象的生成,这也就是依赖反转(我们把对象的创建控制权交给了spring)的由来。

        spring容器的创建是通过调用refresh()方法来完成的,fresh方法中,通过多个方法的调用,来完成容器偶的创建。

        大体流程可以分为以下步骤:

        第一步:首先要做fresh前的准备工作prepareRefresh();

        第二步,获取beanFactory,这个是创建bean的工厂,由他来统一管理bean的创建,

  •                1、 obtainFreshBeanFactory();获取BeanFactory;
  •                2、 prepareBeanFactory(beanFactory);BeanFactory的预准备工作(BeanFactory进行一些设置)
  •                 3、postProcessBeanFactory(beanFactory);BeanFactory准备工作完成后进行的后置处理工作;
  •                 4、invokeBeanFactoryPostProcessors(beanFactory);执行BeanFactoryPostProcessor的方法;

                注:postprocessor是spring的后置处理器,他是增强spring中各种组件功能的。上面的几个postprocessor就是增强beanFactory功能的。

        第三步:开始对bean进行设置:

  •                1、 registerBeanPostProcessors(beanFactory);注册BeanPostProcessor(Bean的后置处理器)
  •                 2、initMessageSource();初始化MessageSource组件(做国际化功能;消息绑定,消息解析)
  •                 3、initApplicationEventMulticaster();初始化事件派发器
  •                 4、onRefresh();留给子容器(子类)子类重写这个方法,在容器刷新的时候可以自定义逻辑;
  •                 5、registerListeners();给容器中将所有项目里面的ApplicationListener注册进来;
  •                 6、finishBeanFactoryInitialization(beanFactory);初始化所有剩下的单实例bean; 这一步完成所有bean的创建!bean就是从这里开始创建的。

        第四步:finishRefresh();完成BeanFactory的初始化创建工作;IOC容器就创建完成;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/679053.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号