当前位置: 首页 > article >正文

Spring源码(十三):Spring全系列总结

Spring总结篇,不同于之前抽丝剥茧式地纵向深入源码,本次从横向的角度出发,希望可以带个读者一个完全不同的Spring视角。

2024年重置版,搞点不一样的东西。希望通过本篇的内容,将之前的文章全部给串起来。

相关前文:

  • Spring Boot启动加载
  • Spring Web请求处理流程
  • Spring上下文刷新(一)、Spring上下文刷新(二)
  • Spring DispachterServlet初始化
  • Spring AOP(一)、Spring AOP(二)
  • Spring Bean的创建(一)、Spring Bean的创建(二)

一、Bean的生命周期

我们先从狭义上进行简单划分:

  1. 实例化前(Before Instantiation):执行 cls.newInstance 之前,AOP动态代理、池化操作在此步进行。
  2. 实例化(Instantiation):执行 cls.newInstance 。
  3. 实例化后(After Instantiation):执行 cls.newInstance 之后。
  4. 填充属性(Population of Properties):注入字段,处理@Autowired、@Value、@Resource。
  5. 初始化前(Before Initialization):给与Aware接口资源
  6. 初始化(Initialization):执行@PostConstruct、执行afterPropertiesSet方法、init-method,执行顺序依次降低。
  7. 初始化后(After Initialization):无特殊操作。
  8. 使用中(In Use):代码运行中…
  9. 销毁(Destruction):分销毁前、销毁后。

如下是一张图,较为全貌地展示了bean的生命周期

bean的生命周期

二、BeanPostProcessor

我们再看下一个Bean在整个生命周期中都会经过哪些Spring内置的BeanPostProcessor,我们在其中的各个环节都可以做些什么。

便于理解,这里只列举关键BeanPostProcessor接口,不会过多扩展。

1、测试代码

import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValues;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor;
import org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;

import javax.annotation.PostConstruct;
import java.lang.reflect.Constructor;

public class BeanPostProcessorTest {
   

    public static void main(String[] args) {
   
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeanPostProcessorTest.class);
        context.registerBeanDefinition("testBean", new RootBeanDefinition(TestBean.class));
        Object testBean = context.getBean("testBean");
        System.out.println(testBean

http://www.kler.cn/a/410685.html

相关文章:

  • 图论基础知识
  • 零售电子商务数仓搭建之维度建模
  • openssl颁发包含主题替代名的证书–SAN
  • 微软Ignite 2024:建立一个Agentic世界!
  • PyQt的安装和再PyCharm中的配置
  • 机器学习—添加数据
  • 【AIGC】如何准确引导ChatGPT,实现精细化GPTs指令生成
  • C语言中宏的常见用法总结
  • 如何开发一个脚手架
  • 创建HTTPS网站
  • 《AI大模型开发笔记》——Prompt提示词最佳实践
  • 为什么DDoS防御很贵?
  • Js-对象-04-Array
  • Docker 的优势与测试环境的快速迁移
  • typescript基础入门
  • Redis Key 命名规范文档
  • python学习笔记(10)算法(3)列表
  • 国土安全部发布关键基础设施安全人工智能框架
  • 2024-11-21 学习人工智能的Day29 初见深度学习
  • vue2使用el-checkbox不能选中,解决方法