Spring自定义属性编辑器CustomEfitorConfigurer

系统 1954 0

假设有如下两个类:

 

package  customerPropertyEditor;

public   class  Contact  ... {
  
private  PhoneNumber phoneNumber;

public  PhoneNumber getPhoneNumber()  ... {
    
return  phoneNumber;
}


public   void  setPhoneNumber(PhoneNumber phoneNumber)  ... {
    
this .phoneNumber  =  phoneNumber;
}

}



package  customerPropertyEditor;

public   class  PhoneNumber  ... {
  
private  String areaCode;
  
private  String prefix;
  
private  String number;
  
public  PhoneNumber() ... {
      
  }

  
public  PhoneNumber(String areaCode,String prefix,String number) ... {
      
this .areaCode = areaCode;
      
this .prefix = prefix;
      
this .number = number;
  }

public  String getAreaCode()  ... {
    
return  areaCode;
}

public   void  setAreaCode(String areaCode)  ... {
    
this .areaCode  =  areaCode;
}

public  String getNumber()  ... {
    
return  number;
}

public   void  setNumber(String number)  ... {
    
this .number  =  number;
}

public  String getPrefix()  ... {
    
return  prefix;
}

public   void  setPrefix(String prefix)  ... {
    
this .prefix  =  prefix;
}

public  String toString() ... {
    
return   this .getAreaCode() + " - " + this .getPrefix() + " - " + this .getNumber();
}

}

 我们想装配一个持久一个phoneNumber对象的contact,需要做如下配置

 

< bean  id ="phoneNumnber"  class ="......." >
     
< constructor-arg  index ="0" >
          
< value > 800 </ value >
    
</ constructor-arg >
  
< constructor-arg  index ="1" >
          
< value > 810 </ value >
    
</ constructor-arg >
  
< constructor-arg  index ="2" >
          
< value > 8181 </ value >
    
</ constructor-arg >
</ bean >

< bean  id ="contact"  class ="....." >
   
< property  value ="phoneNumber" >
      
< ref  bean ="phoneNumnber" />
  
</ property >
</ bean >

 

使用Spring提供的自定义属性编辑器功能(其实是spring支持java.beans.PropertyEditorSupport)

我们可以用这样的方式来装配contact

 

  < bean  id ="contact"  class ="customerPropertyEditor.Contact" >
   
< property  name ="phoneNumber" >
    
< value > 800-810-8181 </ value >
   
</ property >
 
</ bean >


是不是方便了许多呢?

首先我们需要自定一个属性编辑器,并返回一个装配好的PhoneNumnber对象

这里要类名命名规范,如果我们需要自定义编辑器操作的类名为PhoneNumber,我们编辑器类名就是PhoneNumberEditor

package  customerPropertyEditor;

import  java.beans.PropertyEditorSupport;

public   class  PhoneNumberEditor  extends  PropertyEditorSupport  ... {


    
public   void  setAsText(String text)  throws  IllegalArgumentException  ... {
        String stripped
= convertToNumberic(text);
        String areaCode
= stripped.substring( 0 , 3 );
        String prefix
= stripped.substring( 3 , 6 );
        String number
= stripped.substring( 6 );
        PhoneNumber phoneNumber
= new  PhoneNumber(areaCode,prefix,number);
        setValue(phoneNumber);
        
    }

    
public  String convertToNumberic(String str) ... {
        StringBuffer buffer
= new  StringBuffer();
        
for ( int  i = 0 ;i < str.length();i ++ ) ... {
            
char  c = str.charAt(i);
            
if (Character.isDigit(c)) ... {
                buffer.append(c);
            }

        }

        
return  buffer.toString();
    }


}

 

接下来,在spring配置文件中注册自定义编辑器

注意CustomEfitorConfigurer特别容易写成CustomerEfitorConfigurer

  < bean  id ="customEditorConfigurer"  class ="org.springframework.beans.factory.config.CustomEditorConfigurer" >
   
< property  name ="customeEditors" >
     
< map >
       
< entry  key ="customerPropertyEditor.PhoneNumber" >
         
< bean  id ="phoneNumberEditor"  class ="customerPropertyEditor.PhoneNumberEditor" />
       
</ entry >
     
</ map >
   
</ property >
 
</ bean >

 

测试代码:

 

package  customerPropertyEditor;

import  java.io.File;
import  org.springframework.beans.factory.BeanFactory;
import  org.springframework.beans.factory.xml.XmlBeanFactory;
import  org.springframework.core.io.FileSystemResource;

public   class  TestCustomerPropertyEditor  ... {
    
public   static   void  main(String[] args)  ... {
        String filePath
= System.getProperty( " user.dir " ) + File.separator + " customerPropertyEditor " + File.separator + " hello.xml " ;    
        BeanFactory factory
= new  XmlBeanFactory( new  FileSystemResource(filePath));            
        Contact contact
= (Contact)factory.getBean( " contact " );
        System.out.println(contact.getPhoneNumber());
    }

}

 

运行结果:

800-810-8181



Spring自定义属性编辑器CustomEfitorConfigurer使用实例


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论