01-Spring原理及创建对象的流程

12 篇文章 0 订阅
订阅专栏

一、spring对象创建流程:

在这里插入图片描述

  1. 初始化IOC容器
  2. 读取xml配置文件
  3. 解析配置文件内容注册为BeanDefinition
  4. 执行BeanFactoryPostProcessor实现类(扩展点)
  5. 实例化(反射)
  6. 初始化
    6.1 属性填充
    6.2 调用Aware结尾接口的方法
    6.3 执行postProcessBeforeInitialization方法(扩展点,前置处理)
    6.4 检查是否实现InitializingBean接口,以此来调用afterPropertiesSet方法
    6.5 执行init-method指定的方法
    6.6 执行postProcessAfterInitialization方法(扩展点,后置处理)
  7. 完整对象,可以使用
  8. 检查是否实现DisposableBean接口
  9. 调用destory-method指定的方法

解释:
步骤4:执行BeanFactoryPostProcessor实现类(扩展点),后置处理器,可以在bean实例化之前对BeanDefinition进行修改,读取BeanDefinition并修改它。例如:可以进行元数据的配置,对xml文件中配置的数据源中的${jdbc.driverName}等进行值的替换。

步骤5:使用反射实例化对象

Constructor ctor = clazz.getDeclareConstructor();
Object obj = ctor.newInstance();

5.1 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。 

5.2 对于ApplicationContext容器,当容器启动结束后,便实例化所有的bean。 容器通过获取BeanDefinition对象中的信息进行实例化。并且这一步仅仅是简单的实例化,并未进行依赖注入。 实例化对象被包装在BeanWrapper对象中,BeanWrapper提供了设置对象属性的接口,从而避免了使用反射机制设置属性。

步骤6:初始化

6.1 属性填充:实例化后的对象被封装在BeanWrapper对象中,并且此时对象仍然是一个原生的状态,并没有进行依赖注入。紧接着,Spring根据BeanDefinition中的信息进行依赖注入。并且通过BeanWrapper提供的设置属性的接口完成依赖注入。

6.2 调用Aware结尾接口的方法:实现以Aware结尾的接口的Bean在实例化之后,可以取得一些相应的资源。例如:

  1. 实现BeanFactoryAware接口的Bean可以在实例化之后取得BeanFactory对象;
  2. 实现ApplicationContextAware接口的Bean在实例化之后可以取得ApplicationContext对象。

6.36.6 所提供的扩展点,它们是BeanPostProcessor接口的两个方法,此时的Bean对象已经被正确的构造,如果此时想要对Bean对象进行一些自定义的处理,就可以实现BeanPostProcessor接口。实现BeanPostProcessor接口可以实现AOP功能。

  • postProcessBeforeInitialzation( Object bean, String beanName )
    当前正在初始化的bean对象会被传递进来,我们就可以对这个bean作任何处理。
    这个函数会先于InitialzationBean执行,因此称为前置处理。
    所有Aware接口的注入就是在这一步完成的。
  • postProcessAfterInitialzation( Object bean, String beanName )
    当前正在初始化的bean对象会被传递进来,我们就可以对这个bean作任何处理。
    这个函数会在InitialzationBean完成后执行,因此称为后置处理。

6.4 检查是否实现InitializingBean接口,以此来调用afterPropertiesSet方法
当BeanPostProcessor的前置处理完成后就会进入本阶段。
InitializingBean接口只有一个函数:

  • afterPropertiesSet()

这一阶段也可以在bean正式构造完成前增加我们自定义的逻辑,但它与前置处理不同,由于该函数并不会把当前bean对象传进来,因此在这一步没办法处理对象本身,只能增加一些额外的逻辑。

若要使用它,我们需要让bean实现该接口,并把要增加的逻辑写在该函数中。然后Spring会在前置处理完成后检测当前bean是否实现了该接口,并执行afterPropertiesSet函数。

当然,Spring为了降低对客户代码的侵入性,给bean的配置提供了init-method属性,该属性指定了在这一阶段需要执行的函数名。Spring便会在初始化阶段执行我们设置的函数。init-method本质上仍然使用了InitializingBean接口。

步骤8和步骤9

和init-method一样,通过给destroy-method指定函数,就可以在bean销毁前执行指定的逻辑。

二、Spring的Bean生命周期:

上述的步骤5,6,7,8,9就是Bean的生命周期

Spring生命周期
fangzhenshi123的博客
07-31 704
作者:方程式 能今天做好的事就不要等到明天。以梦为马,学习趁年华。 spring是什么 轻量级的JavaEE开源框架,是一种容器框架,用来装载Java Bean对象,是个中间层框架,江湖人称万能胶,可以和市场上的主流框架进行无缝集成,比如mybatis、redis、encache等。让企业开发方便快捷。 Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架 从大小与开销方面都是,spring是轻量级的。 通过控制反转的技术达到松耦合目的–比如A对象有B属性,正常为A主动创建.
mybatis-spring原理解析
qq_28695733的博客
06-29 1592
mybatis-spring解析 概述 mybatis-spring让mybatis和Spring无缝对接,无需再关心mybatis中的Configuration、SqlSessionFactory、SqlSession,自动为Mapper创建实例注册到SpringIoc容器中, 并由Spring事务管理。在使用spring的前提下更加简化了Mybatis的操作,使用过程不用关心任何mybatis的相关概念。 Mybatis-spring主要做的内容包含: mybatis相关类 “Spri.
深入剖析Spring(三)——Bean的生命周期
大闲人柴毛毛
02-17 4834
对于普通的Java对象,当new的时候创建对象,当它没有任何引用的时候被垃圾回收机制回收。而由Spring IoC容器托管的对象,它们的生命周期完全由容器控制。Spring中每个Bean的生命周期如下:1. 实例化Bean对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。
spring全面详解-最全最详细的spring基本认识和入门使用
是程序喵呀
08-20 5091
Spring是一款主流的Java EE 轻量级开源框架,目的是用于简化Java企业级引用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力。​ Spring自诞生以来备受青睐,一直被广大开发人员作为Java企业级应用程序开发的首选。时至今日,Spring俨然成为了Java EE的代名词,成为了构建Java EE 应用的事实标准。
Spring的生命周期
MRZHQ的博客
02-21 7034
在使用Spring框架时,我们需要根据实际需求,合理地配置Bean的生命周期和初始化方法,以保证系统的稳定性和性能。在实例化阶段,Spring框架会创建Bean实例,并根据Bean的定义,注入Bean的属性和依赖关系。在实例化阶段完成后,Spring框架会对Bean进行初始化。在初始化阶段,Spring框架会调用Bean的初始化方法,并执行各种初始化操作,例如数据源的初始化、连接的建立等。在销毁阶段,Spring框架会调用Bean的销毁方法,并执行各种清理操作,例如数据源的关闭、连接的释放等。
ch01-hello-spring1.rar
09-12
6. **Hello World示例**:创建一个简单的Spring应用,比如一个打印“Hello Spring”的控制器,展示Spring MVC的工作流程。 7. **Spring Boot**:如果深入,可能会提及Spring Boot,它是快速构建Spring应用的框架,...
Spring框架系列(7) - Spring IOC实现原理详解之IOC初始化流程.doc
07-13
Spring 框架系列(7)- Spring IOC 实现原理详解之 IOC 初始化流程 本文将详细解释 Spring 框架中的 IOC(Inversion of Control,控制反转)实现原理之 IOC 初始化流程。IOC 是一种软件设计模式,用于将软件系统中...
springsecurity原理流程图.pdf
09-08
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...
my-spring.rar-Spring-AOP源码Demo
05-27
织入是将切面应用到目标对象以创建新的代理对象的过程,可以在编译时、类加载时或运行时完成。 Spring AOP主要提供了五种通知类型: 1. 前置通知(Before Advice):在目标方法执行前执行。 2. 后置通知(After ...
Spring Bean的生命周期
weixin_42383680的博客
09-14 548
Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。 只有四个! 是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和属性赋值对应构造方法和setter方法的注入,初始化
Spring】——Spring生命周期
热门推荐
冷兮雪的博客
06-11 1万+
❤️❤️❤️前面我们讲完了Spring中有关Bean的读和取,我们还没有还好去了解了解Bean对象,这篇 就是对Bean的深入学习。
请别再问Spring Bean的生命周期了!
qq_43783527的博客
10-22 403
请别再问Spring Bean的生命周期了! sunshujie1990关注 **92019.05.30 23:22:09字数 2,609阅读 102,997 Spring Bean的生命周期是Spring面试热点问题。这个问题即考察对Spring的微观了解,又考察对Spring的宏观认识,想要答好并不容易!本文希望能够从源码角度入手,帮助面试者彻底搞定Spring Bean的生命周期。 只有四个! 是的,Spring Bean的生命周期只有这四个阶段。把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有
spring生命周期
大灰狼的专栏
09-19 6084
下图为BeanFactory中bean生命周期的完整过程 步骤: 1.当调用者通过getBean(beanName)向容器请求Bean时,如果容器注册了org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor接口,在实例bean之前,将调用该接口的postProcessBefo...
spring容器创建对象
最新发布
09-06
Spring 容器是 Spring 框架的核心组件之一,负责管理和维护应用中对象的生命周期。Spring 容器创建对象主要是通过依赖注入(Dependency Injection, DI)机制来完成的。以下是 Spring 容器创建对象的基本流程: 1. 配置元数据:Spring 容器根据提供的配置元数据来管理应用中的对象。配置元数据可以是 XML 文件、注解或 Java 配置类。 2. 容器实例化:创建 Spring 容器实例,比如通过 `ClassPathXmlApplicationContext` 或 `AnnotationConfigApplicationContext` 类。 3. 加载Bean定义:容器读取配置信息,根据提供的配置元数据识别出需要管理的 Bean 定义。Bean 定义中包含了 Bean 的类信息、作用域(singleton、prototype)、生命周期回调方法等。 4. 实例化Bean:Spring 容器使用反射等技术,根据 Bean 定义中的类信息创建对象实例。如果 Bean 配置了依赖,容器会自动处理这些依赖,将它们注入到对象中。 5. 设置属性值和依赖:通过 setter 方法或者字段注入的方式,Spring 容器为 Bean 设置属性值以及注入其他 Bean 的引用。 6. 调用Bean的初始化方法:如果 Bean 实现了特定的初始化接口(如 `InitializingBean`),或者定义了初始化方法(通过 `<bean>` 标签的 `init-method` 属性指定),容器会调用相应的初始化方法。 7. 使用Bean:完成上述步骤后,Bean 就可以被应用中的其他部分使用了。 8. 销毁Bean:当容器关闭时,如果 Bean 实现了销毁接口(如 `DisposableBean`),或者定义了销毁方法(通过 `<bean>` 标签的 `destroy-method` 属性指定),容器会调用相应的销毁方法来释放资源。
写文章

热门文章

  • SpringCloud五大组件原理 19998
  • TOP命令详解 17658
  • 富文本编辑器保存的内容转为HTML格式 11570
  • bootstrap-fileinput的简单使用(图片上传和编辑) 10725
  • 数据库的修改表字段语句 10370

分类专栏

  • docker 1篇
  • 工具类 15篇
  • 并发 4篇
  • 消息队列 3篇
  • 分布式 2篇
  • 日志 1篇
  • shiro 2篇
  • springcloud 3篇
  • elasticsearch 3篇
  • mongodb 1篇
  • 计算机网络 1篇
  • 数据库 10篇
  • 前端 12篇
  • 版本管理工具 2篇
  • ssm 12篇
  • python 3篇
  • redis 7篇
  • springboot 9篇
  • UML 1篇
  • 知识点总结 31篇
  • 蓝桥杯 6篇
  • Linux 13篇
  • 设计模式 15篇
  • JavaSE 16篇
  • 数据结构与算法 39篇

最新评论

  • 分布式事务

    Ponenshy: 写得挺好啊表情包

  • 分布式事务

    Linging_24: 有何指教表情包

  • 分布式事务

    Ponenshy: 看完了

  • mybatis-plus代码生成器

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性;(2)增加除了各种控件外,文章正文的字数;(3)增加条理清晰的目录。

  • 网络基础相关知识点

    CSDN-Ada助手: 哇, 你的文章质量真不错,值得学习!不过这么高质量的文章, 还值得进一步提升, 以下的改进点你可以参考下: (1)提升标题与正文的相关性。

大家在看

  • 论文 Python 实现WOA-CNN-BiGRU-Attention数据分类预测 64
  • 手环押金原路退回系统——足浴店——东方仙盟

最新文章

  • 策略模式结合Spring使用
  • Vue父子组件传值
  • mybatis批量提交工具类
2024年8篇
2023年16篇
2022年32篇
2021年31篇
2020年93篇
2019年12篇
2018年1篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家太原南京玻璃钢卡通雕塑景观园林玻璃钢人物雕塑定制北京商场创意商业美陈作品河南铸铜玻璃钢彩绘雕塑厂家桂城名人玻璃钢人物雕塑玻璃钢花盆效果图玻璃钢花盆厂商特供苏州椭圆形玻璃钢花盆云南玻璃钢雕塑东莞透光玻璃钢雕塑摆件附近玻璃钢人物雕塑定做贵阳学校玻璃钢雕塑哪家便宜茂名玻璃钢狗雕塑商场美陈空井吊挂望都昙玻璃钢雕塑厂玻璃钢动物雕塑直销人物玻璃钢雕塑公司地址江西户内玻璃钢雕塑图片哪里有玻璃钢景观雕塑价格常州市玻璃钢雕塑公司四川玻璃钢雕塑开发广州水果玻璃钢雕塑生产厂家倾销玻璃钢新娘雕塑广东户外玻璃钢雕塑生产厂家深圳玻璃钢卡通雕塑品广州玻璃钢鹿马赛克雕塑冀州玻璃钢人物雕塑玻璃钢长颈鹿雕塑制作资阳玻璃钢雕塑定制白银卡通玻璃钢雕塑制作香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化