深入理解Spring框架-启动Bean加载过程

Spring中Bean的生命周期源码分析 从服务的启动到服务的关闭整个流程下来梳理了Bean的整个生命周期,根据这个生命周期自己可以根据这个流程对Spring中容器的实现和Bean的注入流程有了更深的了解,更多细节的部分可以根据一下的源码流程进行debug,毕竟debug看源码是最快的,debug的方式可以知道在每一步入参和出参的结果,以及每一步的正向流程。 阅读详情
  1. spring web应用启动过程核心流程:

(1)web 容器启动时,首先加载web.xml 文件,并逐一解析web.xml文件内容配置,优先解析的是内容上下文加载监听器配置:org.springframework.web.context.ContextLoaderListener, 该配置主要工作是:基于contextClass以及servlet的上下文参数中context-param指定的spring配置文件去创建一个web 应用上下文—初始化root application context 以及通过指定应用上下文的配置文件进行初始化加载。

(2)调用ContextLoaderListener:: contextInitialized 方法对根应用上下文进行初始化. contextInitialized 方法中调用了一个ContextLoaderListener父类ContextLoader上下文加载器方法:initWebApplicationContext(ServletContext);

(3) ContextLoader::initWebApplicationContext(ServletContext) 的职责工作:创建一个可配置的web应用上下文(将上下文存储在本地实例变量中,以确保它在servletcontext关闭时可用),并设置其父上下文,然后调用ContextLoader::configureAndRefreshWebApplicationContext;

(4) ContextLoader::configureAndRefreshWebApplicationContext() 主要工作:首先获取到spring上下文配置文件路径-configLocationParam=classpath:spring/spring-config.xml(在web.xml > listener >context-param 指定),设置自定义的上下文初始化器(ApplicationContextInitializer),并进行初始化;然后调用ConfigurableWebApplicationContext的核心方法:refresh();

spring 启动过程核心流程

  1. 上下文刷新refresh工作流程如下

     	代码流程:{
     		prepareRefresh();
     		
     		ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();
     		
     		prepareBeanFactory(beanFactory);
     		
     		postProcessBeanFactory(beanFactory);
    
     		invokeBeanFactoryPostProcessors(beanFactory);
     		
     		registerBeanPostProcessors(beanFactory);
    
     		initMessageSource();
    
     		initApplicationEventMulticaster();
     		
     		onRefresh();
    
     		registerListeners();
    
     		finishBeanFactoryInitialization(beanFactory);
     		
     		finishRefresh();
     	}
    

    step1:prepareRefresh 上下文刷新前准备工作:设置ConfigurableWebApplicationContext上下文实例对象wac的启动日期和活动标志、加载属性源配置以及判断必填项是否都完整。

    step2: obtainFreshBeanFactory 通知子类刷新内部bean工厂工作:创建BeanFactory,如果已有就销毁,没有就创建;核心工作就是解析XML 以及扫描注解 将扫描到的Bean配置属性封装到BeanDefinition 对象中,并对它beanName(key) , BeanDefinition(v) 保存到一个Map 中。

    step3:prepareBeanFactory 对bean factory进行一些上下文标准化配置:设置factory的类加载器、bean 表达式解释器、资源编辑注册器、应用上下文自动注入后处理器、配置在自动装配(通过beans标签default-autowire属性来依赖注入)的时候的需要忽略的类(如ApplicationContextAwareProcessor、EnvironmentAware、ResourceLoaderAware、 EmbeddedValueResolverAware、ApplicationEventPublisherAware、MessageSourceAware、ApplicationContextAware)、注册可以自动装配的 Bean(如BeanFactory)以及注册默认系统变量配置等。

     [自动装配与@Autowired 的区别:自动装配指通过beans标签default-autowire属性来依赖注入的方式,
     而不是指使用@Autowired注解进行的依赖注入。区别在于,使用default-autowire会自动给所有的类
     都会从容器中查找匹配的依赖并注入,而使用@Autowired注解只会给这些注解的对象从容器查找依赖并注入]
    

    step4: postProcessBeanFactory 修改BeanFactory的后处理器配置:在标准初始化之后修改应用程序上下文的内部bean工厂初始化配置,允许注册特殊BeanPostProcessors->即ServletContextAwareProcessor 后处理器以及设置自动装配忽略接口类(ServletContextAware、ServletConfigAware)以及注册应用上下文的request/session 范围。 这一阶段所有bean定义都已加载,但没有bean将被实例化。

    step5:invokeBeanFactoryPostProcessors 工作:通过显示顺序方式调用手动注册的BeanFactory后处理器,先实例化spring框架涉及到的后处理器,在调用。

    (1)先执行 BeanDefinitionRegistryPostProcessor 的方法
    (2)对配置/组件类中声明的嵌套@component类或configuration类者进行自动注册成bean定义,并对这些候选bean定义按照优先级进行排序。
    (3)执行beanFactoryPostProcessors,对配置文件bean进行扫描实例化:如propertyConfigurer。

    step6:registerBeanPostProcessors 注册拦截bean创建的bean处理器-实例化:
    (1):通过beanFactory.getBeanNamesForType(BeanPostProcessor.class, true, false);方法获取beanFactory里继承了BeanPostProcessor接口的name的集合;
    (2):把后置器beans分为PriorityOrdered、Ordered、nonOrdered三大类,前两类是增加了排序条件的后置器;
    (3):前两类后置器执行sortPostProcessors和registerBeanPostProcessors方法,也就是先执行排序方法,后执行注册方法。
    (4):最后一步用到了上面提到的BeanPostProcessor和BeanFactoryPostProcessor的入参不同的AbstractApplicationContext,在addBeanPostProcessor方法里把BeanPostProcessor注册进了AbstractBeanFactory,这也就是为什么BeanFactoryPostProcessor执行了后置接口实现类,而BeanPostProcessor仅仅执行了注册和实例化,而没有执行的原因。

    step7:initMessageSource 初始化消息源:MessageSource接口类用于支持信息的国际化和包含参数的信息的替换。
    ApplicationContext接口继承了MessageSource接口,应用可通过ApplicationContext来调用MessageSource接口方法以实现信息的国际化和替换信息中包含的参数。所有对MessageSource接口的实现都是在AbstractApplicationContext中实现。

    step8: initApplicationEventMulticaster 初始化事件广播器:如果上下文中没有定义则使用默认广播器:SimpleApplicationEventMulticaster。

    step9: onRefresh 初始化其他特定的bean,由具体子类实现。

    step10:registerListeners 注册监听事件:在容器中将所有项目里面的ApplicationListener注册进来,大体过程如下:获取所有的事件,并添加到事件派发器中 -> 监听事件进行派发广播。

     for (String listenerBeanName : listenerBeanNames) {
     		getApplicationEventMulticaster().addApplicationListenerBean(listenerBeanName);
     	}
     	...
     getApplicationEventMulticaster().multicastEvent(earlyEvent)
    

    step11: finishBeanFactoryInitialization 初始化所有剩下的单实例 Bean(没有配置赖加载的 lazy!=true)。大体过程如下:

     -> 获取bean的定义信息
     -> 判断bean 是否是抽象的、是单例的、非懒加载的
     -> 是否为 FactoryBean ,是则调用 FactoryBean 的创建方法,否则执行 getBean() 方法
     -> 调用 getBean() 方法 
     -> getBean方法内部再调用 doGetBean() 方法
    

    step12:finishRefresh 完成BeanFactory的初始化创建工作:

     	// 初始化生命周期处理器组件
     	initLifecycleProcessor();
    
     	// 首先将刷新状态传播到生命周期组件中.
     	getLifecycleProcessor().onRefresh();
    
     	// 发布上下文已刷新完毕的事件.
     	publishEvent(new ContextRefreshedEvent(this));
    
     	// Participate in LiveBeansView MBean, if active:
     	LiveBeansView活动beans的查看适配器,构建当前bean的快照 和来自本地{@code ApplicationContext}的依赖关系(带有本地{@code LiveBeansView} bean定义)或所有已注册的ApplicationContexts由{@value #MBEAN_DOMAIN_PROPERTY_NAME}环境属性驱动)
     	LiveBeansView.registerApplicationContext(this);
    
  2. obtainFreshBeanFactory 工作流程
    主要工作解析web项目配置(在web.xml > listener >context-param 指定)的应用application.xml文件的import、bean、resource、profile…等配置项的进行逐一解析。核心工作就是解析XML 或扫描注解,将其属性封装到BeanDefinition 对象中,并对它beanName(key) 、BeanDefinition(v) 保存到一个Map 中,为后面spring加载依赖注入提供了对应的元数据(bean 定义)。

    在obtainFreshBeanFactory方法内部调用了refreshBeanFactory方法,此方法是执行应用上下文的基础bean工厂的实际刷新,首先,若存在一个bean工厂,进行关闭,其次创建一个新bean工厂。

    3.1 refreshBeanFactory 工作流程如下:

    createBeanFactory()
    ->customizeBeanFactory() : 设置BeanFactory定制化信息:允许bean定义重载(allowBeanDefinitionOverriding)、允许循环引用(allowCircularReferences)

    ->loadBeanDefinitions(beanFactory) : 默认执行XmlWebApplicationContext的bean配置加载

    -> loadBeanDefinitions(XmlBeanDefinitionReader render): 遍历所有配置文件

    -> reader.loadBeanDefinitions(“classpath:spring/spring-config.xml”)

    1.getResourceLoader() :获取资源加载器
    2. List< Resource> resources = resourceLoader.getResources(location):通过资源加载器加载资源-支持正则匹配查找资源

    ->loadBeanDefinitions(Resource resource): 遍历所有资源resource

    ->loadBeanDefinitions(EncodedResource resource): Resource 转换成EncodedResource

    -> encodedResource.getResource().getInputStream() :读取文件流

    -> doLoadBeanDefinitions(inputSource)
    -> Document doc = loadDocument(inputSource) :根据xml schema解析成xml文档对象
    -> registerBeanDefinitions(doc)
    -> doRegisterBeanDefinitions(Element root): 核心逻辑 解析xml文档并注册bean定义

3.2 doRegisterBeanDefinitions方法处理过程

    (1) preProcessXml(root);  // xml解析前处理方法:空处理,spring 框架提供子类扩展点
	(2) parseBeanDefinitions(root, this.delegate); // 主要解析步骤,遍历解析root节点子节点
	(3) postProcessXml(root) ;// xml解析后处理方法:空处理,spring 框架提供子类扩展点

parseBeanDefinitions 解析项分为两大类:一是spring默认配置项:import、alias、bean、beans 配置项,二是定制化的配置项:如component-scan、annotation-config、property-placeholder、mbean-export等。

 (1). 解析< bean id="" classs="" />将element属性赋值到对应的AbstractBeanDefinition 定义的对象中
 (2). 将AbstractBeanDefinition继续赋值给一个BeanDefinitionHolder(包含aliases、beanName、
 	  beanDefinition)获取BeanDefinitionHolder对象的beanName和beanDefinition 将其注册到
 	  BeanDefinitionRegistry 对象中(以beanName为key和beanDefinition为值value 保存到Map<String, 
 	  BeanDefinition> 中。)
 (2). 遇到import配置项,依照上述步骤进行解析

4. doGetBean方法实例化过程
在这里插入图片描述
4.1 doGetBean方法处理过程

(1)获取bean所对应clazz的构造函数
(2)构造函数先执行静态字段的初始化,然后按照属性字段声明顺序执行初始化
(3)调用各个MergedBeanDefinitionPostProcessor后处理器的postProcessMergedBeanDefinition
    进行信息合并处理。
(4)在容器中为bean 添加一个单指定的单例工厂
(5)调用各个InstantiationAwareBeanPostProcessor后处理器的postProcessAfterInstantiation
(6)调用autowireByName方法处理通过autowire设置为byName的属性字段: xml 中bean的autowire指定
(7)调用autowireByType方法处理通过autowire设置为byType的属性字段 :xml 中bean的autowire指定
(8)若有实例化感知后处理器InstantiationAwareBeanPostProcessor,则调用postProcessPropertyValues
		进行处理:更新beanFactory的设置
(9)若有bean属性值依赖检查,则进行检查:依赖性检查属性可以是协作对象bean,简单类型或全部
(10)调用applyPropertyValues方法对MutablePropertyValues可变属性-复杂对象进行设值,涉及到属性值
	依赖注入,主要是xml中的bean配置, 例如PropertyPlaceholderConfigurer::propertyConfigurer配置,
	 <bean id="propertyConfigurer" 
	 		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
   		 <property name="ignoreUnresolvablePlaceholders" value="true"/>
    	<property name="properties" ref="propertiesFactoryBean"/>
     </bean>
     
     <bean id="propertiesFactoryBean" 
      class="org.springframework.beans.factory.config.PropertiesFactoryBean">
    		<property name="ignoreResourceNotFound" value="true"/>
   			<property name="locations">
      		  <list>
            	<value>classpath*:production.properties</value>
       	     </list>
    	   </property>
    </bean>
	在这一阶段会解析property配置文件。
(11)调用bean初始化之前的后处理器的postProcessBeforeInitialization方法对初始化(@postContruct、@preDestroy标注方法)方法进行处理调用
(12)调用初始化方法afterPropertiesSet():bean是实现了InitializingBean
(13)调用bean初始化之后的后处理器,一般是没有操作,直接返回。

由上面bean实例化过程可以看出:

   Constructor > @PostConstruct > InitializingBean > init-method
   
 (1)如果bean有依赖bean, 则先对依赖bean进行实例化
 (2)初始化方法(如果实现了InitializingBean接口类)在bean属性字段依赖注入完成后执行
 (3)autowireByName 先于autowireByType执行
 (4)若bean存在初始化字段如field=new xxx() 时,调用bean构造方法后进行初始化赋值,
     然后对注解的属性进行依赖注入和注解的方法的执行

以上就是整个spring 的启动Bean加载过程,以上如有误,请指正!

Spring Bean的生命周期(生命周期阶段和扩展点分开) Spring 有一些常用扩展点,了解Spring Bean的生命周期,能够对spring宏观有一定的认识,这里尝试答一下。 Spring Bean的生命周期分为四个阶段。这里将spring Bean的四个阶段添加部分常用扩展点便于理解。 一、spring bean 四个阶段 1、实例化 instantiation(createBeanInstance) 2、属性赋值 Populate (popu... 阅读详情

相关推荐

《Spring》第九篇 XML配置文件的解析过程

1. 当启动ClassPathXmlApplicationContext容器时, 为指定的BeanFactory创建一个XmlBeanDefinitionReader阅读器。 源码: AbstractXmlApplicationContext.loadBeanDefinitions() /** * Loads the bean definitions via an XmlBeanDefinitionReader. * * @see org.springframework.beans.factor

入坑太深起不来 651

Spring的Bean加载流程

Spring IOC容器就像是一个生产产品的流水线上的机器,Spring创建出来的Bean就好像是流水线的终点生产出来的一个个精美绝伦的产品。既然是机器,总要先启动,Spring也不例外。因此Bean的加载流程总体上来说可以分为两个阶段: 容器启动阶段 Bean创建阶段 一、容器启动阶段: 容器的启动阶段做了很多的预热工作,为后面Bean的实例化做好了充分的准备,我们首先看一下容器的启动阶段都做了哪些预热工作。 1、配置元信息: Spring IOC容器将对象实例的创建与对象实例的使用分离,当业务

张维鹏的博客 7万+

Verilog仿真必备:FSDB dump命令全解析与实战配置指南

本文深入解析了Verilog仿真中FSDB波形记录的核心命令与实战配置技巧。针对大规模SoC验证场景,详细介绍了如何通过$fsdbDumpvars、$fsdbDumpfile等命令实现信号精准捕获、文件体积控制和动态启停,并提供了智能化的分层dump策略,帮助工程师在保证调试信息完整性的同时,大幅提升验证效率并有效管理波形数据。

cnn8visionary的博客 346

spring Bean加载流程

一、读取注解 先通过扫描指定路径下的spring注解或者XML配置,然后将其解析并封装到BeanDefintaion这个接口的实现类中。 二、bean生命周期 2.1 实例化 AbstractAutoWireCapableBeanFactory.doCreateBean中会调用createBeaninstance()方法,该阶段主要是从beanDefinitionMap循环读取bean,获取他的属性,然后利用反射读取对象的构造方法,进行实例化对象,此时是一个空对象在JVM堆中所有属性并未赋值。 2.2 初始

宋忠瑾的博客 2707

微信小程序音视频通话(for硬件)授权与设备注册实战指南

本文详细介绍了微信小程序音视频通话(for硬件)组件的开发实践,涵盖授权流程、设备注册与VoIP插件集成。重点解析了如何通过服务端获取snTicket实现用户授权,确保硬件设备与微信端的音视频通话安全可靠,适用于智能门禁、话机等物联网场景。

u6v7w8x的博客 945

Superpowers:可编程AI协作协议与Skill工程化实践

AI编程正从提示词驱动迈向工程化协作新范式。Superpowers并非传统代码补全工具,而是一套定义清晰、可版本控制、可调试复用的AI协作协议——它将AI能力抽象为带输入校验、执行管道、输出契约和元数据声明的Skill(类DSL构件),再通过状态驱动的Workflow编排实现跨平台、可熔断、含人工Checkpoint的自动化流水线。其核心价值在于解决AI生成代码长期存在的不可复现、不可审计、不可交接三大痛点,支撑OpenAPI转TS、Figma转Vue等高复用场景落地。本文深入解析Skill设计四重契约与P

weixin_31124163的博客 375

深入理解 Spring 中的 Bean 加载过程

目录一、准备工作二、配置Bean三、读取配置文件四、Spring容器初始化4.1 获取beanFactory4.1.1 刷新BeanFactory4.1.2 加载BeanDefinitions4.1.3 注册BeanDefinitions4.1.4 解析BeanDefinitions4.2 BeanFactory预准备工作4.3 实例化并调用BeanFactoryPostProcessors4.3.1 完成beanFactory 的初始化,初始化所有剩余的单例 bean。4.3.2 实例化Bean4.3.

一颗奋起萌发的种子的博客 2090

用 SAP HANA SDA 访问 PostgreSQL:从可行性到落地实践的完整指引

摘要:SAP HANA可通过SDA/SDI技术访问PostgreSQL数据库,支持数据虚拟化和实时复制。主要实现路径包括:1)使用Camel JDBC适配器创建虚拟表进行联邦查询;2)利用PostgreSQL Log Reader适配器实现变更数据捕获(CDC)。实施时需配置Data Provisioning Agent,注意权限和网络要求。官方文档指出,通过SDI+DP Agent的方式比直接SDA连接更稳定可靠。虚拟化查询时,HANA会自动将SQL下推到PostgreSQL执行,优化性能。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 253

Spring的@Bean加载顺序

Spring的@Bean加载顺序Spring的@Bean加载顺序@Bean是怎么加载的那么问题就来了,(引用上面的问题)当一个@Bean加载时,引用的另一个@Bean还未加载,这是Spring会在执行到引用这一步时,优先去加载被引用的@Bean(重点:是Spring读取到引用的那一行代码时,去加载被引用的@Bean,“我就不具体写代码演示了,原因还是懒”)==友情提示:遇到不懂得问题,不要第一时间...

a731531230的博客 1476

YOLO26改进 - C2PSA | C2PSA融合CPIASA跨范式交互与对齐自注意力机制 : 交互对齐机制,提升小目标与遮挡目标判别力 | ACM MM2025

本文介绍了跨范式表征与对齐Transformer(CPRAformer)及其核心的跨范式交互与对齐自注意力机制(CPIA - SA),并阐述了其在YOLO26中的结合应用。传统图像去雨模型特征提取局限大,CPIA - SA通过协同“空间 - 通道”与“全局 - 局部”范式解决该问题,由SPC - SA、SPR - SA和AAFM子模块构成,经双路提取、动态过滤、空间细化、对齐融合四步工作。我们将相关代码引入指定目录,在`ultralytics/nn/tasks.py`中注册,配置`yolo26 - C2PS

魔改工程师的博客 663

cartographer如何使用2个反光柱子作为一个landmark

2个反光柱的摆放要求:靠着墙摆,因为我们只能从一侧看到2个反光柱,从两侧都看到至少需要3个反光柱来定位。 landmark检测原理:因为我们是从一侧看到2个反光柱,所以看到2个反光柱在一帧激光数据中会有顺序,有2种情形,如下图 这两种情形,我们发现 情形1: 这种情形2个反光柱子被检测到的激光角度小于180,我们认为大一些激光角度的是原点。 情形2: 这种情形2个反光柱子被检测到的激光角度大于180,我们认为小一些激光角度的是原点。 这样原点就固定下来,并是唯一的。2个反光柱构成的坐标系也就确定了。和激光坐

南北粉面馆 3825

Spring IOC启动分析 一 加载Bean定义的流程

1、注解方式启动方法 //参数是使用@Configuration标记的类 //参数可以是多个 AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class); 2、加载Bean定义的流程 2.1) 把Spring内部Bean...

lihongtai的专栏 376

2025年开源气象大模型的实现原理与实践指南

气象大模型在人工智能时代实现了革命性突破,通过深度学习技术以更低的计算成本达到甚至超越传统数值天气预报的精度。开源气象大模型的出现使得全球研究者和机构都能参与气象AI的创新。本文详细解析了开源气象大模型的实现原理,包括核心架构、数据准备、训练方法和实际预测流程,并提供了实践指南。核心架构主要采用Transformer、图神经网络和扩散模型,处理多模态数据融合和时空联合建模。数据体系构建涉及数据来源、预处理和增强策略。模型训练关键技术包括损失函数设计、分布式训练优化和训练过程监控。微调与领域适应策略包括迁移学

专注AI大模型,软件混淆,授权 1177

bean加载context idea_Spring Framwork之框架启动、bean的加载

Spring框架启动概述本文讨论的Spring框架启动、依赖注入,是在最简单的Spring框架下讨论的,而不是在Spring Boot、Spring MVC等框架下讨论。一个Spring应用启动时,究竟做了哪些工作?bean是如何加载的?根据Spring in Action第4版的描述,并参考了文献[1]的中文翻译,Spring框架产生如下行为:1. Spring初始化bean2. Spring将...

weixin_39998859的博客 229

杰理AC696N系列芯片外部中断使用教程

本教程详细介绍了杰理AC696N芯片的GPIO引脚中断唤醒功能实现方法。主要内容包括: 功能特点: 支持任意GPIO引脚配置为中断源 可灵活选择上升沿或下降沿触发 提供自定义中断回调函数接口 核心实现: 通过port_wkup_interrupt_init()函数配置GPIO属性 使用request_irq()注册中断服务程序 提供中断使能/关闭接口 注意事项: 此功能在低功耗模式下无效 需注意引脚冲突和中断优先级设置 建议在回调函数中实现简洁的逻辑 应用场景: 按键检测 外部信号监测 事件触发等 本方案提

qq_42014563的博客 941

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汇总——三个图帮你搞懂spring的bean加载过程

汇总——三个图帮你搞懂spring的bean加载过程 终于把Spring bean加载的流程图都搞出来了,这里搞个汇总文章方便大家浏览。个人感觉看这三个图可以大概把bean加载的流程都理清楚。建议可以一边看源码一边对照着流程图看。若有不正确的地方,欢迎指出~ Spring的ApplicationContext加载(一) Spring的ApplicationContext加载(二)——AbstractBeanFactory.doGetBean方法流程图 Spring的ApplicationContext加载(

weixin_42440637的博客 467

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

IOC加载过程

sprig启动流程,个人学习用

shangliangren的博客 752

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【Spring】java开发了解sping中的bean的生命周期,在实际开发中的场景或者说它能干什么呢?

加载之后,spring容器会将这些配置信息(java bean的信息),封装成BeanDefinition对象BeanDefinition对象其实就是普通java对象之上再封装一层, 赋予一些。对象进行springBean的实例化,springBean的实例化也就是执行bean的构造方法(单例的Bean放入。此时已完成bean的初始化,在程序中就可以通过spring容器拿到这些初始化好的bean。的这些属性,再调用各种Aware接口扩展方法,注入属性(spring特有的属性),比如。

2301_79456272的博客 1047

143.Spring IOC和DI加载过程

1.加载配置文件,启动Spring容器 2.如果配置文件里有bean,则会直接创建该bean的对象。如果有类扫描的注解解析器,则按照解析器的规则执行。 3.如果bean中有属性,则调用set方法(构造函数)给属性赋值,或者利用@Resource注解给属性赋值。 4.在读取配置文件创建对象之后,方法调用之前,会执行init方法,spring容器调用。 5.在客户端调用方法。 6.执行des...

453

IoC 容器是如何启动的详解

IoC (Inversion of Control,控制反转) 容器是 Spring Framework 的核心。它负责创建、配置和管理应用程序中的对象(称为 Bean)。容器会解析 Bean 之间的依赖关系,并将依赖的 Bean 注入到需要它们的 Bean 中。),容器会在 Bean 初始化时调用这些接口的方法,将相应的资源注入到 Bean 中。容器会读取配置元数据,这些元数据描述了如何创建和配置 Bean。容器会解析这些元数据,并将其转换为内部的。中的信息,通过反射创建 Bean 的实例。

专注于技术分享 759

spring refresh()

[code="java"] public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { //准备启动spring容器,设置容器的启动日期和活动标志 prepareRefresh(); Conf...

xiaokang930的博客 139

spring 源码通过xml方式容器刷新前的准备

简介 spring大体可以分为两个路线,一个是容器(DefaultSingletonBeanRegistry),一个是应用上下文(ApplicationContext),它们都是子BeanFactory的实现 DefaultSingletonBeanRegistry 用于缓存bean定义信息及bean ApplicationContext 上下文,用于保存spring应用过程的信息 接下来是以XML解析的方式深入探索 源码还没有构建的可以参考 ClassPathXmlApplicationContex

蜗牛也需要奔跑 423

三、refresh方法解析

代码: public void refresh() throws BeansException, IllegalStateException { //上锁 synchronized (this.startupShutdownMonitor) { //1、调用容器准备刷新的方法,获取容器的当时时间,同时给容器设置同步标识 prepareRefresh(); //2、告诉子类启动refreshBeanFactory()方法,Bean定义资源文件的载入从子类的refreshBeanFa

java 1024

Struts2 Hibernate Spring 运行流程与部分机制

Struts2 Hibernate Spring 运行流程与部分机制 Tomcat容器被加载,找到该webApplication相对应的web.xml 开始解析web.xml中的信息 读取到一个spring的监听器,告诉spring容器开始初始化配置文件中的信息,spring容器配置文件默认applicationContext.xml www.2cto.com org.sprin

979

springMVC 启动加载过程

spring启动component-scan类扫描加载过程—源码分析 spring通过DispatcherServlet加载: 系统配置: &lt;servlet&gt; &lt;servlet-name&gt;spring&lt;/servlet-name&gt; &lt;servlet-class&gt;org.springframework.web.servlet.Dis...

kunpeng90的博客 2万+

SpringBoot八种bean的加载方式

2.xml:context+注解(@Component+4个@Bean3.配置类+扫描+注解(@Component+4个@Bean)@Bean定义FactoryBean接口@Configuration注解的proxyBeanMethods属性4.@Import导入bean的类@Import导入配置类5.AnnotationConfigApplicationContext调用register方法6.@Import导入ImportSelector接口。

weixin_60719453的博客 8156
上一篇: 中台化建设一些基本认知:组件化、微服务、模块化区别与联系
下一篇: Spring框架beanPostProcessor后处理器整理
zleen --
博客等级 码龄12年 24粉丝 8原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值