spring的属性编辑器

简介:
我们知道,spring在为我们进行动态创建对象过程中,给我们提供了一系列用于处理Java对象变量类型的属性标签,如<value>,<list>,<set>,<map>,<props>和<prop>等,但是对于一些较为复杂的变量类型,spring不会也无法提供,如java.util.Date,这就要求我们利用属性编辑器自行处理。以Date为例:
 
1>.编写目标类:Student.java
public  class Student { 
   private Date birthday; 
     //setter.getter方法 
}
 
2>.编写属性编辑器:DateEditor.java
public  class DateEditor  extends PropertyEditorSupport { //必须继承PropertyEditorSupport 
  @Override 
   public  void setAsText(String text)  throws IllegalArgumentException { //text是从配置文件中取得的字符串 
     try { 
      SimpleDateFormat format= new SimpleDateFormat( "y-m-d"); 
      Date date=format.parse(text); 
      setValue(date);  //setValue()是从父类继承来的方法,作用是把生成的date对象设置到目标类中    
    }  catch (ParseException e) { 
      e.printStackTrace(); 
    } 
  } 
}
 
3>.配置文件:test.xml
< beans > 
   < bean  id ="editor"  class ="org.springframework.beans.factory.config.CustomEditorConfigurer" > 
     < property  name ="customEditors" > 
       < map > 
         < entry > 
           < key > < value >java.util.Date </ value > </ key ><!-- 目标类型--> 
           < bean  id ="myEditor"  class ="com.cernet.spring.editor.DateEditor" /> 
         </ entry > 
       </ map > 
     </ property > 
   </ bean >    
   < bean  id ="student"  class ="com.cernet.spring.editor.Student" > 
     < property  name ="birthday" > 
       < value >1988-08-08 </ value > 
     </ property > 
   </ bean > 
</ beans >
 
4>.测试类:Test.java
public  static  void main(String[] args) { 
    ApplicationContext ctx= new ClassPathXmlApplicationContext( "test.xml"); 
    Student stu=(Student)ctx.getBean( "student"); 
    System.out.println(stu.getBirthday());
 
运行结果:Fri Jan 08 00:08:00 CST 1988
 
说明:
     1.在整个过程中,我们需要做的只是定义属性编辑器并配置到文件中,对编辑器的使用是由spring类完成的。所以,属性编辑器的应用并不是想象中的那么难。
     2.它的运行过程是这样的:在创建ctx之前(ApplicationContext采用饿汉式加载对象),创建Student对象时,spring发现需要注入的变量birthday是Date类型的并且本身没有提供处理此类型数据的标签,于是容器会到配置文件中查找合适的编辑器。当它发现myEditor合适时,就交给了我们编写的com.cernet.spring.editor.DateEditor来进行处理。
     3.注意BeanFactory是不支持属性编辑器的。



     本文转自NightWolves 51CTO博客,原文链接:http://blog.51cto.com/yangfei520/244989 ,如需转载请自行联系原作者
相关文章
|
4月前
|
存储 Java 数据安全/隐私保护
|
29天前
|
XML Java 数据格式
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
这篇文章是Spring5框架的实战教程,主要介绍了如何在Spring的IOC容器中通过XML配置方式使用外部属性文件来管理Bean,特别是数据库连接池的配置。文章详细讲解了创建属性文件、引入属性文件到Spring配置、以及如何使用属性占位符来引用属性文件中的值。
Spring5入门到实战------7、IOC容器-Bean管理XML方式(外部属性文件)
|
2月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。
|
3月前
|
XML druid Java
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
Spring5系列学习文章分享---第二篇(IOC的bean管理factory+Bean作用域与生命周期+自动装配+基于注解管理+外部属性管理之druid)
42 0
|
14天前
|
Java Spring 开发者
Spring 框架配置属性绑定大比拼:@Value 与 @ConfigurationProperties,谁才是真正的王者?
【8月更文挑战第31天】Spring 框架提供 `@Value` 和 `@ConfigurationProperties` 两种配置属性绑定方式。`@Value` 简单直接,适用于简单场景,但处理复杂配置时略显不足。`@ConfigurationProperties` 则以类级别绑定配置,简化代码并更好组织配置信息。本文通过示例对比两者特点,帮助开发者根据具体需求选择合适的绑定方式,实现高效且易维护的配置管理。
28 0
|
16天前
|
缓存 Java 数据库连接
Spring Boot 资源文件属性配置,紧跟技术热点,为你的应用注入灵动活力!
【8月更文挑战第29天】在Spring Boot开发中,资源文件属性配置至关重要,它让开发者能灵活定制应用行为而不改动代码,极大提升了可维护性和扩展性。Spring Boot支持多种配置文件类型,如`application.properties`和`application.yml`,分别位于项目的resources目录下。`.properties`文件采用键值对形式,而`yml`文件则具有更清晰的层次结构,适合复杂配置。此外,Spring Boot还支持占位符引用和其他外部来源的属性值,便于不同环境下覆盖默认配置。通过合理配置,应用能快速适应各种环境与需求变化。
26 0
|
3月前
|
运维 Java 测试技术
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
Spring运维之boo项目表现层测试加载测试的专用配置属性以及在JUnit中启动web服务器发送虚拟请求
36 3
|
3月前
|
运维 Java 关系型数据库
Spring运维之boot项目bean属性的绑定读取与校验
Spring运维之boot项目bean属性的绑定读取与校验
42 2
|
3月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
38 1
|
2月前
|
搜索推荐 C#
XAF 属性编辑器(PropertyEditor)- 原理篇
XAF Blazor 的 PropertyEditor 在 DEV 24.1.3 中经历了重大改进,更接近 WinForm。PropertyEditor 担任业务逻辑与各平台交互的角色,利用 INotifyPropertyChanged 监听属性变化。新版本弃用了 ComponentAdapter,代之以接口和基类,简化自定义编辑器的创建,降低了复杂度,同时增加了 ComponentModel 的 ComponentType 属性以自动化组件渲染和属性映射。这使得 Blazor 的 PropertyEditor 创建变得更为简便。