<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    屬性編輯器 公共注入

    Posted on 2009-02-16 19:46 啥都寫點 閱讀(167) 評論(0)  編輯  收藏 所屬分類: J2EE

    1、 spring的普通屬性注入

    參見:spring文檔3.3章節

    當有日期的時候 private Data d;

    轉換不了,報錯,需要自己編寫屬性編輯器

    例:

      

    import java.beans.PropertyEditorSupport;

    public class UtilDatePropertyEditor extends PropertyEditorSupport {

        private String format="yyyy-mm-dd";

       

        //復寫setAsText方法

        publicvoid setAsText(String arg0) throws IllegalArgumentException {

          

           System.out.println("UtilDataPropertyEditor.saveAsText()--text"+arg0);

          

           SimpleDateFormat sdf = new SimpleDateFormat(format);

           try {

               Date d = sdf.parse(arg0);

               this.setValue(d);

           } catch (ParseException e) {

               // TODO Auto-generated catch block

               e.printStackTrace();

                }

     }

    }

    //寫完后需要注冊,配置在SPRING配置文件中(注入)

        <bean id="customEditorConfigurer" class="org.springframework.bean.factory.config.CustomEditorConfigurer">

           <property name="customEditors">

              <map>

                 <entry key="java.util.Date">

                   <bean class="com.bjsxt.spring.UtilDatePropertEditor">

    <!-- 

    <property name=”format” value=”yyyy/mm/dd” />

    -->

    </bean>

                 </entry>

              </map>

           </property>

        </bean>

         <!--

         <bean id="utilDatePropertyEditor" class="com.bjsxt.spring.UtilDatePropertEditor"></bean>

    -->

    什么是屬性編輯器,作用:

    *自定義屬性編輯器,spring配置文件中的字符串轉換成相應的對象進行注入

    Spring已經有內置的屬性編輯器,我們可以根據需求自己定義屬性編輯器

    *如何定義屬性編輯器?

    *集成PropertyEditorSupport類,覆寫setAsText()方法,參見:UtilDatePropertyEditor.java

    *將屬性編輯器注冊到spring中,參見:applicationContext-editor.xml

            依賴對象的注入方式,可以采用:

    * ref屬性

    * <ref>標簽

    *內部<bean>來定義

     Spring提供的其他定制編輯器包括:
      ClassEditor—使用包含全稱類名的字符串設置java.lang.
         Class的屬性。
      CustomDateEditor—使用某種 java.text.DateFomat 對
         象將一個字符串設置給 java.util.Date 屬性。                                          
      FileEditor—使用包含文件路徑的字符串設置java.io.File
         的屬性。
      StringArrayPropertyEditor—將一個包含逗號的String
         轉換成String數組屬性。
      StringTrimmerEditor—自動修正字符串屬性,可以選
         擇將空字符轉變成null。 
     
    一個屬性編輯器的簡單示例:
      
      Contact類:

    public class Contact {
       
    private  PhoneNumber   phonenumber;
       
    public void doSomething() {
       System.out.println(phonenumber);
       }


    …..省略getter 、setter方法
    }

    PhoneNumber類:

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

        
    public void getName() {
        System.out.println(
    this.areaCode+this.prefix+this.number);
        }

    }

    編輯器類:

    public class PhoneEditor extends PropertyEditorSupport {
       
    private String stripNonNumberic(String original) {
    StringBuffer allNumberic 
    = new StringBuffer();   
       
    for (int i = 0; i < original.length(); i++{
       
    char c = original.charAt(i);
       
    if(Character.isDigit(c)){
       allNumberic.append(c);
          }

     }

       
    return allNumberic.toString();
       }

    public void setAsText(String text) throws IllegalArgumentException {

    String  stripped 
    = stripNonNumberic(text);
    String areaCode 
    = stripped.substring(0,3).replace("4""f");
    String prefix 
    = stripped.substring(3,6).replace("6""g");
    String number 
    = stripped.substring(6,7);
    PhoneNumber phone 
    = new PhoneNumber(areaCode,prefix,number);
    setValue(phone);
          }

    }

    applicationContext.xml中的配置

     <bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
       
    <property name="customEditors">
         
    <map>
           
    <entry key="com.spring.propertyeditor.PhoneNumber">
             
    <bean class="com.spring.propertyeditor.PhoneEditor">
             
    </bean>
           
    </entry>
           
    <entry key="java.util.Date">
              
    <bean class="com.spring.propertyeditor.UtilDatePropertyEditor"></bean>
           
    </entry>
         
    </map>
       
    </property>
    </bean>
     
    <bean id="contact" class="com.spring.propertyeditor.Contact">
       
    <property name="phonenumber">
         
    <value>4564679879412135464546</value>
       
    </property>
       
    <property name="date">
         
    <value>1986-04-11</value>
       
    </property>
     
    </bean>

    測試類代碼:

    public static void main(String[] args) {
    ApplicationContext ac 
    = new ClassPathXmlApplicationContext
                                                                            (
    "applicationContext-propertyeditor.xml");

       Contact con 
    = (Contact)ac.getBean("contact");

        con.getPhonenumber().getName();

    }


    運行結果:f564g79


         
      

    如何將公共的注入定義描述出來?

       *通過<bean>標簽定義公共的屬性,指定abstract=true

       *具有相同屬性的類在<bean>標簽中指定其parent屬性

    參加:applicationContext-other.xml

        <bean id="beanAbstract" abstract="true">

           <property name="id" value=""/>

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

        </bean>

        <bean id="bean3" class="" parent="beanAbstract">

           <property name="password">

           <value></value>

           </property>

        </bean>

     <bean id="" class="" parent="beanAbstract"/>



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 国产精品免费_区二区三区观看 | 亚洲国产模特在线播放| 国产91色综合久久免费分享| 亚洲欧洲精品成人久久曰| 亚洲精品成人久久久| 亚洲电影免费在线观看| 亚洲成熟丰满熟妇高潮XXXXX| 国产国拍亚洲精品福利| 一色屋成人免费精品网站| 免费国产在线精品一区| 337p日本欧洲亚洲大胆艺术| 国产成人精品免费直播 | 一二三四免费观看在线电影| 黄页免费视频播放在线播放| 亚洲视频在线视频| 天天摸夜夜摸成人免费视频| 国产特黄一级一片免费 | av无码久久久久不卡免费网站 | 亚洲最大免费视频网| 一级特黄录像视频免费| 亚洲国产午夜电影在线入口| 亚洲午夜日韩高清一区| 久久天天躁狠狠躁夜夜免费观看 | 香蕉成人免费看片视频app下载| 亚洲精华国产精华精华液好用 | 在线免费观看视频你懂的| 182tv免费视频在线观看| 国产精品日本亚洲777| 亚洲第一永久在线观看| 亚洲一区二区三区偷拍女厕 | 免费A级毛片无码视频| 成人国产网站v片免费观看| 亚洲AV无码一区二区三区在线| 国精无码欧精品亚洲一区| 亚洲国产成人五月综合网| 欧美最猛性xxxxx免费| 在线免费观看亚洲| 久久久精品免费国产四虎| 人碰人碰人成人免费视频| 精品亚洲av无码一区二区柚蜜| 久久精品国产亚洲αv忘忧草 |