首页 > 其他分享 >Spring bean的生命周期

Spring bean的生命周期

时间:2024-03-21 15:12:16浏览次数:22  
标签:生命周期 Spring initMethod bean 调用 AOP 方法

BeanDefinition的产生:

SpringBoot在启动过程中,主要是刷新上下文的时候会将绝大部分的需要的bean生成BeanDefinition加入到容器(DefaultListableBeanFactory的beanDefinitionMap)

 

 

Bean的生命周期:

会在SpringBoot启动过程中的刷新上下文的finishBeanFactoryInitialization方法里开始进行bean的生命周期

按照bean name的字母顺序来开始bean的生命周期,因为涉及到属性的注入,所以得结合属性注入的情况才能最终知道哪个bean最先加入IoC容器

  1. 实例化bean(反射)
  2. 填充bean属性:populateBean,循环依赖问题(三级缓存)
  3. 调用aware接口相关方法:invokeAwareMethod(完成BeanName,BeanFactory,BeanClassLoader对象的属性设置)
  4. 调用BeanPostProceessor中的前置处理方法:常用的有ApplicationContextPostProcessor
  5. 调用initMethod方法:invokeInitMethod()
  6. 调用BeanPostProcessor的后置处理方法:AOP就是在这实现,AbstractAutoProxyCreator
  7. getBean来获取
  8. 销毁(执行接口DisposableBean的destroy方法,执行destroyMethod指定的方法)

 

在配置bean的时候可以加上initMethod和destroyMethod来指定初始化方法和销毁方法,如下

@Bean(initMethod="init", destroyMethod="destroy")

 

如果存在循环依赖,则AOP代理会提前,不完全按照上述的生命周期来进行。

会提前曝光bean、提前进行AOP代理,把代理过的不完整的bean放入二级缓存

 

 

调用过程如下,重点关注finishBeanFactoryInitialization方法和getSingleton方法

AbstractApplicationContext.refresh
AbstractApplicationContext.finishBeanFactoryInitialization
DefaultListableBeanFactory.preInstantiateSingletons
AbstractBeanFactory.getBean
AbstractBeanFactory.doGetBean
DefaultSingletonBeanRegistry.getSingleton

实例化

 

标签:生命周期,Spring,initMethod,bean,调用,AOP,方法
From: https://www.cnblogs.com/huainanyin/p/18086015

相关文章

  • Springboot实现qq邮件的发送
    一、打开必要的邮件设置首先登录qq邮箱官网登录之后,在设置中将传输协议给打开,我们需要用这个秘钥作为发件人的邮箱授权。这里开启之后,记住这个秘钥。二、代码编写首先我们将作为发送邮件的账户信息写入配置文件。spring:mail:host:smtp.qq.comusername......
  • SpringCloud 使用feign进行文件MultipartFile传输
    SpringCloud组件fiegn默认是不支持传递文件的。但是提供了feign-form扩展工具解决方法:步骤一:在消费者服务中加入相关pom依赖。<!--解决SpringCloud组件feign默认是不支持传递文件的--><dependency><groupId>io.github.openfeign.form</groupId>......
  • 从零开始学Spring Boot系列-集成Kafka
    Kafka简介ApacheKafka是一个开源的分布式流处理平台,由LinkedIn公司开发和维护,后来捐赠给了Apache软件基金会。Kafka主要用于构建实时数据管道和流应用。它类似于一个分布式、高吞吐量的发布-订阅消息系统,可以处理消费者网站的所有动作流数据。这种动作流数据包括页面浏览、搜索......
  • Spring基础
    IOC控制反转如A类中依赖了B类,传统生成实例的过程是需要先实例化B,在实例化A时传入B;控制反转实现了先实例化A,扫描到需要使用B时再实例化B实现了实例化过程的解耦,A、B可以单独实例化,再实现依赖关系Spring容器管理时的循环依赖问题三级缓存解决循环依赖三级缓存实际对应的是三次......
  • Spring MVC初体验
    使用maven框架构建SpringMVC项目,工具idea2023.2,jdk17,tomcat10。(之前使用tomcat9,与jdk17不兼容导致项目失败。在这个过程中失败很多次,有各种各样的原因,分别找到原因解决。)参考之前一篇文章SpringBootWeb项目整合jsp页面访问(非web项目改为web项目适用)。项目结构:......
  • springboot下postgresql指定schema问题
    首先明确用的postgresql版本是PostgreSQL9.5.25,compiledbyVisualC++build1800,64-bitspringboot是2.3.5.RELEASE。现有的文档提供的连接数据库配置方式是url:jdbc:postgresql://IP:端口/数据库名?currentSchema=模式名&stringtype=unspecified通常postgresq......
  • Vue.js+SpringBoot开发服装店库存管理系统
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1数据中心模块2.2角色管理模块2.3服装档案模块2.4服装入库模块2.5服装出库模块三、系统设计3.1用例设计3.2数据库设计3.2.1角色表3.2.2服装档案表3.2.3服装入库表3.2.4服装出库表四、系统展示五、核......
  • Vue.js+SpringBoot开发高校宿舍调配管理系统
    目录一、摘要1.1项目介绍1.2项目录屏二、功能需求2.1学生端2.2宿管2.3老师端三、系统展示四、核心代码4.1查询单条个人习惯4.2查询我的室友4.3查询宿舍4.4查询指定性别全部宿舍4.5初次分配宿舍五、免责说明一、摘要1.1项目介绍基于JAVA+Vue+Spring......
  • 基于java+springboot+vue实现的电影院选票系统(文末源码+Lw+ppt)23-467
    摘要时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,电影院选票系统当然不能排除在外。电影院选票系统是在实际应用和软件工程的开发原理之上,运用java语言,前台Vue框架以及后台SpringBoot框架进行开发。首先要进行需求分析,分析出电......
  • 基于java+springboot+vue实现的智慧养老院管理系统(文末源码+Lw+ppt)23-490
    摘 要智慧养老院管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从三个对象:由管理员和家属、护工来对系统进行设计构建。主要功能包括:个人信息修改,对家属信息、护工信息、老人入住、外出报备、退房登记、每月餐饮......