• Spring自定义属性编辑器PropertyEditorSupport + 使用CustomEditorConfigurer注册属性编辑器


    1、通过继承JDK 中的 java.beans.PropertyEditorSupport 类来实现自己的编辑器类 ,该类用于实现将String 类型转换成您需要的数据类型。然后我们只需要在Spring 的容器中对这个编辑器进行有效的“注册”便可以实现Spring 在装配Bean 时自动的将String 类型转换成我们自定义的类型。


    如何编辑自己的PropertyEditor,其实需要了解一点java.beans包的知识,在该包中,有一个 java.beans.PropertyEditor的接口,它定义了一套接口方法(12个),即通过这些方法如何将一个String变成内部的一个对 象,这两个方法是比较重要的: 
         a)setValue(Object value) 直接设置一个对象
         b)setAsText(String text) 通过一个字符串来构造对象,一般在此方法中解析字符串,将构造一个类对象,调用setValue(Object)来完成属性对象设置操作。 
      
      2)实现所有的接口方法是麻烦的,java.beans.PropertyEditorSupport 适时登场,一般情况下,我们通过扩展这个方便类即可。


    2、CustomEditorConfigurer 类 用于实现在Spring 中注册自己定义的编辑器 。它是Spring 当中一个非常有用的工厂后处理类(工厂后处理通过Spring 的BeanFactoryPostProcessor 接口实现, 它是在Spring 容器启动并初始化之后进行对Spring 容器的操作类)。在Spring 中已经注册了不少编辑器类,他们都用于String 类型转换为其他的数据类型,如URL,Date等。


    配置CustomEditorConfigurer 类:

          CustomEditorConfigurer 类中有一个customEditor属性,它是一个Map 类型。通过配置它便实现了自定义的编辑器注册。这个Map 的键值对对应着转换类型和编辑器(转换类型是Key,编辑器是Value)。


    自定义编辑器可以简化Spring 的装配Bean。使其更加的简单。不容易发生配置错误。 PS:如果使用Spring 的ApplicationContext容器,那么只需在Spring 的配置文件中进行简单的装配,而对于Bean 工厂可能需要手动的注册才能使用。

     

    Java代码  收藏代码
    1. //User.java  
    2.   
    3. public class User {  
    4.    private String name;  
    5.    private int age;  
    6.    。。。  
    7. }  
     
    Java代码  收藏代码
    1. //用到User的类:UserContainer.java  
    2.   
    3. public class UserContainer {  
    4.   
    5. private User user;  
    6.   
    7. public void setUser(User user) {  
    8.    this.user = user;  
    9. }  
    10.   
    11. public void printUser() {  
    12.    System.out.println(user.getName() + " " + user.getAge());  
    13. }  
    14. }  
     
    Java代码  收藏代码
    1. //将配置中的转换的类:TransformUser.java  
    2.   
    3. public class TransformUser extends PropertyEditorSupport {  
    4.   
    5.  public void setAsText(String text) {  
    6.     String[] data = text.split(",");  
    7.     User user = new User();  
    8.     user.setName(data[0]);  
    9.     user.setAge(Integer.parseInt(data[1]));  
    10.     this.setValue(user);  
    11.   }  
    12. }  
     
    Java代码  收藏代码
    1. 在applicationContext.xml文件中。  
    2.   
    3. <bean id="user" class="User" />  
    4. <bean id="transformUser" class="TransformUser"/>  
    5.   
    6. <bean id="userContainer" class="UserContainer">  
    7.      <property name="user" value="liming,23"></property>  
    8. </bean>  
    9.   
    10. <bean id="configBean"   class="org.springframework.beans.factory.config.CustomEditorConfigurer">  
    11.    <property name="customEditors">  
    12.     <map>  
    13.        <entry key="User">  <!-- 属性类型 -->    
    14.              <bean class="TransformUser"/>  <!--对应Address的编辑器 -->    
    15.        </entry>  
    16.     </map>  
    17.    </property>  
    18. </bean>  
    19.   
    20. 将liming,23这种格式的转换成User类。  

    例子1:http://www.iteye.com/topic/24660

    例子2:http://gundumw100.iteye.com/blog/574440

  • 相关阅读:
    今天刚开通博客,很开心
    ZYNQ双核AMP开发详解(USE_AMP -DUSE_AMP=1 含义和作用详解)
    赛灵思机器学习套件(ML Suite) v1.4 DPU, DNNK
    petalinux add pre-build application to rootfs compile faliure solution
    如何用SDK生成device tree
    Zynq UltraScale+ MPSoC device tree 中 CCF中 clock output数字映射表
    Zynq ZC702平台 QSPI + eMMC实现
    Zynq ZC702平台 Linux + Baremetal AMP实现(一)【快速启动CPU1】
    第五章 任务执行
    第四章 闭锁
  • 原文地址:https://www.cnblogs.com/chenying99/p/2505397.html
Copyright © 2020-2023  润新知