孙哥Spring源码第23集

news2024/11/25 5:35:50

第23集 finishBeanFactoryInitialization处理过程

image-20230515152543966 image-20230515152553680

1、处理国际化,事件操作,onRresh()的操作,注册监听器。

image-20230515150436435

2、finishBeanFactoryInitialization(beanFactory)核心目的

通过Spring的BeanFactory创建单例(非延迟)这些对象

3、在调用这个finishBeanFactoryInitialization方法之前,Spring的ApplicationContext做了什么呢?

image-20230515150805130
1)注册BD BeanDefinition  ---> @ConfiugurationClassPostProcessor ---> BeanFactoryPostProcessor
						解决了顶级注解的处理 @PropertySource @ComponentScsan @Component  @ImportSource 											  @Import

2)  准备BeanPostProcessor ----> @AutowiredAnnotationBeanPostProcessor
                        解决了@Common 
						@Value  @Autowired  @Resource @PostConstrut @PreDestory注解 注入

4、处理类型转换器

image-20230515151542429

作用

1. 处理类型转换器
  		String----> 对象中需要的类型 
 		把配置文件xml或者.properties 解析成 @Value对应的值

注意

我们在通过自定义类型转换器应用时(ConversionService),id是必须要指定成 conversionService 
<bean id="conversionService"
@Component("conversionService")
@Bean("conversionService")

5、类型转换的发展

PropertyEditor->Converter

image-20230515152041191

6、BeanFactoy会有哪些属性呢?

BeanFactory 
     1. conversionService
     2. singletonObjects 
     3. earlySingletonObjects
     3. factorySingleonObj	ects
     4. beanDefintionMap
     5. beanDefintionNames
     6. BeanFactoryPostProcesses
     7. BeanPostProcesses
     8. embededValueResovers 

7、占位符替换

image-20230515152127205

8、占位符的数据信息是在哪里处理的呢?

在ConfigurationClassPostprocessor的@PropertySource中处理的。

9、冻结BD

image-20230515153511547

10、创建对象和创建复杂对象

image-20230515152335833

11、处理注解注入

image-20230515161526385

A:判断当前是否有 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor
B:处理@Value @Resource @Autowired注解注入,使用InjectMeta封装@Value @Resource @Autowired。

image-20230515161706256

12、FactoryBean 和 BeanFactory的区别

FactoryBean 接口和 BeanFactory 的主要区别在于它们的职责和用途。简单地说,FactoryBean 主要用于创建复杂或需要在实例化前进行特定配置的对象,而 BeanFactory 是 Spring 容器的基本接口,用于定义如何管理和创建 bean。

以下是 FactoryBean 和 BeanFactory 之间的一些关键区别:

  1. 功能不同

    • FactoryBean: 创建定义更复杂数组的bean,通常用于创建不容易实例化的对象,比如数据源对象, 事务代理对象等。 开发者也可创建自己的 FactoryBean 类型来封装复杂的实例化逻辑。
    • BeanFactory:提供依赖注入所需所有功能的核心接口,负责查找和维护bean定义、解析配置文件以及处理.bean 生命周期。
  2. 使用方式不同

    • FactoryBean:在 <bean> 标签中配置时, 需将引用改为 factoryBean 并通过属性设置来调整。
    • BeanFactory:在 applicationContext.xml 中直接引入即可(Spring 提供默认实现:ClassPathXmlApplicationContextFileSystemXmlApplicationContext)。
  3. 返回类型不同

    • FactoryBean: getObject()函数返回最后的Bean对象。
    • BeanFactory: getBean()函数返回 Bean 对象的实例。
  4. 适用场景不同

    • FactoryBean:用于封装类的复杂创建过程,适合需要配置大量信息的 Bean。
    • BeanFactory:适合维护整个 Spring 框架的bean关系。 在 ApplicationContext 中可以嵌套使用 BeanFactory 定义。

总结:

  • FactoryBean 是一个强大的工厂模式实现,在 Spring 配置中创建复杂对象时非常有用。
  • BeanFactory 是一个更为基础的接口,负责管理和构建不同类型的 bean。
  • 虽然这两者都是工厂模式的实现,但它们在功能、使用方式和场景上都存在显著差异。 在应用程序与框架交互时,通常使用 BeanFactory 管理具体业务对象,而使用.FactoryBean 解决特定初始化问题。

13、ApplicationContext的职责

ApplicationContext 是 Spring 框架中一个重要的组件,它的主要职责如下:

  1. Bean 容器: ApplicationContext 提供了一个存储并管理 Spring 应用中所有 Bean 对象的容器。它可以创建、配置和组装与应用相关的 Bean,并确保它们之间的依赖关系得到正确解决。

  2. 单例模式或原型模式: ApplicationContext 可以根据 Bean 的定义来控制其作用域(singleton, prototype 等),以满足应用程序的需求。

  3. 配置文件管理: ApplicationContext 能够读取和管理不同类型的配置文件(例如:XML, Java 配置类, 属性文件等),使开发者可以使用适合项目需求的配置方式。

  4. 事件处理: ApplicationContext 支持应用级别的事件发布和订阅机制,允许 Bean 组件和其他 Spring 上下文元素之间进行松耦合的通信。

  5. 国际化: ApplicationContext 提供了支持多语言的消息资源管理功能,简化了开发者在开发具有国际化特性的应用时的工作。通过 ResourceBundleMessageSource 这个类可以轻松实现国际化。

  6. 环境抽象: ApplicationContext 提供了一个 Environment 接口,用于将环境属性(Profiles, properties 等)与 Spring 配置文件相互映射,使得应用程序可以更加灵活地应对不同的环境需求(如:开发、测试、生产等)。

  7. AOP 集成: ApplicationContext 支持 AOP 的自动代理生成和管理,从而实现分离关注点,增强应用的功能和性能。

  8. 资源访问: ApplicationContext 提供了通用的 getResource() 方法来简化在文件系统、类路径、URL 等地方访问资源操作。

以上就是 ApplicationContext 在 Spring 框架中的主要职责。它作为一个中心组件,串联起整个 Spring 应用,为开发者提供了一个易于使用和强大的工具。

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

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

相关文章

mongodb 无法远程连接

在本机可以通过 mongo 命令进行连接&#xff0c;但是外部无法连接&#xff0c;排查以下两个方面&#xff1a; 一&#xff0c;检查防火墙是否未开放端口 如果不确定&#xff0c;可以先关闭防火墙再试 二&#xff0c;查看mongodb启动时绑定的ip 执行如下命令&#xff1a; nets…

织梦CMS_V5.7任意用户密码重置漏洞复现

一、漏洞说明 织梦内容管理系统&#xff08;DeDeCMS&#xff09;以其简单、实用、开源的特点而著名。作为国内最知名的PHP开源网站管理系统&#xff0c;它在多年的发展中取得了显著进步&#xff0c;无论在功能还是易用性方面都有长足的发展。该系统广泛应用于中小型企业门户网站…

Linux集群时间同步方法

参考&#xff1a;https://www.cnblogs.com/felixzh/p/10638399.html

Foxmail 备份旧数据导入新电脑

文章目录 前言方法参考 前言 如何转移Foxmail 邮箱中的邮件&#xff0c;以便转移电脑后也同样可以使用呢&#xff1f; 方法 找到Foxmail 安装目录找到存放账号的文件夹【Storage】 该文件夹下存放了邮箱账户的所有相关信息&#xff08;账户配置&#xff0c;收件箱&#xff0…

[TI] [Textual Inversion] An image is worth an word

自己的理解&#xff1a; 根据几个图像&#xff0c;找出来一个关键字可以代表它们&#xff0c;然后我们可以再用这个关键字去生成新的东西。 提出关键字 1 Introduction word->token->embedding Textual Inversion过程 需要&#xff1a; ① a fixed, pre-trained text…

C语言的文件操作(炒详解)

⭐回顾回顾文件操作的相关细节⭐ 欢迎大家指正错误 &#x1f4dd;在之前的学习中&#xff0c;不管增加数据&#xff0c;减少数据&#xff0c;当程序退出时&#xff0c;所有的数据都会销毁&#xff0c;等下次运行程序时&#xff0c;又要重新输入相关数据&#xff0c;如果一直像这…

升级OpenSSL并进行编译安装

Packaging (OpenSSL)组件存在安全漏洞的原因是由于当前爆出的Openssl漏洞。 这个漏洞可能会导致泄露隐私信息&#xff0c;并且涉及的机器和环境也有所不同&#xff0c;因此修复方案也会有所不同。 目前&#xff0c;一些服务器使用的Nginx是静态编译OpenSSL&#xff0c;直接将Op…

【数据结构】C++实现红黑树

【数据结构】C实现红黑树 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路…

多数网工碌碌无为,都是败在这件事上

大家好&#xff0c;我是老杨。 这周是网络安全周&#xff0c;博览会的现场很热闹&#xff0c;我也被邀请去参观了一圈。 主要是学习观摩各大厂出的最新的安全产品、解决方案等。 这几天&#xff0c;也遇上了不少大佬。 有从路由交换转到安全的&#xff0c;也有从渗透转到防御…

Unity中Shader的模板测试

文章目录 前言什么是模板测试1、模板缓冲区2、模板缓冲区中存储的值3、模板测试是什么&#xff08;看完以下流程就能知道模板测试是什么&#xff09;模板测试就是在渲染&#xff0c;后渲染的物体前&#xff0c;与渲染前的模板缓冲区的值进行比较&#xff0c;选出符合条件的部分…

红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现和端口扫描 第二步&#xff1a;Web渗透&#xff08;修改XFF代理&#xff09; 第三步&#xff1a;数据库手工枚举 第四步&#xff1a;sudo php提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行…

GPIO子系统编写LED灯的驱动、linux内核定时器

一、GPIO子系统 1.概念&#xff1a; 一个芯片厂商生产出芯片后会给linux提供一个当前芯片中gpio外设的驱动&#xff0c;我们当前只需要调用对应的厂商驱动即可完成硬件的控制。而linux内核源码中的gpio厂商驱动有很多&#xff0c;这里linux内核对厂商驱动做了一些封装&#x…

基于Java的大学生心理健康答题小程序设计与实现(亮点:选题新颖、可以发布试卷设置题目、自动判卷、上传答案、答案解析)

校园点餐小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统主要功能5.1 登…

python-字符串去掉空格的常见方法

python提供了去掉字符串空格的方法&#xff0c;可以满足大部分需求。 但在实际应用中&#xff0c;还需要灵活借助python其他方法&#xff0c;来实现字符串空格的删除。 比如&#xff0c;去掉字符串的全部空格、字符串连续空格保留一个等&#xff0c;都需要结合其他的方法来实现…

【kafka】mac环境安装kafka

生产中使用到的中间件使用心得记录&#xff0c;感兴趣可以关注我一起学习&#xff5e; 环境&#xff1a; 硬件&#xff1a;mac 软件&#xff1a;kafka v3.0.0 安装步骤&#xff1a; 终端安装&#xff1a; 通过brew安装&#xff0c;会默认直接安装最新的版本 步骤1&#xf…

Android StringFog 字符串自动加密

一、StringFog 作用 一款自动对dex/aar/jar文件中的字符串进行加密Android插件工具&#xff0c;正如名字所言&#xff0c;给字符串加上一层雾霭&#xff0c;使人难以窥视其真面目。可以用于增加反编译难度&#xff0c;防止字符串代码重复。 支持java/kotlin。支持app打包生成…

【JDK 8-函数式编程】4.6 方法引用与构造函数引用

一、 方法引用与构造函数引用 1. 说明 2. 语法: 二、静态方法 三、实例方法 四、构造函数 4.1 单个参数 4.2 2个参数 五、执行结果 一、 方法引用与构造函数引用 以前调用&#xff1a;对象.方法名、类名.方法名 jdk1.8提供了另外一种调用方式 :: 1. 说明 用来直接访…

子网的划分

强化计算机网络发现王道没有这一块的内容&#xff0c;导致做题稀里糊涂。于是个人调研补充。 子网划分是将一个大型IP网络划分成更小的子网&#xff0c;以实现更有效的网络管理和资源分配。 原因&#xff1a; 提高网络性能&#xff1a;子网划分可以减少广播域的大小&#xff…

靶场练习——SDcms文件上传漏洞靶场

文章目录 前言一、寻找网站后台页面1、点击请登录&#xff0c;查看URL2、修改URL参数&#xff0c;找到后台登录页面 二、登录后台管理系统1、不能使用爆破2、使用弱口令登录 三、寻找文件上传点四、上传文件操作1、上传普通的图片文件&#xff0c;查看数据包2、尝试上传PHP文件…

Mysql----锁

文章目录 锁 概述 全局锁全局锁 概述全局锁 操作表级锁表级锁 表锁表级锁 元数据锁表级锁 意向锁行级锁行级锁 行锁行级锁 间隙锁&临键锁 锁 概述 是什么 是计算机协调多个进程或线程并发访问某一资源的机制。 意义 在数据库中&#xff0c;数据是一种供许多用户共享的…