13.Spring源码解析-prepareBeanFactory

image.png
点进去
image.png此处是 Spel表达式设置

BeanExpressionResolver

此接口只有一个实现: StandardBeanExpressionResolver。接口只含有一个方法:

Object evaluate(String value, BeanExpressionContext evalContext) 

prepareBeanFactory将一个此对象放入BeanFactory:

beanFactory.setBeanExpressionResolver(new StandardBeanExpressionResolver(beanFactory.getBeanClassLoader())); 

StandardBeanExpressionResolver对象内部有一个关键的成员: SpelExpressionParser,其整个类图:
image.png
Spel表达式的应用示例后续会给出来。
image.png
此处是设置PropertyEditor

PropertyEditorRegistrar

此接口用于向Spring注册java.beans.PropertyEditor,只有一个方法:

registerCustomEditors(PropertyEditorRegistry registry)

实现也只有一个: ResourceEditorRegistrar。
在编写xml配置时,我们设置的值都是字符串形式,所以在使用时肯定需要转为我们需要的类型,PropertyEditor接口正是定义了这么个东西。
prepareBeanFactory:

beanFactory.addPropertyEditorRegistrar(new ResourceEditorRegistrar(this, getEnvironment()));

BeanFactory也暴露了registerCustomEditors方法用以添加自定义的转换器,所以这个地方是组合模式的体现。
我们有两种方式可以添加自定义PropertyEditor:

  • 通过context.getBeanFactory().registerCustomEditor
  • 通过Spring配置文件:
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer"><property name="customEditors"><map><entry key="base.Cat" value="base.CatEditor" /> </map></property>
</bean>

参考: 深入理解JavaBean(2):属性编辑器PropertyEditor

image.png

环境注入

在Spring中我们自己的bean可以通过实现EnvironmentAware等一系列Aware接口获取到Spring内部的一些对象。prepareBeanFactory:

beanFactory.addBeanPostProcessor(new ApplicationContextAwareProcessor(this)); 

ApplicationContextAwareProcessor核心的invokeAwareInterfaces方法:

private void invokeAwareInterfaces(Object bean) {if (bean instanceof Aware) {if (bean instanceof EnvironmentAware) {((EnvironmentAware) bean).setEnvironment(this.applicationContext.getEnvironment());}if (bean instanceof EmbeddedValueResolverAware) {((EmbeddedValueResolverAware) bean).setEmbeddedValueResolver(this.embeddedValueResolver);}//....}
}
依赖解析忽略

此部分设置哪些接口在进行依赖注入的时候应该被忽略:
image.png
上图依赖解析忽略

bean伪装

有些对象并不在BeanFactory中,但是我们依然想让它们可以被装配,这就需要伪装一下
image.png
伪装关系保存在一个Map<Class<?>, Object>里。

LoadTimeWeaver

如果配置了此bean,那么:
image.png

这个东西具体是干什么的在后面context:load-time-weaver中说明。

注册环境

image.png
containsLocalBean特殊之处在于不会去父BeanFactory寻找。

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

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

相关文章

使用elementPlus去除下拉框蓝色边框

// 下拉框去除蓝色边框 .el-select {--el-select-input-focus-border-color: none !important; }

算法之插入排序及希尔排序(C语言版)

我们来实现上述排序 一.插入排序. 当插入第i(i>1)个元素时&#xff0c;前面的array[0],array[1],.,array[i-1]已经排好序&#xff0c;此时用array[i的排序码与array[i-1]array[i-2].的排序码顺序进行比较&#xff0c;找到插入位置即将arrayU插入&#xff0c;原来位置上的元…

linux 内核tasket机制

tasklet&#xff08;tasklet&#xff0c;有的书中翻译为“任务蕾”&#xff09;是基于软中断实现的。为什么要提供tasklet&#xff1f;因为tasklet相对软中断有以下优势。 &#xff08;1&#xff09;软中断的种类是编译时静态定义的&#xff0c;在运行时不能添加或删除&#x…

谈谈MYSQL中的Explain

目录 前言 基本介绍 Explain结果列解读 概述 key key_len type extra 前言 我们在设计一个系统的时候&#xff0c;有时候通常为了基础业务&#xff0c;写出的查询sql语句并不高效&#xff0c;从而影响到用户使用系统的整体体验感不是很好&#xff0c;我们通常在系统的…

一篇文章搞懂 JavaScript 箭头函数

一篇文章搞懂 JavaScript 箭头函数 JavaScript 箭头函数的引入为我们编写简洁且易读的代码提供了便利。 箭头函数是 ES6&#xff08;ECMAScript 2015&#xff09; 引入的新语法&#xff0c;它可以用一种更简单的方式来定义函数。本文将深入探讨箭头函数的特性、用法和一些最佳…

百度地图定位

https://lbsyun.baidu.com/index.php?titlejspopularGL/guide/geoloaction // 百度地图API功能 var map new BMap.Map(map)var point new BMap.Point(108.95, 34.27)map.centerAndZoom(point, 12)var geolocation new BMap.Geolocation()geolocation.getCurrentPosition(f…

Python常见基础数据结构

Python常见基础数据结构 字符串字符串的构造字符串是一种序列正向索引负向索引有限切片无限切片查询方法压缩方法替换方法格式化插入分割方法 列表列表构造列表同样属于序列列表的元素增加列表其他方法 元组字典字典的构造字典不属于序列字典可变 字符串 字符串的构造 • 单引…

Python神器解密:掌握property特性巧管理属性

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com property 是Python中的一个内置装饰器&#xff0c;它用于创建属性并允许开发者定义特定的操作&#xff0c;例如获取&#xff08;getter&#xff09;、设置&#xff08;setter&#xff09;和删除&#xff08;dele…

【强化学习】关于PPO、SAC算法中价值函数的一些胡思乱想

最近的一些关于强化学习中价值函数的一些想法&#xff0c;发在了知乎上&#xff0c;全文考过来调公式有点麻烦&#xff0c;就直接发链接算了。 https://zhuanlan.zhihu.com/p/600300791?utm_psn1712895542018043904 https://zhuanlan.zhihu.com/p/667868767?utm_psn17128948…

Vue中的过滤器了解吗?过滤器的应用场景有哪些?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-filter过滤器 目录 一、是什么 二、如何用 定义filter 小结&#xff1a; 三、应用场景 四…

苍穹外卖项目笔记(6)— Redis操作营业状态设置

1 在 Java 中操作 Redis 1.1 Redis 的 Java 客户端 Jedis&#xff08;官方推荐&#xff0c;且命令语句同 redis 命令&#xff09;Lettuce&#xff08;底层基于 Netty 多线程框架实现&#xff0c;性能高效&#xff09;Spring Data Redis&#xff08;对 Jedis 和 Lettuce 进行了…

c++ 共享内存

共享内存 一、查看所有的共享内存 (py37) hqnuc:~/tmp/hq$ ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 4 blueberry 600 524288 2 dest 0x000000…

力扣labuladong——一刷day54

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣1660. 纠正二叉树二、力扣100. 相同的树三、力扣572. 另一棵树的子树四、力扣101. 对称二叉树 前言 判断树是否相等&#xff0c;就直接遍历就可以。判断…

同为科技(TOWE)模块化定制化让每条PDU实现专属供电解决方案

作为追求最高功率和空间效率的动态数据中心的理想产品&#xff0c;模块化、定制化PDU是追求最高功率和空间效率的动态数据中心的理想产品。同为科技&#xff08;TOWE&#xff09;是我国PDU行业的开创者和领导者&#xff0c;曾率先于中国电源分配单元http://www.pdu.com.cn网站上…

机器学习实战第3天:手写数字识别

☁️主页 Nowl &#x1f525;专栏《机器学习实战》 《机器学习》 &#x1f4d1;君子坐而论道&#xff0c;少年起而行之 ​ 文章目录 一、任务描述 二、数据集描述 三、主要代码 &#xff08;1&#xff09;主要代码库的说明与导入方法 &#xff08;2&#xff09;数据预…

2023-11-28 C语言if语句多个||或 与的时时候,会顺序执行,不满足条件则退出,不会再比较后面的内容,实例测试

一、if(i > 0 || image(0) > 5)或者if(i > 0 && image(0) > 5)&#xff0c;C语言if语句多个||或 与&&的时时候&#xff0c;会顺序执行&#xff0c;不满足条件则退出&#xff0c;不会再比较后面的内容。 二、测试代码 #include <stdio.h> #i…

题目标题:汽水瓶 c语言

1.问题描述 有这样一道智力题&#xff1a;“某商店规定&#xff1a;三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶&#xff0c;她最多可以换多少瓶汽水喝&#xff1f;”答案是5瓶&#xff0c;方法如下&#xff1a;先用9个空瓶子换3瓶汽水&#xff0c;喝掉3瓶满的&#x…

成为网络安全高手!教你如何做出专业级别的渗透测试

01、信息收集 1、域名、IP、端口 域名信息查询&#xff1a;信息可用于后续渗透 IP信息查询&#xff1a;确认域名对应IP&#xff0c;确认IP是否真实&#xff0c;确认通信是否正常 端口信息查询&#xff1a;NMap扫描&#xff0c;确认开放端口 发现&#xff1a;一共开放两…

Linux CentOS_7解决无法上网的问题

参考视频&#xff1a;保姆式教学虚拟机联网liunx(centos)_哔哩哔哩_bilibili 第一步&#xff1a;选择网络模式 第二步&#xff1a;配置网卡命令&#xff1a;打开终端执行命令&#xff1a; 1、先切换到根目录下&#xff0c;防止在第执行cd /etc/sysconfig/network-scripts命的…