springbean的加载过程以及应用场景

embedded/2024/9/23 15:43:39/

加载过程

  1. 加载配置文件

    spring在启动的时候会先创建BeanFactory的示例,BeanFactory是一个接口具体实现主要使用的是:ApplicationContext。它会读取XML的bean配置或者使用注解配置的类,将这个bean配置为BeanDefinition对象

  2. 实例化bean

    解析完成bean的定义后,会调用createBeanInstance() 方法创建bean的实例,相当于操作符 new

  3. 设置bean的属性

    在populateBean()方法中,Spring会使用AurowiredAnnotationBeanPostPrecessor等后置处理器,进行依赖注入,将bean的属性设置到Bean的实例中。

  4. 调用初始化方法

    这里会调用initializeBean()方法初始化。如果Bean实现了InitializingBean接口或配置了init-method,则会在这一步调用初始化方法。

  5. 注册bean

    完成初始化后,Spring会将Bean注册到BeanFactory的容器中,以便后续能够根据Bean的名称或类型获取到Bean实例。

  6. bean的后置处理器

    在Bean创建过程中,Spring会应用注册的BeanPostProcessor,如CommonAnnotationBeanPostProcessor等,来对Bean进行增强处理,例如AOP代理、事件发布等。

  7. 完成bean的创建
    Bean已经被实例化、属性注入、初始化,并且注册到容器中,可以被其他Bean或应用程序使用。

实际使用

  • 实现了InstantiationAwareBeanPostProcessor 对Bean的创建过程进行定制
    
@Component
public class MyBeanPostProcessor implements InstantiationAwareBeanPostProcessor, DestructionAwareBeanPostProcessor {private static final Logger log = LoggerFactory.getLogger(MyBeanPostProcessor.class);// 实例化之前@Overridepublic Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {if (beanName.equals("lifeCycleBean")) {log.info("初始化之前执行, 这里返回的bean会替换原版本的bean");}return null;}// 实例化之后@Overridepublic boolean postProcessAfterInstantiation(Object bean, String beanName) throws BeansException {if (beanName.equals("lifeCycleBean")) {log.info("实例化之后执行, 这里返回false会跳过依赖注入阶段");//return false;}return true;}// 依赖注入阶段执行@Overridepublic PropertyValues postProcessProperties(PropertyValues pvs, Object bean, String beanName) throws BeansException {if(beanName.equals("lifeCycleBean")){log.info("依赖注入阶段执行, 如@Autowired, @Value, @Resource");}return pvs;}// 初始化之前@Overridepublic Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {if(beanName.equals("lifeCycleBean")){log.info("初始化之前执行, 这里返回的对象会替换原本的bean, 如@PostConstruct, @ConfigurationProperties");}return bean;}// 初始化之后执行@Overridepublic Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (beanName.equals("lifeCycleBean")) {log.info("初始化之后执行, 这里返回的对象会替换原本的bean, 如代理增强");}return bean;}// 销毁之前@Overridepublic void postProcessBeforeDestruction(Object bean, String beanName) throws BeansException {if(beanName.equals("lifeCycleBean")){log.info("销毁之前执行, 如 @PreDestroy");}}}

http://www.ppmy.cn/embedded/20356.html

相关文章

AcrelEMS-MH民航机场智慧能源管平台解决方案【可靠供电/降低能耗/高效运维】

民航机场行业背景 自2012年以来&#xff0c;我国民航运输规模出现了显著增长&#xff0c;旅客运输量&#xff1a;从2012年的3.19亿人次上升至2019年的6.6亿人次&#xff08;注&#xff1a;为剔除疫情影响&#xff0c;此处采取疫情前2019年的数据&#xff0c;下同&#xff09;&…

kotlin 编写一个简单的天气预报app (七)使用material design

一、优化思路 对之前的天气预报的app进行了优化&#xff0c;原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市&#xff0c;并请求openweathermap对应数据&#xff0c;并显示的功能。 但是搜索城市的时候&#xff0c;可能会有错误&#xff0c;比如大小写…

vscode 、eslint、prettier 的孽缘

今天在配置一个新项目的时候&#xff0c;被一个新项目搞得头痛。 我准备配置 prettier 来格式代码&#xff0c;然后把 prettier 添加到 eslint 规则中&#xff0c;这样控制台就能很好的展示那些代码格式有问题。可是控制台的错误和 vscode 显示的错误一直不一样&#xff0c;无…

创建electron,解决包清理的问题,解决镜像源卡住下载时间长

我的电脑用户名是Anyphasy,我的node.js安装在D:\developp\nodejss18.18.0 使用npm config get prefix查看node.js安装路径 npm config get prefix 创建electron 创建package.json文件,它里面记载了你的electron版本,项目描述,以及启动命令等信息 npm init -y 先查看你自己的…

文字PDF转图片PDF,适合pdf防复制

完整代码已传至github平台&#xff1a; https://github.com/yaunsine/text_pdf_to_image_pdf 分成两步操作&#xff1a; 1、将文字pdf输出成图片 2、将所有图片合成为pdf 将PDF文件输出为图片的形式 """pdf转图片 """ def pyMuPDF_fitz(pdfPa…

Unity场景光照数据Light data asset

首先描述一下遇到的问题&#xff0c;游戏运行过程中切换场景之后发现模型接收的光照不对。 Unity编辑模式下正常显示&#xff1a; 运行模式下从其他场景切入之后显示异常&#xff1a; 排查了灯光参数和环境光以及着色器都没发现异常。 根据ChatGPT的回答&#xff0c;问题可能…

openssl3.2 - exp - get openssl version info

文章目录 openssl3.2 - exp - get openssl version info概述笔记END openssl3.2 - exp - get openssl version info 概述 查资料时&#xff0c;看到用API取旧版openssl取版本信息。 去openssl工程中看了一下&#xff0c;有个内部测试程序有如何取openssl版本信息的API调用例子…

JavaScript云LIS系统源码 前端框架JQuery+EasyUI+后端框架MVC+SQLSuga大型医院云LIS检验系统源码 可直接上项目

JavaScript云LIS系统源码 前端框架JQueryEasyUI后端框架MVCSQLSuga大型医院云LIS检验系统源码 可直接上项目 云LIS系统概述&#xff1a; 云LIS是为区域医疗提供临床实验室信息服务的计算机应用程序&#xff0c;可协助区域内所有临床实验室相互协调并完成日常检验工作&#xff…