六、【源码】应用上下文

news2024/10/7 16:26:56

源码地址:https://github.com/spring-projects/spring-framework

仓库地址:https://gitcode.net/qq_42665745/spring/-/tree/06-application-context

应用上下文

实现应用上下文的核心类:

1.ApplicationContext:Spring 应用上下文的标准接口,提供了丰富的企业级功能,如国际化、事件发布、资源处理等
2.ConfigurableApplicationContext:增加了一些配置上下文的额外操作方法。提供了启动、停止、刷新和关闭应用上下文的方法。
3.AbstractApplicationContext:实现了 refresh() 方法来刷新上下文,以及其他管理和配置上下文的通用逻辑。
4.AbstractRefreshableApplicationContext:提供了一些支持动态刷新配置的能力,比如重新加载配置文件。
5.AbstractXmlApplicationContext:实现了从XML文件加载Bean定义的逻辑
6.ClassPathXmlApplicationContext:指定从类路径(classpath)中加载 XML 文件来初始化 Spring 容器

操作Bean的两个关键接口:
1.BeanFactoryPostProcessor:

  • 作用:在 Bean 实例化之前,对 Bean 的定义信息 BeanDefinition 进行修改
  • 执行时机:容器refresh阶段

2.BeanPostProcessor:

  • 作用:在 Bean 对象实例化、属性注入之后自定义修改 Bean 对象
  • 执行时机:Bean实例化阶段

容器初始化执行流程:

1.使用ClassPathXmlApplicationContext加载配置文件,然后刷新容器

  • 创建一个DefaultListableBeanFactory容器,读取XML加载Bean定义到容器中
  • 获取到刚初始化的容器
  • 执行所有注册的BeanFactoryPostProcessor,使用getBeansOfType取出BeanFactoryPostProcessor的所有子类,然后初始化Bean实例,封装成一个map,遍历map依次执行他们的postProcessBeanFactory方法
  • 注册所有BeanPostProcessor,使用getBeansOfType取出BeanPostProcessor的所有子类,然后初始化Bean实例,封装成一个map,遍历map依次加入到容器中存储,Bean实例化时使用
  • 初始化所有Bean

2.初始化Bean时分3步:

  • 反射初始化Bean对象
  • 属性注入
  • 执行所有的BeanPostProcessor方法

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1889425.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java设计模式(五)建造者模式(Builder Pattern)

1、模式介绍: 建造者模式(Builder Pattern)是一种创建型设计模式,它允许你创建一个复杂对象的表示,同时隐藏了创建细节。该模式将对象的构建过程和表示分离,使得相同的构建过程可以创建不同的表示。 2、应…

如何选择适合自己的巴比达内网穿透方案

选择适合自己的巴比达内网穿透方案,需要考虑几个关键因素,包括您的具体需求、安全性要求、技术水平以及预算。以下是一些选择巴比达内网穿透方案的建议步骤: 1. 确定需求和用途 首先,需要明确您希望通过内网穿透实现的具体目标和…

项目实战-MySQL极佳优化方案---前缀索引

一、应用背景 由于公司项目数据量较大,开发小程序和APP过程中,SQL查询超过1.5s以上的等待时间,因此需要对SQL或者数据表结构设计进行优化。就不讲SQL语句优化啦,而是记录一下数据表结构设计优化的前缀索引实现。 二、MySQL索引 …

Transformer拆积木

文章目录 ConceptsEmbeddingEncoderDecoderSelf-Attention matric calculationFinal Linear and Softmax LayerLoss function 参考 学一下已经问鼎中原七年之久的Transformer Concepts 开始拆积木! Embedding Encoder Decoder Self-Attention matric calculati…

PHP房产小程序微信小程序系统源码

🏠—— 购房租房,一“指”搞定🏡 🔍【开篇:房产新视界,尽在掌握】 在这个信息爆炸的时代,找房子不再是一场漫长的奔波。有了“房产微信小程序”,无论是购房还是租房,都…

如何从Salesforce顾问转型为解决方案架构师?

在充满活力的Salesforce咨询领域,许多专业人士都希望从顾问转型为解决方案架构师。这种转型不仅需要掌握新技能,还需要从根本上改变思维方式。关键在于摆脱顾问典型的以职能为中心的思维模式,拥抱更广阔、更具战略性的视角。 从“如何”到“…

手把手教你在QQ微信上AI变声器安装和使用(软件下载)

获取方式:点击下载 你相信互联网上还有真的东西么?我反正越来越不相信了! 比如,和你在网上眉来眼去语音撩骚的小姐姐,可能就是一个抠脚大汉。 而抠脚大汉,也可以是一个漂亮的小姐姐。 o(* ̄︶…

发表EI论文相当于SCI几区?

EI(工程索引)本身并不进行分区,它是一个收录工程领域高质量文献的数据库,与SCI(科学引文索引)的分区制度不同。然而,在非正式的学术评价中,有时人们会将EI与SCI的分区进行比较。 虽…

西南交通大学【算法分析与设计实验2】

实验2.3 m_Coloring算法时间复杂性分析 实验目的 (1)实验比较数据输入规模对算法执行时间的影响。 (2)实验比较不同算法对问题求解时间的影响。 (3)掌握算法时间效率的分析方法。 实验任务 &#xff0…

SwinIR: Image Restoration Using Swin Transformer(ICCV 2021)含代码复现

目录 一、Introduction 1 Motivation 2 Contribution 二、原理分析 1 Network Architecture 1)Shallow feature extraction 2) deep feature extraction 3) image reconsruction modules 4) loss function 2 Residual Swin Transformer Block 三、实验结果…

认识String类

文章目录 String类字符串的遍历字符串的比较字符串的替换字符串的转换字符串的切割字符串的切片字符串的查找 总结 String类 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能使用字符数组或者字符指针,可以使用标准库提 供的字符串系列函数完…

vue3实现echarts——小demo

版本&#xff1a; 效果&#xff1a; 代码&#xff1a; <template><div class"middle-box"><div class"box-title">检验排名TOP10</div><div class"box-echart" id"chart1" :loading"loading1"&…

WAF的新选择,雷池 SafeLine-安装动态防护使用指南

什么是 WAF WAF 是 Web Application Firewall 的缩写&#xff0c;也被称为 Web 应用防火墙。 区别于传统防火墙&#xff0c;WAF 工作在应用层&#xff0c;对基于 HTTP/HTTPS 协议的 Web 系统有着更好的防护效果&#xff0c;使其免于受到黑客的攻击&#xff1b; 通俗来讲&#…

什么是 MySQL 锁等待?

本文基于 MySQL 8.0.32 源码&#xff0c;存储引擎为 InnoDB。 1. 先排队 不管是加表锁&#xff0c;还是加行锁&#xff0c;如果不能立即获得锁&#xff0c;加锁事务都需要进入锁等待状态。 事务进入锁等待状态&#xff0c;需要用锁结构来排队。和立即获得锁时的锁结构一样&am…

【Python+微信小程序】学生考勤签到系统(已开源)

1. 简介 &#x1f61d; 这个项目是一款基于微信小程序和Flask框架开发的应用&#xff0c;旨在帮助学校管理学生的考勤和课程信息。系统通过集成数据库管理、API开发以及前后端交互&#xff0c;实现了便捷的学生考勤记录、课程表管理和教师交互功能。其主要特点包括&#xff1a…

intellij idea中使用R语言plot画图无图像问题

1、在intellij idea中使用R语言plot函数时&#xff0c;会遇到各种各样的问题&#xff0c;会出现图片不显示问题&#xff0c; 可以看到&#xff0c;目前我电脑r语言版本为4.2.1&#xff0c;输入下面代码&#xff1a; # # 安装包 # install.packages(ggplot2) # library(ggplot2…

AI是在帮助开发者还是取代他们

目录 1.概述 1.1.AI助力开发者 1.2.AI对开发者的挑战 2.AI工具现状 2.1. GitHub Copilot 2.2. TabNine 2.3.小结 3.AI对开发者的影响 3.1.对开发者的影响 3.2.开发者需要掌握的新技能 3.3.在AI辅助的环境中保持竞争力的策略 4.AI开发的未来 5.总结 1.概述 生成式…

【VScode】常用配置

1.indenticator 增加白色竖条&#xff0c;显示方法范围 2.Git Graph 给git变换分支增添颜色区分 3.Vue 系列 vue 系列&#xff1a;给纯白色代码添加 颜色区分 3.eslint eslint警告&#xff0c;比如{ } 只写了半个会标红提示错误 等错误信息提示 需要配置js等页面 非下…

使用CiteSpace软件对知网文献进行关键词共现/聚类/突现分析

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…