zoukankan      html  css  js  c++  java
  • Spring中的属性编辑器的使用

    Spring中的属性编辑器的使用
    转载自 http://blog.sina.com.cn/s/blog_59ca2c2a0100jxwh.html


     Struts中用一个类型转换器,在Spring中也有类似的功能,叫做属
     性编辑器,用于将spring配置文件中配置的字符串转换为Action中相应的类型。
    

    这里有一个普通的JavaBean,代码如下:

    package cn.com.huixin.spring;
    import java.util.Date;
    import java.util.List;
    import java.util.Map;
    public class Bean1 {
     private String stringValue;
     private List list1;
     private Map map1;
     private String[] array;
     private Date birthday;
     public Date getBirthday() {
      return birthday;
     }
     public void setBirthday(Date birthday) {
      this.birthday = birthday;
     }
     public String getStringValue() {
      return stringValue;
     }
     public void setStringValue(String stringValue) {
      this.stringValue = stringValue;
     }
     public List getList1() {
      return list1;
     }
     public void setList1(List list1) {
      this.list1 = list1;
     }
     public Map getMap1() {
      return map1;
     }
     public void setMap1(Map map1) {
      this.map1 = map1;
     }
     public String[] getArray() {
      return array;
     }
     public void setArray(String[] array) {
      this.array = array;
     }
    }
      里边有几个属性需要使用spring注入。前边的四个属性注入都没有 问题,只有后边的Date型的属性注入时会出错,提示类型不匹配。从 
     spring配置文件中出过来的都是String型的字符串值,而Bean中是
     一个Date类型的值,这个属性就需要我们提供一个属性编辑器来完成类型转换工作。
    
    • 首先创建一个属性编辑器,该类需要继承

      java.beans.PropertyEditorSupport类,代码如下所示:

    package cn.com.huixin.editor;
    import java.beans.PropertyEditorSupport;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    public class DatePropertyEditor extends PropertyEditorSupport {
     private String format = "yyyy-MM-dd";
     public String getFormat() {
      return format;
     }
     public void setFormat(String format) {
      this.format = format;
     }
     @Override
     public void setAsText(String text) throws IllegalArgumentException {
      SimpleDateFormat dateFormat = new SimpleDateFormat(format);
      Date date = null;
      try {
       date = dateFormat.parse(text);
      } catch (ParseException e) {
       e.printStackTrace();
      }
      this.setValue(date);
     }
    }
    该类中有一个String型的format属性,为日期格式,并为它提供的
       法用于进行类型转换。参数text为从spring配置文件中获得的字符串值。使用SimpleDateFormat对象将其转换为Date对象后,调用
    setValue()方法将转换后的对象放入value对象中。
    接下来配置applicationContext.xml文件,代码如下所示:
    
    <?xml version="1.0" encoding="UTF-8"?>
     <!--
      - Application context definition for JPetStore's business layer. -
      Contains bean references to the transaction manager and to the DAOs in
      - dataAccessContext-local/jta.xml (see web.xml's
      "contextConfigLocation").
     -->
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
     xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     <bean id="bean1" class="cn.com.huixin.spring.Bean1">
      <property name="stringValue" value="stringValue1" />
      <property name="list1">
       <list>
        <value>listValue1</value>
        <value>listValue2</value>
        <value>listValue3</value>
       </list>
      </property>
      <property name="map1">
       <map>
        <entry key="mapkey1" value="mapValue1" />
        <entry key="mapkey2" value="mapValue2" />
       </map>
      </property>
      <property name="array">
       <list>
        <value>arrayValue1</value>
        <value>arrayValue2</value>
       </list>
      </property>
      <property name="birthday" value="2010-07-24"/>
     </bean>
    </beans>
     这个文件中对Bean1种的各属性注入了值。接下来再提供一个
     applicationContext-propertyEditor.xml文件,专门用于属性编辑器的配置,代码如下所示:
    
    <?xml version="1.0" encoding="UTF-8"?>
    <!--
      - Application context definition for JPetStore's business layer.
      - Contains bean references to the transaction manager and to the DAOs in
      - dataAccessContext-local/jta.xml (see web.xml's "contextConfigLocation").
      -->
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     <bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
      <property name="customEditors">
       <map> 
        <entry key="java.util.Date">
         <bean class="cn.com.huixin.editor.DatePropertyEditor">
          <property name="format" value="yyyy-MM-dd"/>
         </bean> 
        </entry>
       </map>
      </property>
     </bean>
    </beans>
     该文件中实例化了一个  org.springframework.beans.factory.config.CustomEditorCon
     figurer的对象,该类中有一个名为customEditors的Map对象,
     在该对象中添加了一个键值对,key属性值为java.util.Date,即
     类型转换的目标类型,value属性值为
     cn.com.huixin.editor.DatePropertyEditor,即我们编写的
     属性编辑器,这个类用来进行类型转换。在
     cn.com.huixin.editor.DatePropertyEditor类中有一个名为
     format的属性值,即日期格式,这里我们也对它进行了注入。到目前
     为止,我们的属性编辑器就编写好了,下来写一个类进行测试。测试
     代码如下所示:
    
    package cn.com.huixin.test;
    import org.springframework.beans.factory.BeanFactory;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    import cn.com.huixin.spring.Bean1;
    import junit.framework.TestCase;
    public class BeanInject extends TestCase {
     private BeanFactory factory;
     @Override
     protected void setUp() throws Exception {
      factory = new ClassPathXmlApplicationContext("applicationContext*.xml");
     }
     public void testBean() {
      Bean1 bean1 = (Bean1) factory.getBean("bean1");
      System.out.println(bean1.getStringValue());
      System.out.println(bean1.getList1());
      System.out.println(bean1.getMap1());
      System.out.println(bean1.getArray());
      System.out.println(bean1.getBirthday());
     }
    }
    首先通过ClassPathXmlApplicationContext对象加载了以
    applicationContext开头的xml文件,获得一个BeanFactory对
    象,然后调用该对象的getBean()方法就可以获得为属性注入的值。
    运行的结果为:
    
    stringValue1
    [listValue1, listValue2, listValue3]
    {mapkey1=mapValue1, mapkey2=mapValue2}
    [Ljava.lang.String;@1982fc1
    Sat Jul 24 00:00:00 CST 2010

    说明我们的值注入成功。

  • 相关阅读:
    同node上,两个pod通过svc访问不通
    Prometheus基于service自动添加监控
    systemd 服务管理编写
    kubernetes 控制器详解【持续完善中】
    tcpdump抓包工具
    Zabbix日志监控插件
    Spring WebFlux之HttpHandler的探索
    知秋源码解读分享系列
    Spring Framework 5.0.0.M3中文文档 翻译记录 Part I. Spring框架概览1-2.2
    Spring Framework 5.0.0.M3中文文档 翻译记录 introduction
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457636.html
Copyright © 2011-2022 走看看