<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 啥都寫點 閱讀(175) 評論(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久久精品国产免费一区| 国产一区二区三区亚洲综合 | 亚洲av纯肉无码精品动漫| 亚洲今日精彩视频| 国产亚洲AV手机在线观看| 在线观着免费观看国产黄| 欧洲乱码伦视频免费| 一区二区三区四区免费视频| 国产va免费精品| 美女免费精品高清毛片在线视| 亚洲综合色婷婷在线观看| 亚洲精品免费在线视频| 亚洲国产精品自在在线观看| 久久精品国产亚洲7777| 亚洲A∨午夜成人片精品网站 | 精品在线免费视频| 亚洲欧美日韩一区二区三区| 亚洲国产成人精品青青草原| 亚洲性色高清完整版在线观看| 2048亚洲精品国产| 亚洲精品成人久久久| 国产又黄又爽又刺激的免费网址 | 亚洲宅男永久在线| 久久精品国产精品亚洲艾| 亚洲乱码一区二区三区在线观看| 亚洲人成影院在线观看| 亚洲日韩在线中文字幕第一页| 可以免费观看的一级毛片| 国产一级做a爱免费视频| 国产精品无码免费视频二三区| 成人黄动漫画免费网站视频| 最近2019中文字幕免费看最新 | 亚洲激情中文字幕| 亚洲精品国产成人| 亚洲春黄在线观看| 国产精品高清视亚洲精品| 亚洲不卡影院午夜在线观看| 亚洲午夜一区二区三区| 亚洲成a∨人片在无码2023 |