Spring 5 IOC 容器源码分析

IDEA出现闪退或打不开的解决方法 本身项目比较大,为了打开这个软件,可调节IDEA中安装的bin目录下有个。打开IDEA的时候过一会便闪退,可以再IDEA的右下角看到如下提示。(如果没有该提示,软件右下角也会有个红色感叹号,点开查看原因即可)闪退的多数原因大致是out of memory,内存溢出。查看任务管理器中的进程:(发现内存随时有溢出的情况)但也需要注意,该参数并不是越大越好,适中即可。只有个别原因是需要管理员权限就可执行!可以尽量减少软件的启动。 阅读详情

Spring 两大核心组件 IOC和Aop,如果有说错的地方请一定不吝指出,相互学习, 随便记录下自己的学习 Spring  源码学习历程 

本次采用的源码版本是 5.1.6.BUILD-SNAPSHOT

 源码构建请参考(https://blog.youkuaiyun.com/str0708/article/details/88539365)文章

1 Spring IoC 简洁

ApplicationContext接口代表Spring IoC容器,负责实例化,配置和组装bean,ApplicationContextSpring提供了几种接口实现。在独立应用程序中,通常会创建一个ClassPathXmlApplicationContext 或者FileSystemXmlApplicationContext,

ClassPathXmlApplicationContext和FileSystemXmlApplicationContext都是同时继承AbstractXmlApplicationContext。

先从ClassPathXmlApplicationContext作为Spring IOC 容器,从 ClassPathXmlApplication 分析容器创建的过程,首先来看一下ClassPathXmlApplicationContext的依赖关系:

我先创建一个新项目,好方便调试对应的 IOC源码

ApplicationContext 大概继承结构

下面我先用ClassPathXmlApplicationContext获取ApplicationContext实例
创建一个测试类 如下

package com.demo;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @author 疯信子
 * @version 1.0
 * @date 2019/3/14.
 */
public class ApplicationContextDemo {
	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationfile.xml");

		MessageService messageService = context.getBean("messageService", MessageService.class);
		System.out.println(messageService.getMessage());
	}
}

 

在spring-context中创建applicationfile.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xmlns:aop="http://www.springframework.org/schema/aop"
	   xmlns:context="http://www.springframework.org/schema/context"
	   xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd">



	<bean id="messageService" class="com.demo.MessageServiceImpl"/>
</beans>

以上就是最简单的获取bean的例子。

然后就可以具体调试代码。bean 的初始化

参考资料:

https://docs.spring.io/spring/docs/5.1.6.BUILD-SNAPSHOT/spring-framework-reference/core.html#spring-core 

https://javadoop.com/post/spring-ioc

SAP_MM&FI模块-质保金标准解决方案详解 主要讲述了SAP系统质保金的标准实现方案,包含业务背景、后台配置、前台业务操作记录,以及关键点的AI解释; 阅读详情

相关推荐

STC8H DMA 串口1全双工中断方式收发通讯C语言

串口1全双工中断方式收发通讯程序。 通过PC向MCU发送数据, MCU将收到的数据自动存入DMA空间. 当DMA空间存满设置大小的内容后,通过串口1的DMA自动发送功能把存储空间的数据原样返回. 用定时器做波特率发生器,建议使用1T模式(除非低波特率用12T),并选择可被波特率整除的时钟频率,以提高精度。

czhaii的专栏 1467

Spring IOC 容器源码分析——一篇文章读懂Spring5.x

Spring 设计的初衷 Spring 则立志于全方面的简化 Java 开发。对此,她主要采取了 4 个关键策略: 1、基于 POJO 的轻量级和最小侵入性编程; 2、通过依赖注入和面向接口松耦合; 3、基于切面和惯性进行声明式编程; 4、通过切面和模板减少样板式代码; 而他主要是通过:面向 Bean、依赖注入以及面向切面这三种方式来达成的。 Spring5 系统架构 ...

qq_42276876的博客 351

光栅衍射有入射角时_衍射型多焦点人工晶体光学原理

多焦点人工晶体如何把光线分成多个焦点的?这个问题大部分专业书只是蜻蜓点水,并没有讲明白。希此文粗浅的解释,能帮您加深理解,请多指正。接下来,我将按照一下历史发展的顺序讲解一下:光的认识、菲涅尔灯塔(菲涅尔透镜)、菲涅尔波带盘(半波带盘)、多焦点人工晶体。一:首先复习一下光的认识历史。我们现在都知道光是一种电磁波,具有波粒二相性,但是认识光的本质也经历非常曲折漫长的过程。牛顿时代的几何光...

weixin_28963467的博客 2352

Spring5源码分析系列(四)IOC容器

本章开始进入Spring5源码分析,文章有点长,参考自Tom老师视频。 什么是IOC/DI? IOC(InversionofControl)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。 DI(Dependenc...

一个浪子 1955

一个固定翼飞机仿真程序带你系统性上手如何实现配平(工具箱+脚本)

老规矩,该博客所用的模型和脚本已上传至百度网盘,名字为“固定翼配平训练例子”,自己自取。

zouxu634866的博客 2573

coreldraw sp2精简版 x4_CorelDRAW X4下载-CorelDRAW X4 SP2 精简版_Win10镜像官网

CorelDRAW X4 SP2是一个专业图形设计软件,专用于矢量图形编辑与排版,借助其丰富的内容和专业图形设计、照片编辑和网站设计软件,您将能够随心所欲地表达自己的风格与创意,轻松创作徽标标志、广告标牌、车身贴和传单、模型绘制、插图描画、排版及分色输出等。CorelDRAW X4 SP2软件特色CorelDraw X4 相比两年前的 CorelDraw X3 加入了大量新特性,总计有50项以上,...

weixin_30346025的博客 8909

Spring5源码分析(二) IOC 容器的初始化(五)

  此篇文章为Spring5源码分析——IOC容器的初始化的最后一篇,这一篇主要是对IOC容器的初始化进行总结。 一,IOC 容器的初始化总结 通过上面的几篇文章我们完成了对FileSystemXmlApplicationContext IOC容器创建的分析,接下来总结一下IOC容器初始化的基本步骤。 1. 初始化的入口在容器实现中的 refresh()调用来完成。 2. 对 bea...

mokingone的专栏 853

Android功耗系列专题理论之二十一:Power Monitor测功耗详细说明和注意事项

本文详细介绍了PowerMonitor手机功耗测试仪的功能与使用方法。该设备通过硬件连接替代手机电池,实时监测电流、电压等参数,适用于研发测试、软件优化等场景。文章包含设备接线说明(电源、USB、手机供电等接口)、驱动安装步骤及常见问题排查,并详细讲解了功耗测量操作流程,包括电压设置、开机步骤、数据采集与导出方法。特别强调了测量注意事项,如固定屏幕亮度、关闭后台应用、确保稳定连接等,以确保测试数据准确性。最后提供了简易测量步骤和详细测量流程指导。

602

spring5源码分析系列(三)——IOC容器的初始化(一)

前言: IOC容器的初始化包括BeanDefinition的Resource定位、载入、注册三个基本过程。 本文以ApplicationContext为例讲解,XmlWebApplicationContext、ClasspathXmlApplicationContext等都属于这个继承体系,这些都是我们日常开发中很熟悉的。其继承体系如下图: ApplicationContext允许上下文嵌套,通...

yaofengdoit的博客 281

仅使用 Python 创建的 Web 应用程序(前端版本)第03章Streamlit-多页面

接下来,我们将解释多页面切换。Streamlit 没有“多页面”或“页面路由”等功能。另一方面,通过根据用户动作切换要执行的功能,可以使其看起来好像存在“多个页面”。注意:我认为它类似于 SinglePageApplication (SPA)。然而,根据 React、Vue 等中使用的 URL 路径来更改页面的路由很困难。还有一个用于获取查询参数的实验性 API,但如果您确实需要这种功能,我认为认真尝试编写 React 或 Vue 是个好主意。我们来看一个通过按下按钮来切换页面的示例,如下所示。

xianyinsuifeng的博客 1330

VS code 调试显示preLaunchTask“g++“已终止,退出代码为-1。 生成‘... .exe‘文件错误

总结: 以后每个工程都需要按照这样的流程:创建一个.c/.cpp文件 -> F5运行 -> 配置tasks.json文件-> launch.json文件 -> 运行

qq_45151652的博客 2516

Spring5源码分析(一) IOC和Spring 核心容器体系结构

1.什么是 IOC/DI?   IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建、依赖的代码,反转给容器来帮忙实现。那么必然的我们需要创建一个容器,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们可配置的文件。   DI(Dependency Injection)依赖注入:就是指对象是被动接受依...

mokingone的专栏 9668

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

spring5源码分析系列(四)——IOC容器的初始化(二)

前言:上一篇讲到了Xml Bean读取器(XmlBeanDefinitionReader)调用其父类AbstractBeanDefinitionReader的reader.loadBeanDefinitions方法读取Bean定义资源,此篇我们继续后面的内容。 (5)AbstractBeanDefinitionReader的loadBeanDefinitions方法 方法源码如下: //重载方法,...

yaofengdoit的博客 170

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring5源码分析(二) IOC 容器的初始化(二)

  承接上一篇文章继续分析FileSystemXmlApplicationContextIOC容器创建的流程。 2.5 AbstractBeanDefinitionReader读取Bean定义资源,在其抽象父类AbstractBeanDefinitionReader 中定义了载入过程。 AbstractBeanDefinitionReader 的 loadBeanDefinitions ...

mokingone的专栏 800

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring5源码分析(二) IOC 容器的初始化(一)

一,概述   IOC 容器的初始化包括 BeanDefinition 的 Resource 定位、载入和注册这三个基本的过程。我们以 ApplicationContext 为例讲解来深入讲解,ApplicationContext系列容器也许是我们最熟悉的,因为 Web项目中使用的XmlWebApplicationContext就属于这个继承体系,还有 ClasspathXmlApplicati...

mokingone的专栏 2070

spring5源码分析系列(五)——IOC容器的初始化(三)

前言:上一篇讲到了DocumentLoader将Bean定义资源转换为Document对象,此篇我们继续后面的内容。 (9)XmlBeanDefinitionReader解析载入的Bean定义资源文件 XmlBeanDefinitionReader类中的doLoadBeanDefinitions方法是从特定XML文件中实际载入Bean定义资源的方法,该方法在载入Bean定义资源之后将其转换为Doc...

yaofengdoit的博客 200

spring5源码分析系列(六)——IOC容器的初始化(四)

前言:上一篇讲到了解析子元素,此篇我们继续后面的内容。 (15)解析过后的BeanDefinition在IOC容器中的注册 接下来分析DefaultBeanDefinitionDocumentReader对Bean定义转换的Document对象解析的流程中,在其parseDefaultElement方法中完成对Document对象的解析后得到封装BeanDefinition的BeanDefinit...

yaofengdoit的博客 175

Spring5源码分析系列(七)IOC容器中那些鲜为人知的事儿

1、介绍 通过前面章节中对SpringIOC容器的源码分析,我们已经基本上了解了SpringIOC容器对Bean定义资源的定位、读入和解析过程,同时也清楚了当用户通过getBean方法向IOC容器获取被管理的Bean时,IOC容器对Bean进行的初始化和依赖注入过程,这些是SpringIOC容器的基本功能特性。SpringIOC容器还有一些高级特性,如使用lazy-init属性对Bean预初始化...

一个浪子 548

Spring5源码分析(二) IOC 容器的初始化(四)

  承接上一篇文章继续分析FileSystemXmlApplicationContext IOC容器创建的流程。 2.12 BeanDefinitionParserDelegate 解析元素 BeanDefinitionParserDelegate 在解析调用 parsePropertyElements 方法解析元素中的属性子元素,解析源码如下: //解析&amp;lt;Bean&amp;gt;元素...

mokingone的专栏 782

Spring5源码分析(二) IOC 容器的初始化(三)

  承接上一篇文章继续分析FileSystemXmlApplicationContextIOC容器创建的流程。 2.10 DefaultBeanDefinitionDocumentReader对Bean定义的Document对象解析 BeanDefinitionDocumentReader 接 口 通 过 registerBeanDefinitions 方 法调用其实现类DefaultBe...

mokingone的专栏 680
上一篇: IDEA 2018导入Spring5.0 源码分析
下一篇: Java 12 正式发布了!
疯信子To
博客等级 码龄14年 12粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值