Cyh的博客

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

          屬性編輯器 公共注入

          Posted on 2009-02-16 19:46 啥都寫點 閱讀(170) 評論(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"/>



                                                                                                                 --    學海無涯
                  

          主站蜘蛛池模板: 杭州市| 客服| 通化县| 崇信县| 文山县| 贺州市| 浮梁县| 西盟| 郓城县| 开阳县| 海伦市| 武隆县| 库车县| 富川| 青冈县| 光泽县| 伊宁市| 灌云县| 德化县| 安顺市| 岑溪市| 昌黎县| 永宁县| 寿光市| 吉林省| 平山县| 宝鸡市| 孝昌县| 东辽县| 武山县| 三亚市| 家居| 龙州县| 包头市| 谢通门县| 阜宁县| 大关县| 孟村| 盱眙县| 永安市| 通江县|