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
分享到:
相关推荐
3. 在你的代码中,你可以通过`import java.beans.*;`引入所需类和接口。 使用`openbean.jar`和`java.beans`包可以帮助你在Android应用中实现一些高级功能,例如动态属性操作、事件处理和XML序列化。但是,需要注意...
import java.beans.*; public class BeanConverter { public static <T> T convert(Map, String> parameters, Class<T> clazz) throws Exception { T bean = clazz.getDeclaredConstructor().newInstance(); ...
`java.beans.EventSetDescriptor` 描述了一个事件集,而 `java.beans.PropertyChangeEvent` 和 `java.beans.VetoableChangeEvent` 分别表示属性变化和可取消的变化事件。 4. **Listener**: 通过监听器接口,可以...
java.beans包主要包含了四个主要组件:BeanInfo、PropertyDescriptor、PropertyEditor和VetoableChangeSupport。其中,BeanInfo是JavaBean的元数据,PropertyDescriptor用来描述JavaBean的属性,PropertyEditor用来...
合适研究底层研发员,但,一般程序员也必须掌握的要点 JDK研究系列--java.beans
轻巧,快速的java.beans.Introspector重新实现,用于消除对Bean Introspection的java.desktop模块的依赖。 问题 JDK 9中引入的模块封装了Java标准库中的所有AWT,Swing,Image和Sound软件包。 除此之外,它还包含带...
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包,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...
由于它与AWT和Swing紧密依赖,因此无法轻易将其从java.desktop模块中删除,从而导致任何使用java.beans包的第三方库都依赖于所有java.desktop类。 java.desktop模块的额外开销使JVM安装增加了12mb的大小,并增加了...
org.springframework.beans-sources-3.0.5.release.jar
org.springframework.beans-3.0.0.M4.jar
org.springframework.beans-3.1.0.M2
//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` 是Spring框架中的一个重要组件,主要负责处理配置文件中的占位符替换。这个类是Spring在初始化bean时用来解析和注入环境变量或系统属性...
2019-03-1823:19:27[org.springframework.beans.factory.support.DefaultListableBeanFactory]-[INFO]Destroyingsingletonsinorg.springframework.beans.factory.support.DefaultListableBeanFactory@33dd66fd:...
org.springframework.beans-3.1.0.RELEASE.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的jar包下载,请安心使用。
中文版,平时开发超...java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 ......
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) ... 38 more Caused by: java.lang.ClassNotFoundException: ...