定制属性解析器
1、JavaBean的接口java.beans.PropertyEditor提供将字符串映射成非String类型的方法(其直接实现类为PropertyEditorSupport):
1)、getText( ):返回一个属性值的字符串
2)、setAsText(String text):将传递进来的字符串赋给Bean的属性
2、Spring提供了几个建立在PropertyEditorSupport之上的定制编译器:
1)URLEditor:将字符串与java.net.URL 相互转换
2)ClassEditor:使用包含全称类名的字符串设置java.lang.Class属性
3)CustomDateEditor:使用某种java.text.DateFormat对象将字符串设置给java.util.Date属性
4)FileEditor:使用包含文件路径的字符串设置java.io.File属性
5)LocalEditor:使用包含地域性息(如:en_US)的字符串设置java.util.Local属性
6)StringArrayPropertyEditor:将一个包含逗号的String转换成String数组属性
7)StringTrimmerEditor:自动修正字符串属性,可选择将字符串转变成null
3案例分析:
cn.csdn.service. AddressServiceImpl
package cn.csdn.service;
public class AddressServiceImpl {
private String address;
private String code;
private String tel;
省略了set和get方法…
}
cn.csdn.service. EmpServiceImpl
package cn.csdn.service;
public class EmpServiceImpl {
/** 姓名 */
private String name;
/** 职位 */
private String title;
/** 家庭住址 */
private AddressServiceImpl homeAddress;
/** 公司地址 */
private AddressServiceImpl companyAddress;
省略了set和get方法…
}
cn.csdn.editer. AddressEditer
package cn.csdn.editer;
import java.beans.PropertyEditorSupport;
import cn.csdn.service.AddressServiceImpl;
public class AddressEditer extends PropertyEditorSupport{
@Override
public void setAsText(String text) throws IllegalArgumentException {
if(text!=null&&!text.trim().equals("")){
System.out.println(text);
String str[]=text.split("-");
if(str.length>2){
AddressServiceImpl asi=new AddressServiceImpl();
asi.setAddress(str[0]);
asi.setCode(str[1]);
asi.setTel(str[2]);
setValue(asi);
}
}
setValue(null);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<!-- 定义一个自定义编译器 -->
<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
<property name="customEditors">
<map>
<entry key="cn.csdn.service.AddressServiceImpl">
<bean class="cn.csdn.editer.AddressEditer"></bean>
</entry>
</map>
</property>
</bean>
<bean id="empServiceImpl" class="cn.csdn.service.EmpServiceImpl" scope="singleton">
<property name="name"><value>kouxiaolin</value></property>
<property name="title"><value>student</value></property>
<!—一般写法-->
<property name="homeAddress">
<bean class="cn.csdn.service.AddressServiceImpl">
<property name="address"><value>保定</value></property>
<property name="code"><value>071000</value></property>
<property name="tel"><value>15530232157</value></property>
</bean>
</property>
<!-- 采用 自定义的属性编译器解析-->
<property name="companyAddress">
<value>衡水-073000-15530232157</value>
</property>
</bean>
</beans>
分享到:
相关推荐
2. SAX解析器:SAX解析器采用事件驱动的方式,逐行读取XML文档,当遇到元素、属性等结构时触发相应的事件。这种方式适用于处理大型XML文档,因为它不需要一次性加载整个文档,节省了内存资源,但需要编写更多的事件...
2. 属性解析:提取XML元素的属性值。 3. 名空间处理:处理XML文档中的名空间声明和引用。 4. 文档对象建模:创建并维护一个表示XML文档的对象模型。 5. 事件驱动解析:对于SAX风格的解析器,触发事件如开始文档、...
当解析器遇到XML文档中的元素、属性等时,会触发相应的事件回调,而不会将整个文档加载到内存。 3. **XML Schema支持**:Xerces-J支持XML Schema,允许对XML文档进行结构化验证,确保其符合预定义的模式规范。 4. ...
在C++中,构建DOM树意味着解析器会逐行读取HTML源代码,解析标签、属性和内容,并将其转化为内存中的对象结构。这种解析方式的优点在于可以方便地通过节点关系遍历整个文档,但缺点是可能会消耗大量内存,因为整个...
在C或C++环境中,处理JSON数据时,我们往往需要一个高效的解析器。`cpp-jsonparser`就是这样一个库,它是一个用可移植的ANSI C编写的JSON解析器,特别强调了低内存占用。 该解析器的设计目标是简洁和高效,使得...
"Android-AndroidRichText富文本解析器支持网络图片图片和链接点击事件"这个项目专注于提供一种高效且功能丰富的解决方案来处理富文本内容。富文本解析器允许开发者在应用中展示不仅仅是纯文本,还可以包括格式化...
在本例中,我们讨论的是一个名为"htmlgo"的特定解析器,很可能它是由Go编程语言实现的。Go语言以其简洁的语法和高效的性能在开发网络相关工具时被广泛使用。 HTML解析器的工作原理通常分为几个关键步骤: 1. **...
简易XML解析器是针对XML文档进行读取、解析和操作的工具,通常用于处理XML数据并将其转换为程序可理解的形式。 在提供的文件中,我们可以看到以下几个关键组成部分: 1. **xCfgParser.cpp**:这是解析器的主要实现...
嵌入式XML解析器是专为有限资源的设备或系统设计的一种...这也有助于定制解析器以满足特定需求,如优化内存使用、增加新特性或处理特定的XML子集。总的来说,这是一个深入理解XML解析机制并提升软件工程技能的好机会。
《.NET平台C#源码属性生成器深度解析》 在.NET开发环境中,C#语言以其简洁、高效和丰富的库支持成为了许多开发者的首选。在实际项目开发中,特别是涉及到数据库交互的应用,开发者往往需要频繁地创建与数据库字段...
在Spring框架中,属性编辑器(PropertyEditor)是一种强大的工具,允许我们自定义类型转换过程。当我们需要将字符串形式的数据转换为Java对象时,属性编辑器就发挥了关键作用。例如,从请求参数或配置文件中读取的...
总之,Rust的`proc-macro`属性解析器是Rust元编程能力的一个重要方面,它使我们能够扩展语言,创建定制的代码生成规则。通过理解和应用这些概念,开发者可以创建出强大且灵活的库,提高代码的可维护性和效率。
在嵌入式系统中,由于资源限制,往往需要轻量级且高效的XML解析器。"minixml"就是这样一个专为嵌入式系统设计的开源XML解析器,它提供DOM(Document Object Model)支持,使得开发者能够方便地处理XML文档。 mini...
### Expat XML解析器概述 Expat是一个用C语言编写的XML解析库,最初是作为开源项目,归属于Mozilla项目的一部分。它由著名的XML专家James Clark创建,他也是groff、Jade、XP(一个Java XML解析器包)、XT(一个Java ...
标题提到的“swift-模型属性生成器”就是这样一种工具,它可以根据网络请求的数据自动生成相应的模型属性,使代码更加简洁、规范。 首先,我们要理解这个工具的核心功能:根据JSON数据结构,自动生成Swift中的...
由于文件数量少,开发者可以很容易地阅读和理解整个解析器的工作原理,这对于调试和定制非常有利。 MarkupSTL的设计理念是基于STL(Standard Template Library),这是C++标准库的一部分,提供了高效且灵活的数据...
这款解析器提供了源代码,使得开发者能够深入理解其内部工作原理,并可以根据需求进行定制或扩展。在Delphi编程环境中,正则表达式是一种强大的文本处理工具,可以用来进行复杂的字符串匹配、搜索、替换等操作。 ...
下面将详细解析Ant中的"target"属性及其相关知识。 首先,Ant脚本通常以`<project>`元素开始,其中包含了多个`<target>`元素。每个`<target>`都代表了一个特定的构建阶段,比如编译、测试、打包或者部署。`<target>...
在这个过程中,解析器会处理嵌套标签、闭合标签、注释和实体引用等。 5. **错误容忍性**:HTML解析器通常具有一定的错误容忍度,这意味着即使HTML代码不完全符合规范,解析器也会尝试理解并展示内容。这是为了适应...