BeanWrapper(一)

简介: 其实这篇文章只是单纯的去了解关于 PropertyEditor 和 ConversionServer 的知识、并没有从源码详细说 Spring 怎么怎么去使用它们、这个可能放到以后的文章。这篇文章单纯是补全这个主题的基础知识、为后面继续看 Spring 的代码进行铺垫。

网络异常,图片无法展示
|

网络异常,图片无法展示
|

文章稍微有点儿长........


BeanWrapper 是 Spring 中比较重要的一个接口、我们在 Spring 获取单例流程(三) 中曾见过

网络异常,图片无法展示
|

网络异常,图片无法展示
|


PropertyDescriptor 我们在 Java 内省 有介绍过

网络异常,图片无法展示
|

我们先一个个的介绍它所继承的接口


PropertyEditorRegistry


要介绍 PropertyEditorRegistry 首先要介绍下 PropertyEditor。


PropertyEditor

俗称属性编辑器、原本只是在 GUI 中将字符串转换为 Java 对象的相应类型的、比如说、字符串转为数值、布尔类型。Spring 也在 JDK 原有的基础上扩展了不少属性编辑器。该类为 JDK 提供。

网络异常,图片无法展示
|

该接口非线程安全。


PropertyEditorSupport

PropertyEditor 的子类、JDK 提供。方便我们继承该基础类、可以方便的扩展属性编辑器。

网络异常,图片无法展示
|

可以看到、一些常见的属性编辑器都是继承于它。


PropertyEditorRegistry

再回到我们的属性编辑器注册器。Spring 提供。

网络异常,图片无法展示
|


主要就是给我们注册对应类型的属性编辑器。比如将 Charset 和 CharsetEditor 注册到这里。

网络异常,图片无法展示
|


PropertyEditorRegistrySupport

该类是继承 PropertyEditorRegistry 并在里面帮我们注册了一些常用的类型以及对应的属性编辑器

网络异常,图片无法展示
|


PropertyEditorRegistrar

属性编辑器登记员?

This is the central interface that a {@link PropertyEditorRegistrar} operates on.
复制代码

它是专门操作 PropertyEditorRegistry 的

public interface PropertyEditorRegistrar {
   /**
    * Register custom {@link java.beans.PropertyEditor PropertyEditors} with
    * the given {@code PropertyEditorRegistry}. 
    * <p>The passed-in registry will usually be a {@link BeanWrapper} or a
    * {@link org.springframework.validation.DataBinder DataBinder}.
    * <p>It is expected that implementations will create brand new
    * {@code PropertyEditors} instances for each invocation of this
    * method (since {@code PropertyEditors} are not threadsafe).
    * @param registry the {@code PropertyEditorRegistry} to register the
    * custom {@code PropertyEditors} with
    */
   void registerCustomEditors(PropertyEditorRegistry registry);
}
复制代码


ResourceEditorRegistrar

作为 PropertyEditorRegistrar 的唯一子类、它会在你注册属性编辑器注册器的时候为你注册上一些常用的资源相关的属性编辑器。

网络异常,图片无法展示
|


这个类在 ApplicationContext 的 refresh 的 prepareBeanFactory 中被创建赋值到 BeanFactory 中

网络异常,图片无法展示
|


而 org.springframework.beans.PropertyEditorRegistrar#registerCustomEditors 方法在每次创建 bean 的时候都会被调起。

网络异常,图片无法展示
|

protected void initBeanWrapper(BeanWrapper bw) {
   bw.setConversionService(getConversionService());
   registerCustomEditors(bw);// BeanWrapper 实现了 PropertyEditorRegistry 接口
}
复制代码



目录
相关文章
|
1月前
|
XML JavaScript Java
BeanFactory 和 FactoryBean的区别
本文介绍了Spring框架中的`BeanFactory`和`FactoryBean`。`BeanFactory`是Spring的核心接口,用于管理Bean的创建、配置及依赖注入。其实现包括`DefaultListableBeanFactory`和已废弃的`XmlBeanFactory`。`FactoryBean`则用于动态创建Bean实例,支持懒加载及AOP代理创建。文章还通过示例展示了如何实现一个`FactoryBean`,并通过测试验证其功能。最后附上了作者信息及版权声明。
BeanFactory 和 FactoryBean的区别
|
6月前
|
设计模式 Java Spring
BeanFactory与FactoryBean的区别
BeanFactory与FactoryBean的区别
|
XML Java 数据库连接
FactoryBean的使用~
FactoryBean的使用~
|
Java 开发者 Spring
BeanFactory和FactoryBean
BeanFactory和FactoryBean
92 0
|
Java Spring 容器
【Spring源码】 BeanFactory和FactoryBean是什么?
面试官:“看过Spring源码吧,简单说说Spring中BeanFactory和FactoryBean的区别是什么?”
17467 6
【Spring源码】 BeanFactory和FactoryBean是什么?
|
安全 Java Spring
BeanWrapper(三)
其实这篇文章只是单纯的去了解关于 PropertyEditor 和 ConversionServer 的知识、并没有从源码详细说 Spring 怎么怎么去使用它们、这个可能放到以后的文章。这篇文章单纯是补全这个主题的基础知识、为后面继续看 Spring 的代码进行铺垫。
139 0
|
安全 Java Spring
BeanWrapper(二)
其实这篇文章只是单纯的去了解关于 PropertyEditor 和 ConversionServer 的知识、并没有从源码详细说 Spring 怎么怎么去使用它们、这个可能放到以后的文章。这篇文章单纯是补全这个主题的基础知识、为后面继续看 Spring 的代码进行铺垫。
207 0
|
缓存 Java API
3. 搞定收工,PropertyEditor就到这(上)
3. 搞定收工,PropertyEditor就到这(上)
3. 搞定收工,PropertyEditor就到这(上)
|
搜索推荐 Java API
3. 搞定收工,PropertyEditor就到这(下)
3. 搞定收工,PropertyEditor就到这(下)
3. 搞定收工,PropertyEditor就到这(下)
|
XML JSON Java
Spring源码解析 - FactoryBean&&BeanFactory(上)
Spring源码解析 - FactoryBean&&BeanFactory
125 0
Spring源码解析 - FactoryBean&&BeanFactory(上)