源代码计划 Spring 5.6 源码解析【三】

如何自定义属性的扩展

在我们定义的标签当中试想一下有没有这样的需求,在一个标签内部不需要通过其他 bean 的引用就可以完成,内部属性对象的赋值操作呢?

例如这样:

java 复制代码
public static void main(String[] args) {
    ClassPathXmlApplicationContext application = new ClassPathXmlApplicationContext("editor.xml");
    Customer customer = application.getBean(Customer.class);
    System.out.println(customer);
}
xml 复制代码
<bean id="customer" class="com.peppa.selfEditor.Customer"
    <property name="address" value="彗星星球_灰星星_宅博士"/
    <property name="name" value="卡卡罗特"/
</bean

这就是今天要介绍的关于 refresh 方法当中的 prepareBeanFactory 准备 beanFactory 上下文方法当中的 addPropertyEditorRegistrar 添加属性编辑注册器的主要功能。

以及我们如何实现一个自定义的 addPropertyEditorRegistrar 注册器。

在 addPropertyEditorRegistrar 当中可以看到实现 PropertyEditorRegistrar 接口下的 registerCustomEditors(PropertyEditorRegistry registry) 的方法,该方法当中有一个 PropertyEditorRegistry 编辑对象。

那么该 registerCustomEditors(PropertyEditorRegistry registry) 方法到底是在什么时候调用,完成属性编辑器的注册呢?

前面的一些列流程当中以及完成了, beanDefinition 的简单注册,而接下来主要就是要将先前注册的这些 beanDefinition 分别的进行实例化,当然在实例化的前后还有 前置 和 后置 的一些处理。既然是研究编辑器的具体实现,那还是以核心为主。关于前置后置的处理这里会暂时跳过。

那就直接进入 finishBeanFactroyInitialization(beanFactory) 当中去研究具体关于普通 bean 的处理大致流程,以及如何实现编辑器的调用处理。

开始具体的实例化工作

可以看到的是这里在先前在 xml 配置文件当中定义了两个 bean 实例 beanDefinition 对象。这里也将对其一一的进行遍历实例化处理。

这里需要特别注意一下 org.springframework.beans.factory.config.CustomEditorConfigurer#0

CustomEditorConfigurer 就是我们自定义的属性编辑器后续要进行添加的配置类入口。

开始实例化 Customer 并填充属性,在 doCurentBean 当中有一个 BeanWrapper 对象实例化的包装器对象。

这里将开始调用 registerCustomEditors 注册自定义编辑器

相关推荐
小蒜学长8 分钟前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
我的div丢了肿么办2 小时前
go语言中管道 channel的使用
后端·go
Harvil_2 小时前
模型点三道菜,回喂被拒 400
后端
松就是我902982 小时前
如何设计多Agent
后端
高频因子挖掘机2 小时前
盘中筛选要同时看价格和盘口?按需分层比“一次全拿”更好维护
后端·github·api
asong2 小时前
从写代码到部署上线,Cloudflare 给 AI 配了一把新钥匙
前端·javascript·后端
RobinDevNotes2 小时前
PagedAttention原理,KV缓存也能分页
人工智能·后端
卷无止境2 小时前
当AI写代码遇见Rust为什么会卡壳
后端·python
Percy_kk2 小时前
Django的CRUD映射
后端·django
用户EasyAdminBlazor2 小时前
Blazor Server 性能优化实战:Circuit、数据库、Redis 与并发
后端