关于在Spring中注册自定义的PropertyEditor

考虑下面两个类:

ExoticType:

package document.six.test;

public class ExoticType {
	private String name;

	public ExoticType(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}

DpendsOnExoticType:

package document.six.test;

public class DependsOnExoticType {
	private ExoticType type;

	public void setType(ExoticType type) {
		this.type = type;
	}

	public ExoticType getType() {
		return type;
	}
}

再配置一下Spring的xml

	<bean id="sample" class="document.six.test.DependsOnExoticType">
		<property name="type" value="aNameForExoticType" />
	</bean>

再写一个测试方法:

package document.six.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringTest {

	public static void main(String args[]) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"springMVC.xml");
		DependsOnExoticType sample = (DependsOnExoticType) ctx
				.getBean("sample");
		System.out.println(sample.getType().getName());
	}
}

输出结果为:

aNameForExoticType

看看上面的xml文件,我们为DependsOnExoticType的type属性设置了一个String,它却自动的转换成了ExoticType对象

关键在于ExoticType的构造函数,因为它有一个带String参数的构造函数

若想要改变默认的PropertyEditor,可以添加自定义的来覆盖它。在添加时可以使用一个自动检测的机制:也就是需要遵照一定的规则

具体的规则是:PropertyEditor类和标准的 JavaBeans在同一个包下,并且他们PropertyEditor的类名是JavaBeans的类名加上“Editor”,比如:

public class ExoticTypeEditor extends PropertyEditorSupport {
	public void setAsText(String text) {
		setValue(new ExoticType(text.toUpperCase()));
	}
}

可以看到这个PropertyEditor就是遵照了以上的命名规则,并且和ExoticType放在同一个包中,所以无需额外的配置就可以得到下面的输出:

ANAMEFOREXOTICTYPE

那么若没有符合以上规则的话,怎么办呢?可以通过org.springframework.beans.factory.config.CustomEditorConfigurer这个Bean来注册

为这个Bean配置customEditors属性,该属性是一个Map,将我们需要注册的PropertyEditors都注入到这个Map里就可以了:

	<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="document.six.test.ExoticType" value="document.six.test.ExoticType2Editor" />
			</map>
		</property>
	</bean>
时间: 2024-08-30 05:14:17

关于在Spring中注册自定义的PropertyEditor的相关文章

【转】在Mac和iOS中注册自定义的URL Scheme

在Mac和iOS中注册自定义的URL Scheme JAN 10TH, 2012 URL Scheme是类似http://,ftp://,afp://这样的东西,通常是用传输协议作为URL Scheme.不过事实上,你可以在iOS和Mac中注册任何类型的URL Scheme.当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求. 要在程序中注册自定义URL Scheme非常简单.主要分为两个步骤:在程序的Info.plist中加入你需要注册的UR

spring中增加自定义配置支持

spring.schemas 在使用spring时,我们会首先编写spring的配置文件,在配置文件中,我们除了使用基本的命名空间http://www.springframework.org/schema/beans之外,我们还会用到多种其他命名空间,每一种命名空间还有一个对应的xsd文档. 比如springmvc的http://www.springframework.org/schema/mvc对应http://www.springframework.org/schema/mvc/spring

spring bean注册之bean工厂方式

一般我们在spring中注册一个bean,直接 <bean id="websocket" class="com.sdyy.common.spring.websocket.WebsocketEndPoint"/> 这样会用WebsocketEndPoint的构造方法(这种是无参),为我们创建一个对象bean. ----------------------------分界线-------------------------------------------

spring配置自定义的PropertyEditor

在项目开发过程中,总会有这样那样由于格式转换带来的问题.如:money精确度的处理,这个应该在电商中非常常见.日期格式的处理,几乎是所有开发过程遇到的.本文通过介绍java.beans.PropertyEditor 复习一下. PropertyEditor .PropertyEditorSupport 在上层是一个Property的简单接口,仅仅定义了setValue setAsText等几个非常简单的接口.后面通过PropertyEditorSupport来做了一些实现.最常用的方法也就是se

Spring Boot 中关于自定义异常处理的套路!

在 Spring Boot 项目中 ,异常统一处理,可以使用 Spring 中 @ControllerAdvice 来统一处理,也可以自己来定义异常处理方案.Spring Boot 中,对异常的处理有一些默认的策略,我们分别来看. 默认情况下,Spring Boot 中的异常页面 是这样的: 我们从这个异常提示中,也能看出来,之所以用户看到这个页面,是因为开发者没有明确提供一个 /error 路径,如果开发者提供了 /error 路径 ,这个页面就不会展示出来,不过在 Spring Boot 中

Spring boot中普通工具类不能使用@Value注入yml文件中的自定义参数的问题

在写一个工具类的时候,因为要用到yml中的自定义参数,使用@Value发现值不能正常注入,都显示为null: yml文件中的自定义格式 调用工具类的时候不能new的方式 要使用@Autowired的方式注入进来, new会导致部分环境未加载,尽可能舍弃new的方式,交付spring管理 而工具类也是需要交给spring管理.需要在工具类上加上 @Component注解然后注意一下的是 在springframework下不能@Autowired静态变量 所以在变量上不能有 static 怎么扫描注

spring boot中注册拦截器

拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式.在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作. 如何在spring boot中添加拦截器? 1.首先自己实现一个拦截器 import org.springframework.web.ser

Spring——往容器中注册组件的方法总结

1.通过配置类的包扫描(@Configuration @ComponentScan)+给组件标注注解(@Component @Service @Controller...) 2.通过@Bean在配置类中加入组件 特点:使用第三方组件时可以不用更改第三方代码. 3.@Import 1)在配置类中使用@Import可以直接导入组件,容器会自动注册,id默认全类名 2)ImportSelect:实现这个接口,通过接口提供的selectImports方法返回并注册全类名数组中的类,再给容器中注册Impo

润乾报表设计器中使用 spring 框架实现自定义数据集

spring是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.在 web 开发环境中经常会与 struts.hibernate联合起来使用,进行规范的框架结构开发.润乾中的二次开发也可以与 SSH 框架相结合部署到 web 项目中.本文介绍在设计时没有启动 web 服务,在设计器中使用 spring 的方式来实现自定义数据集. 实现思路:编写两个自定义数据集,一个在设计器中使用,一个在 web 项目中使用,在设计器中使用的类需要编写临时加载 spring 框架配置文件的代码,启动 spr