广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Spring IOC容器启动示例分析
  • 869
分享到

Spring IOC容器启动示例分析

Spring IOC容器启动流程Spring IOC容器 2023-02-14 12:02:26 869人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、简介二、ioc整体流程一、简介 spring核心有两个: ioC:控制反转aop:面向切面编程 相信大家在项目中都使用过Spring进行开发,都知道Spring非常强大,那么

一、简介

spring核心有两个:

相信大家在项目中都使用过Spring进行开发,都知道Spring非常强大,那么在熟练掌握Spring进行开发后,我们有必要去了解一下其中的原理,Spring工作原理也是面试中必问的一个环节,先来看看几道常见的面试题,想想看,如果被面试官问到,你会怎么答?

  • Spring IOC的工作原理?
  • Spring Bean的生命周期是怎样的?
  • Spring 中使用到了哪些设计模式
  • Spring是如何解决循环依赖的?
  • BeanFactory和FactoryBean的区别是什么?
  • ....

显然,我们需要从源码中获取我们想要的答案,本篇文章我们先来分析一下Spring中IOC容器整个初始化过程,本篇文章暂且先不详细分析源码实现,先把整个流程理清,后面再针对其中一些重要的环节逐个分析源码是如何实现的,这样可能没那么懵,不然一进来就直接一个一个细节去抠,可能跟着跟着不知道从哪个方法进来的了。

二、IOC整体流程

Spring IOC的核心工厂类其实就是BeanFactory,从名字上也很好理解,生产 bean 的工厂,它负责生产和管理各个 bean 实例。在项目中我们更多的是使用它的子类或者实现类,像常见的AbstractApplicationContext、ApplicationContext、DefaultListableBeanFactory、ClassPathXmlApplicationContext、AnnotationConfigApplicationContext等等。

我们先来回顾一下最基本的启动 Spring 容器的例子:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-config.xml");
System.out.println(applicationContext.getBean("student"));

如上代码就可以利用XML配置文件来启动一个 Spring 容器。

public ClassPathXmlApplicationContext(
			String[] configLocations, boolean refresh, @Nullable ApplicationContext parent)
			throws BeansException {
		super(parent);
		// 1、设置配置文件的路径
		setConfigLocations(configLocations);
		if (refresh) {
			//2、容器刷新方法:IOC核心方法就是refresh()
			refresh();
		}
	}

在ClassPathXmlApplicationContext的构造方法中,我们可以看到有一个refresh()方法,它是整个IOC容器的核心。

refresh()主要做了下述12件事情,先说个大概:

1、prepareRefresh()

容器刷新前的一些预处理工作。

2、obtainFreshBeanFactory()

创建DefaultListableBeanFactory工厂,给bean工厂设置一些属性,加载配置文件信息,封装成bean定义信息。

3、prepareBeanFactory(beanFactory)

同样,设置bean工厂的一些属性,如添加一些BeanPostProcessor增强器等。

4、postProcessBeanFactory(beanFactory)

模板方法,留给子类扩展实现。

5、invokeBeanFactoryPostProcessors(beanFactory)

执行BeanFactoryPostProcessor的postProcessBeanFactory ()增强方法。

6、reGISterBeanPostProcessors(beanFactory)

注册BeanPostProcessor增强器,注意这里只是注册,真正是在初始化阶段的前后执行。

7、initMessageSource()

初始化MessageSource,国际化处理。

8、initApplicationEventMulticaster()

初始化事件多播器。

9、onRefresh()

模板方法,留给子类扩展实现。

10、registerListeners()

注册一些监听器。

11、finishBeanFactoryInitialization(beanFactory)

IOC容器创建最重要的一个步骤:完成非懒加载的单例bean对象的实例化,包括反射创建bean对象、属性填充、循环依赖的处理、bean的初始化等等。

12、finishRefresh()

容器刷新完成之后的一些处理工作。

前面我们通过文字描述了refresh()方法主要的处理流程,下面通过两张图来说明,会更加形象,好理解一点:

这里可能稍微就涉及到一些细节了,有些许复杂,大家可以先过几遍,有个印象后自己再去看源码,相信会更加清晰里面的处理逻辑。

到此这篇关于Spring IOC容器启动示例分析的文章就介绍到这了,更多相关Spring IOC容器启动内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Spring IOC容器启动示例分析

本文链接: https://www.lsjlt.com/news/196004.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Spring IOC容器启动示例分析
    目录一、简介二、IOC整体流程一、简介 Spring核心有两个: IOC:控制反转AOP:面向切面编程 相信大家在项目中都使用过Spring进行开发,都知道Spring非常强大,那么...
    99+
    2023-02-14
    Spring IOC容器启动流程 Spring IOC容器
  • Spring中IOC容器的示例分析
    这篇文章将为大家详细讲解有关Spring中IOC容器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一.Spring的IOC容器概述Spring的IOC的过程也被称为依赖注入(DI),那么对象可以...
    99+
    2023-06-03
  • Spring对IOC的示例分析
    这篇文章将为大家详细讲解有关Spring对IOC的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、IOC控制反转和DI依赖注入控制反转,字面可以理解为:主动权的转移,原来一个应用程序内的对象是类...
    99+
    2023-05-30
    spring ioc
  • spring中IoC和DI的示例分析
    这篇文章主要介绍spring中IoC和DI的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!这里先来简单介绍下IoC和DI的区别:IOC:翻译过来是控制反转,将对象的创建权由Spring管理,HelloServ...
    99+
    2023-05-30
    spring ioc di
  • Spring中IOC和AOP的示例分析
    小编给大家分享一下Spring中IOC和AOP的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Spring是一个开源框架,主要实现两件事,IOC(控制反转...
    99+
    2023-05-30
    spring ioc aop
  • Spring源码分析容器启动流程
    目录前言源码解析1、初始化流程流程分析核心代码剖析2、刷新流程流程分析核心代码剖析前言 本文基于 Spring 的 5.1.6.RELEASE 版本 Spring的启动流程可以归纳为...
    99+
    2022-11-13
  • Mysql容器启动失败恢复的示例分析
    这篇文章主要介绍了Mysql容器启动失败恢复的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 Mysql...
    99+
    2022-10-18
  • Spring Boot启动事件和监听器的示例分析
    这篇文章将为大家详细讲解有关Spring Boot启动事件和监听器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Spring Boot 启动事件顺序1、ApplicationStartingEv...
    99+
    2023-06-17
  • Spring Boot应用启动与关闭的示例分析
    这篇文章主要介绍Spring Boot应用启动与关闭的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Boot,作为Spring框架对“约定优先于配置(Convention Over Config...
    99+
    2023-05-30
    spring boot
  • Spring Java-based容器配置的示例分析
    这篇文章主要介绍了Spring Java-based容器配置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。装Java-based的配置使用 @Import 注解跟在...
    99+
    2023-05-31
    spring java
  • Linux中启动与自启动的示例分析
    这篇文章将为大家详细讲解有关Linux中启动与自启动的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux启动与自启动的实例详解一 启动与自启动服务启动:就是在当前系统中让服务运行,并提供功能...
    99+
    2023-06-09
  • Spring事务开启原理的示例分析
    这篇文章给大家分享的是有关Spring事务开启原理的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在事务配置类上声明@EnableTransactionManagement注解开启事务在事务配置类上定义数...
    99+
    2023-06-14
  • Linux启动脚本的示例分析
    这篇文章主要介绍Linux启动脚本的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!redhat的启动方式和执行次序是:加载内核执行init程序/etc/rc.d/rc.sysinit # 由init执行的**...
    99+
    2023-06-17
  • Linux启动过程的示例分析
    这篇文章主要为大家展示了“Linux启动过程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux启动过程的示例分析”这篇文章吧。Linux启动过程详细介绍启动第一步--加载BIOS...
    99+
    2023-06-09
  • linux启动流程的示例分析
    这篇文章将为大家详细讲解有关linux启动流程的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。linux启动流程简介我们都知道,由于linux的稳定性,通常被作为服务器系统,要想称为一个PHP的高...
    99+
    2023-06-09
  • Spring Boot jar启动时设置环境参数的示例分析
    这篇文章主要介绍Spring Boot jar启动时设置环境参数的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Spring Boot jar 启动时设置环境参数1 摘要通常在使用 Spring Boot 开...
    99+
    2023-06-15
  • Linux容器的示例分析
    这篇文章将为大家详细讲解有关Linux容器的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。我告诉你一个秘密:使得我的应用程序进入到全世界的 DevOps 云计算之类的东西对我来说仍然有一点神秘。但...
    99+
    2023-06-16
  • Angularjs中启动过程的示例分析
    这篇文章主要介绍Angularjs中启动过程的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!启动过程(v1.3.9)步骤一用自执行函数的形式让整个代码在加载完成之后立即执行i...
    99+
    2022-10-19
  • U盘启动proxmox ve的示例分析
    U盘启动proxmox ve的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Proxmox虚拟环境是基于QEMU / KVM和LXC的开源服务器虚拟化管理解决方案。...
    99+
    2023-06-05
  • Spring Boot定制与优化内置Tomcat容器的示例分析
    这篇文章给大家分享的是有关Spring Boot定制与优化内置Tomcat容器的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、Spring Boot 定制与优化内置Tomcat容器。> 内置的容...
    99+
    2023-05-30
    springboot tomcat
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作