首页 > 其他分享 >Spring学习(一)Bean生命周期

Spring学习(一)Bean生命周期

时间:2024-07-26 22:51:01浏览次数:8  
标签:生命周期 Spring 调用 扫描 bean 缓存 Bean 实例

Spring最重要的功能就是管理bean,所以bean的生命周期特别重要
Spring配置文件分两种,一种是xml配置,一种是注解(Java代码)的配置
第一步:Spring 扫描(通过加载两种配置文件扫描)并且加载类定义(BeanDefinition),这个时候会生成一个 BeanDefinitionMap,并且判断扫描出来的类型中有没有实现 BeanPostProcessor,如果实现了,就需要实例化,并且放入List
第二步:推导构造方法,使用哪个构造方法进行实例化 (如果是 拥有lazy标签,或者prototype原型模式,则不会进行实例化流程)
第三步:实例化前,可以在实例化进行一些操作
第四步:实例化:对类进行实例化,这个时候会把实例化的对象放入到 BeanFactoryMap(三级缓存中)
第五步:实例化后:实例化后对对象进行操作
第六步:依赖注入(DI),这个时候会先去SingletonMap(一级缓存)中获取属性,如果没有则会去 earlySingletonMap(二级缓存)获取,如果没有则会去BeanFactoryMap(三级缓存)中获取BeanFactoty(半成品bean),然后调用early方法提前暴露的bean,如果这个提前暴露的bean存在aop,则会返回代理对象,并且存入earlySingletonMap(二级缓存)中,如果不需要aop,则直接返回 BeanFactoty(半成品bean)
第七步:如果对象实现了各种aware接口,context则需要调用这些方法,将对应的值传入bean中,比如BeanNameAware,ApplicationContextAware,这些aware主要是对值进行补充
第八步:初始化前:这里就是对扫描中拿到的 List for循环 调用 beforeBeanPostProcessor方法
第九步:初始化:这里判断是否实现了InitializingBean接口,如果实现了,则会调用 afterPropertiesSet方法
第十步:初始化后:这里就是对扫描中拿到的 List for循环 调用 afterBeanPostProcessor方法,这个就是AOP实现逻辑
在第十步执行之后,会将实例化之后的singletonObject放入 singletonObjectMap(一级缓存) 中,IOC(控制反转,Spring自己控制bean)就是获取这些 bean
然后正常使用bean即可
第十一步:容器关闭,销毁bean,这里会将bean适配成 disposableBean对象,然后调用销毁方法 destroy 即可

标签:生命周期,Spring,调用,扫描,bean,缓存,Bean,实例
From: https://www.cnblogs.com/xzmxddx/p/18319892

相关文章

  • SpringBoot源码初学者(二):SpringBoot事件监听器
    ps:真正适合阅读源码的新手来看的SpringBoot源码讲解,如果你真的想读懂SpringBoot源码,可以按照以下推荐的方式来阅读文章打开ide,打开SpringBoot源码,跟着文章一起写注释,写自己的注释不要过于纠结没讲到的地方,毕竟SpringBoot源码那么多,想全讲完是不可能的,只要跟着文章认真阅......
  • Spring的Bean生命周期中@PostConstruct注解
    前言在Spring框架中,@PostConstruct注解用于在Bean初始化完成后立即执行某些方法。这个注解的作用是保证在依赖注入完成后,执行一些初始化工作。诞生背景@PostConstruct注解的诞生是为了提供一种标准化的、简单的方法来进行对象初始化工作。1.简化初始化逻辑在传统的Java开发......
  • SpringMVC框架
    SpringMVC是一个基于Java的Web框架,它通过模型-视图-控制器(MVC)设计模式来帮助开发者构建灵活且可维护的Web应用程序。以下是一个简单的SpringMVC框架实例,展示了如何创建一个基本的Web应用程序。1.创建Maven项目首先,你可以使用Maven创建一个新的Java项目。确......
  • Spring框架配置扩展
    Bean的作用域:在Java编程中,Bean 是一个用于封装数据的对象。Bean 通常是一个简单的Java类,它遵循一些特定的约定,例如有一个无参构造函数、可以通过getter和setter方法访问属性。关于 Bean 的作用域,它通常取决于 Bean 的使用环境。以下是一些常见的 Bean 作用域......
  • 快速运行spring项目
    1.安装jdk8;2.用idea打开spring项目,右下角会安装所需要的包,耐心等待;3.ProjectStructure中添加jdk8的路径;4.build这个项目;5.找到这个文件,点击run就好了。 ......
  • 【工具】SpringBoot项目如何查看某个maven依赖是否存在以及依赖链路
    当我在SpringBoot项目中想加个依赖,但是不确定现有依赖的依赖的依赖.....有没有添加过这个依赖,怎么办呢?如果添加过了但是不知道我需要的这个依赖属于哪个依赖的下面,怎么查呢?IDEA中提供了很方便的视图可以满足我们的需求第一步点击项目右侧的maven第二步选中Dependencies第三......
  • springboot《学生手册》 线上考试系统设计与实现(源码+lw+部署文档+讲解等)
    具体实现截图技术栈后端框架SpringBoot采用springboot作为后台的框架,java框架具有简化配置和开发的效率。Spring框架目前是很多java开发者的首选框架,Spring主要有两大功能,控制反转和面向切面的编程。控制反转(IOC)可以实现代码的依赖注入,减少代码的......
  • springboot《毛泽东诗词赏析》课程网站实现(源码+lw+部署文档+讲解等)
    具体实现截图技术栈后端框架SpringBoot采用springboot作为后台的框架,java框架具有简化配置和开发的效率。Spring框架目前是很多java开发者的首选框架,Spring主要有两大功能,控制反转和面向切面的编程。控制反转(IOC)可以实现代码的依赖注入,减少代码的......
  • 黑马程序员2024最新SpringCloud微服务开发与实战 个人学习心得、踩坑、与bug记录Day4
    你好,我是Qiuner.为帮助别人少走弯路和记录自己编程学习过程而写博客这是我的githubhttps://github.com/Qiuner⭐️giteehttps://gitee.com/Qiuner......
  • 基于SpringBoot大学菜鸟驿站管理系统设计和实现(源码+LW+调试文档)
    完整视频演示:请联系我获取更详细的演示视频功能截图:核心代码参考:  /***登录相关*/@RequestMapping("users")@RestControllerpublicclassUserController{@AutowiredprivateUserServiceuserService;@AutowiredprivateTo......