`
layznet
  • 浏览: 226207 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java.beans.PropertyEditor与CustomEditorConfigurer

阅读更多
java.beans.PropertyEditor从名称看是属性编辑器,可用来将字符串值转换成指定类型的对象。有两个主要的方法:
void setValue(Object value);
void setAsText(String text);

一般不直接实现PropertyEditor接口,而是继承自PropertyEditor的一个实现类java.beans.PropertyEditorSupport简化工作,在子类覆盖setAsText方法是实现字符串到对象的转换工作,setValue方法一般不直接使用,在setAsText方法中将字符串进行转换并产生目标对象以后,由setAsText调用setValue来把目标对象注入到编辑器中。当然,你可用覆盖更多的方法来满足你的特殊要求。JavaBean的类和接口,被大部分spring包使用,可以从spring中学习更成熟的JavaBean使用方法。

示例分两部分,先演示PropertyEditor的简单实用,再演示Spring的org.springframework.beans.factory.config.CustomEditorConfigurer用法。

定义User.java类:
public class User {
	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	@Override
	public String toString(){
		return name+" : "+age;
	}
}

User.java的属性编辑器类UserPropertyEditor.java:
import java.beans.PropertyEditorSupport;
public class UserPropertyEditor extends PropertyEditorSupport{
	
	@Override
	public void setAsText(String text){
		String[] sts = text.split(",");
		User user = new User();
		user.setName(sts[0]);
		user.setAge(Integer.parseInt(sts[1]));
		
		setValue(user);
	}
}

测试类:
public class PropertyEditorDemo {

	public static void main(String[] args) {
		UserPropertyEditor upe = new UserPropertyEditor();
		upe.setAsText("Ellison,60");
                  //getValue()方法返回setAsText方法转换的User实例
		System.out.println(upe.getValue());
	}
}

结果输出:Ellison : 60
=====================
org.springframework.beans.factory.config.CustomEditorConfigurer可以读取实现PropertyEditor接口的类,并按其中的实现将字符串转换成指定类型对象。
新建一个类HelloBean.java
public class HelloBean {
	private User user;
	
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
}

Bean定义文件config.xml:
<?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="helloBean" class="test.HelloBean">
 		<property name="user" value="Gosling,59" />
 	</bean>
   
   <bean id="editorConfig" class="org.springframework.beans.factory.config.CustomEditorConfigurer" >
   	  <property name="customEditors">
   	  	<map>
   	  	    <entry key="test.User">
   	  		<bean class="test.UserPropertyEditor"/>
   	  	    </entry>
   	  	</map>
   	  </property>
   </bean>
   
</beans> 

CustomEditorConfigurer的属性customEditors是Map类型,Map的key表示遇到哪一个类型时要使用PropertyEditor,value表示对应要使用的PropertyEditor实现类。

测试类:
public class PropertyEditorDemo {
	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("test/config.xml");
		HelloBean hb = (HelloBean)ctx.getBean("helloBean");
		System.out.println(hb.getUser());
	}
}

结果输出:Gosling : 59
分享到:
评论

相关推荐

    openbean.jar AndroidStudio 导入java.beans.*

    3. 在你的代码中,你可以通过`import java.beans.*;`引入所需类和接口。 使用`openbean.jar`和`java.beans`包可以帮助你在Android应用中实现一些高级功能,例如动态属性操作、事件处理和XML序列化。但是,需要注意...

    Java反射中java.beans包学习总结.docx

    import java.beans.*; public class BeanConverter { public static &lt;T&gt; T convert(Map, String&gt; parameters, Class&lt;T&gt; clazz) throws Exception { T bean = clazz.getDeclaredConstructor().newInstance(); ...

    java.beans.*

    `java.beans.EventSetDescriptor` 描述了一个事件集,而 `java.beans.PropertyChangeEvent` 和 `java.beans.VetoableChangeEvent` 分别表示属性变化和可取消的变化事件。 4. **Listener**: 通过监听器接口,可以...

    Java反射中java.beans包学习总结

    java.beans包主要包含了四个主要组件:BeanInfo、PropertyDescriptor、PropertyEditor和VetoableChangeSupport。其中,BeanInfo是JavaBean的元数据,PropertyDescriptor用来描述JavaBean的属性,PropertyEditor用来...

    JDK研究系列--》java.beans

    合适研究底层研发员,但,一般程序员也必须掌握的要点 JDK研究系列--java.beans

    java-beans-lite:轻量级且快速的java.beans.Introspector实现

    轻巧,快速的java.beans.Introspector重新实现,用于消除对Bean Introspection的java.desktop模块的依赖。 问题 JDK 9中引入的模块封装了Java标准库中的所有AWT,Swing,Image和Sound软件包。 除此之外,它还包含带...

    JAVA API官方中文版手册chm文件文档

    JAVA API官方文档中文版软件包 java.applet java.awt java.awt.color ...java.beans.beancontext java.io java.lang java.lang.annotation java.lang.instrument java.lang.management java.lang.ref

    org.springframework.beans-3.0.5工程所需jar包

    org.springframework.beans-3.0.5工程所需jar包,com.springsource.net.sf.cglib-2.2.0.jar、 com.springsource.org.apache.commons.logging-1.1.1.jar、 javax.inject.jar、 javax.servlet.jsp.jar、 org.spring...

    lite-beans:LiteBeans是基于Apache Harmony项目的java.beans包的实现。

    由于它与AWT和Swing紧密依赖,因此无法轻易将其从java.desktop模块中删除,从而导致任何使用java.beans包的第三方库都依赖于所有java.desktop类。 java.desktop模块的额外开销使JVM安装增加了12mb的大小,并增加了...

    org.springframework.beans-sources-3.0.5.release.jar

    org.springframework.beans-sources-3.0.5.release.jar

    org.springframework.beans-3.0.0.M4.jar

    org.springframework.beans-3.0.0.M4.jar

    org.springframework.beans-3.1.0.M2

    org.springframework.beans-3.1.0.M2

    openbeans1.0.zip

    //import java.beans.BeanInfo; //import java.beans.IntrospectionException; //import java.beans.Introspector; //import java.beans.PropertyDescriptor; import com.googlecode.openbeans.BeanInfo; import ...

    org.springframework.beans.factory.config.PropertyPlaceholderConfigurer

    `org.springframework.beans.factory.config.PropertyPlaceholderConfigurer` 是Spring框架中的一个重要组件,主要负责处理配置文件中的占位符替换。这个类是Spring在初始化bean时用来解析和注入环境变量或系统属性...

    org.springframework.beans-3.1.0.RELEASE.jar

    org.springframework.beans-3.1.0.RELEASE.jar

    java.lang.UnsupportedClassVersionError问题解决

    2019-03-1823:19:27[org.springframework.beans.factory.support.DefaultListableBeanFactory]-[INFO]Destroyingsingletonsinorg.springframework.beans.factory.support.DefaultListableBeanFactory@33dd66fd:...

    spring-beans.jar

    org.springframework.beans-2.5.5.A.jar, org.springframework.beans-2.5.6.A.jar, org.springframework.beans-2.5.6.SEC01.jar, org.springframework.beans-3.0.0.M1.jar, ...org.springframework.beans.jar

    org.springframework.beans-3.0.0.CI-331.jar

    org.springframework.beans-3.0.0.CI-331.jar的jar包下载,请安心使用。

    JAVA_API1.8中文文档(CHM版).rar

    中文版,平时开发超...java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 ......

    resolver_java_wsdl.jar

    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) ... 38 more Caused by: java.lang.ClassNotFoundException: ...

Global site tag (gtag.js) - Google Analytics