Spring自定义属性编辑器

     自定义属性编辑器必须继承 PropertyEditorSupport 类,实现其中的setAsText()方法,将字面值转换为属性类型的对象,再调用setValue()方法,设置转置后的属性对象。

publicclassCustomCarEditorextendsPropertyEditorSupport{

@Override

publicvoidsetAsText(Stringtext)throwsIllegalArgumentException{

System.out.println("调用setAsText()方法");

if(text==null||text.indexOf(",")==-1){

thrownewIllegalArgumentException();

}

String[]infos=text.split(",");

Carcar=newCar();

car.setBrand(infos[0]);

car.setMaxSpeed(Integer.parseInt(infos[1]));

car.setPrice(Double.parseDouble(infos[2]));

//调用父类的setValue方法设置转换后的属性对象

setValue(car);

}

}

 

 <!-- 配置属性编辑器 -->

<beanclass="org.springframework.beans.factory.config.CustomEditorConfigurer">

<propertyname="customEditors">

<map>

<!--定义一个属性编辑器-->

<entry>

<!--属性编辑器对应的属性类型-->

<key><value>com.Spring.PropertyEditor.Car</value></key>

<!--对应的属性编辑器Bean-->

<beanclass="com.Spring.PropertyEditor.CustomCarEditor"></bean>

</entry>

</map>

</property>

</bean>

<beanid="boss"class="com.Spring.PropertyEditor.Boss">

<propertyname="name"value="John"></property>

<!--使用上面的属性编辑器完成属性填充操作-->

<propertyname="car"value="宝马,200,200000"></property>

</bean>

</beans>

public class PropertyEditor {

publicstaticvoidmain(String[]args){

ApplicationContextcxt=newClassPathXmlApplicationContext("com/Spring/PropertyEditor/bean.xml");

Bossboss=(Boss)cxt.getBean("boss");

boss.say();

}

}

    CustomEditorConfigurer是实现了BeanFactoryPostProcessor接口的类,因此是一个Bean工厂后处理器,所以在容器启动后有机会注入自定义的属性编辑器。

    自定义属性编辑器不常用,一般可以通过引用即<ref>其他的Bean即可,但是有时候比较复杂的情况下,会需要将属性对象一步步肢解为最终可用基本类型表示的Bean,反而会很糟糕,这时可以使用自定义属性编辑器,在setAsText()方法中将字面值转化为属性类型对象。

相关推荐