Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器...
1、通过继承JDK 中的 java.beans.PropertyEditorSupport 类来实现自己的编辑器类 ,该类用于实现将String 类型转换成您需要的数据类型。然后我们只需要在Spring 的容器中对这个编辑器进行有效的“注册”便可以实现Spring 在装配Bean 时自动的将String 类型转换成我们自定义的类型。
如何编辑自己的PropertyEditor,其实需要了解一点java.beans包的知识,在该包中,有一个 java.beans.PropertyEditor的接口,它定义了一套接口方法(12个),即通过这些方法如何将一个String变成内部的一个对 象,这两个方法是比较重要的:
a)setValue(Object value) 直接设置一个对象
b)setAsText(String text) 通过一个字符串来构造对象,一般在此方法中解析字符串,将构造一个类对象,调用setValue(Object)来完成属性对象设置操作。
2)实现所有的接口方法是麻烦的,java.beans.PropertyEditorSupport 适时登场,一般情况下,我们通过扩展这个方便类即可。
2、CustomEditorConfigurer 类 用于实现在Spring 中注册自己定义的编辑器 。它是Spring 当中一个非常有用的工厂后处理类(工厂后处理通过Spring 的BeanFactoryPostProcessor 接口实现, 它是在Spring 容器启动并初始化之后进行对Spring 容器的操作类)。在Spring 中已经注册了不少编辑器类,他们都用于String 类型转换为其他的数据类型,如URL,Date等。
配置CustomEditorConfigurer 类:
CustomEditorConfigurer 类中有一个customEditor属性,它是一个Map 类型。通过配置它便实现了自定义的编辑器注册。这个Map 的键值对对应着转换类型和编辑器(转换类型是Key,编辑器是Value)。
自定义编辑器可以简化Spring 的装配Bean。使其更加的简单。不容易发生配置错误。 PS:如果使用Spring 的ApplicationContext容器,那么只需在Spring 的配置文件中进行简单的装配,而对于Bean 工厂可能需要手动的注册才能使用。
- //User.java
- public class User {
- private String name;
- private int age;
- 。。。
- }
- //用到User的类:UserContainer.java
- public class UserContainer {
- private User user;
- public void setUser(User user) {
- this.user = user;
- }
- public void printUser() {
- System.out.println(user.getName() + " " + user.getAge());
- }
- }
- //将配置中的转换的类:TransformUser.java
- public class TransformUser extends PropertyEditorSupport {
- public void setAsText(String text) {
- String[] data = text.split(",");
- User user = new User();
- user.setName(data[0]);
- user.setAge(Integer.parseInt(data[1]));
- this.setValue(user);
- }
- }
- 在applicationContext.xml文件中。
- <bean id="user" class="User" />
- <bean id="transformUser" class="TransformUser"/>
- <bean id="userContainer" class="UserContainer">
- <property name="user" value="liming,23"></property>
- </bean>
- <bean id="configBean" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
- <property name="customEditors">
- <map>
- <entry key="User"> <!-- 属性类型 -->
- <bean class="TransformUser"/> <!--对应Address的编辑器 -->
- </entry>
- </map>
- </property>
- </bean>
- 将liming,23这种格式的转换成User类。
例子1:http://www.iteye.com/topic/24660
例子2:http://gundumw100.iteye.com/blog/574440
转载于:https://www.cnblogs.com/chenying99/archive/2012/05/16/2505397.html
Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器...相关推荐
- 【Spring 基础篇三】属性注入与属性编辑器
上篇我们了解了一下applicationContext.xml的两种注入方式,本篇我们来了解一下关于属性的注入以及操作. 在敲代码的过程中,我们很容易遇到这样的问题,比如一个Lis ...
- Spring - Java/J2EE Application Framework 应用框架 第 4 章 属性编辑器,数据绑定,校验与BeanWeapper(Bean封装)
第 4 章 属性编辑器,数据绑定,校验与BeanWeapper(Bean封装) 4.1. 简介 是否需要对业务逻辑进行验证是一个常见的问题. 有关这一点存在两种截然想法的回答,Spring提出的验证模 ...
- 【Java基础】属性编辑器PropertyEditor
在Spring配置文件里,我们往往通过字面值为Bean各种类型的属性提供设置值:不管是double类型还是int类型,在配置文件中都对应字符串类型的字面值.BeanWrapper填充Bean属性时如何 ...
- 如何实现自定义的属性编辑器
1.自定义一个实现了PropertyRegisterSuppor接口的编辑器 2.让spring感知到自己定义的编辑器:自定义个一个属性编辑器的注册器,实现PropertyEditeRegister接 ...
- VCL (三) 属性编辑器
Delphi的属性是一个很有特色的功能,这一特性在C#里得到了很好的继承. 对于一个类来说,属性是对类中的数据进行有效修改和访问的特殊接口.在VCL中,被published 的属性还有一个特性,就是可 ...
- 计算机注册表管理,如何打开计算机注册表编辑器
如何打开计算机注册表编辑器?我们可以单击"开始-运行",或按住计算机左下角的Win键(Tianzi键)并同时按R键以打开运行窗口,在运行窗口中输入regedit,确定,打开注册表编 ...
- Spring自定义属性编辑器及原理解释.md
bean的自动装配解释 手动解决方式 自动注入解决方式 bean的自动装配解释 之前有构造注入和设值注入,但是也是手动的 autowire ="byname" 这里要注意自动装配的 ...
- 【Spring】—-常用属性注入及属性编辑器(三)
对于对象的注入,我们使用ref方式,可以指定注入的对象,下面看下属性的注入,以及当spring无法转换基本类型进行注入时,如何编写一个类似转换器的东西来完成注入. [属性注入] 常见属性的注入:int ...
- Spring——自定义属性编辑器+Bean的生存范围+Bean的生命周期
一.自定义属性编辑器(一个类): 步骤: 1.写一个类,这个类继承PropertyEditorSupport. 2.重写setAsText()方法. 3.在bean.xml文件中添加属性编辑器的bea ...
最新文章
- IOS反汇编工具Hopper分析Crash Log
- 文本超出显示省略号/数字英文字母折行有关css 属性/显示两行,第二行省略号显示css方法...
- flask_restplus的fields中怎么定义字典_Quora | 成功的定义是什么?
- Java ResultSet如何检查是否有任何结果
- cve-2019-1821 思科 Cisco Prime 企业局域网管理器 远程代码执行 漏洞分析
- 移动应用开发必备工具盘点
- Spring - 父容器与子容器
- kibana操作elasticsearch:创建映射字段
- python窗口化编程_python程序的窗口化
- js如何设置浏览器全屏效果?
- [Tools 之]online bookmark 在线书签
- Github上点赞最多的10个Python项目(2020年3月)
- 微软 CTO 韦青:5G 与亚里士多德
- 更换jdk版本_滴滴夜莺发布 v3 版本,从运维监控演化成了运维平台
- python2.3嵌套if结构:
- chown: 无效的用户: hadoop-3.1.4_Ubuntu 21.04 用户主目录权限将14年来首次变更及新功能预览...
- golang:goredis库pipeline使用方式
- docker--镜像
- iOS 11 发布!巨大进步、里程碑式飞跃!
- 黑白照片怎么上色?学会这招轻松解决
热门文章
- JBoss日志文件配置
- 互联网工作原理(17.网络电视是如何工作的)
- leetcode算法题--Magical String
- acwing算法题--完全背包问题
- flannel源码分析--WatchLeases
- 沙溪理工学校计算机,学雷锋树新风——沙溪理工学校计算机部开展学雷锋活动...
- ubuntu下eclipse的svn插件使用javahl
- who,cut,diff,which,whereis,locate,updatedb 命令的使用
- DatagridView内容自动换行和换行符换行
- JS调用PageOffice接口,删除Word表格中光标所在行