`
Riddick
  • 浏览: 642242 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Spring自定义类型注入

阅读更多
当函数的字段类型是int型等普通类型或集合类型时,Spring已经内置了属性编辑器,用来把配置文件中的字符串转换成相应的类型为相对应的类型注入值.同时,程序员也可以自己编写属性编辑器,来实现把字符型变量转换成日期型或自定义类型.
首先,设计一个培训机构类AttributeEditor,代码如下:
import java.util.Date
public class AttributeEditor {
   private Date dateValue;
   
   public Date getDateValue() {
      return dateValue;
   }

   public void setDateValue(Date dateValue) {
      this.dateValue = dateValue;
   } 
}

接着,设计一个测试类UtilDatePropertyEditor,代码如下:
import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class UitlDatePropertyEditor extends PropertyEditorSupport {
   private String format = "yyyy-MM-dd";   //定义固定字符串格式
   //重写父类方法
   public void setAsText(String text) 
              throws IllegalArgumentException{
      SimpleDateFormat sdf = new SimpleDateFormat(format);
      try {
         Date date = sdf.parse(text);   //获取时间信息
           this.setValue(date);
      } catch(ParseException) {
         e.printStackTrace();
      }
   }

   public void setFormat(String format) {
      this.format = format;
   }
}


Junit测试代码如下:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import junit.framework.TestCase;
public class TestAttrEditor extends TestCase {
   private BeanFactory factory;

   //重写父类方法
    protected void setup() throws Exception {
      factory = new ClassPathXmlApplicationContext             ("applicationContext.xml");
   }

   public void testInjection() {
      AttributeEditor ae = (AttributeEditor)factory.getBean("attributEditor");
      System.out.println("bean.dateValue = " + ae.getDateValue());
   }
}

其中,Spring配置文件applicationContext.xml配置如下:
<bean id="customEditorConfigurer"
      class="org.springframework.beans.factory.config.CustomEditorConfigurer">
   <property name="customEditors">
      <map>
         <entry key="java.util.Date">
            <bean class=".../UtilDatePropertyEditor">
               <!--设置时间格式-->
               <property name="format" value="yyyy-MM-dd">
            </bean>
         </entry>
      </map>
   </property>
</bean>
<!--创建对象attributeEditor-->
<bean id="attributeEditor" class=".../AttributeEditor">
   <property name="dateValue">
      <value>2009-12-01</value>
   </property>
</bean>


说明:属性编辑器类UtilDatePropertyEditor中,首先要继承PropertyEditorSupport,
该类在包java.bean.PropertyEditorSupport中.接着要覆盖类PropertyEditorSupport中的setAsText方法,该方法中就是实现类型转换的具体代码。因为setAsText没有返回值,所以把SImpleDateFormat的返回值传入到PopertyEditorSupport方法的setValue方法中.

编写完属性编辑器后,就要把该属性编辑器注入到IOC容器中,如下面代码:
<bean id="customEditorConfigurer"
      class="org.springframework.beans.factory.config.CustomEditorConfigurer">
   <property name="customEditors">
      <map>
         <entry key="java.util.Date">
            <bean class=".../UtilDatePropertyEditor">
               <!--设置时间格式-->
               <property name="format" value="yyyy-MM-dd">
            </bean>
         </entry>
      </map>
   </property>
</bean>

首先要把自己编写的属性编辑器注入到org.springframework.beans.factory.config.CustomEditorConfigurer中,查看API文档,可以得到如下定义:
public class CustomEditorConfigurer() {
   private Map customEditors;

   public void setCustomEditors(Map customEditors) {
      this.customEditors = customEditors;
   }

   public Map getCustomEditors() {
      return customEditors;
   }
}

从上面两段代码可以看出,属性编辑器被注入到CustomEditorConfigurer方法的customEditors中,同时要注意customEditors是Map集合类型.














分享到:
评论

相关推荐

    Spring 自定义注解注入properties文件的值jar包

    Spring 自定义注解注入properties文件的值jar包,下面为使用方法 在xml配置文件中,这样加载properties文件 ...

    自定义依赖注入工具类SpringUtil.java

    自定义依赖注入工具类SpringUtil.java

    Spring 自定义注解的解析

    总的来说,Spring自定义注解的解析是一个强大且灵活的工具,可以帮助我们实现更精细化的代码组织和控制。结合`@ComponentScan`,我们可以轻松地在Spring环境中管理和利用自定义注解,进一步提升代码的可读性和可维护...

    Spring三种注入方式(三)

    接口注入在Spring中并不常用,通常出现在使用AOP(面向切面编程)或者自定义的依赖注入场景。这种方式是通过实现特定的接口,由Spring在运行时动态调用接口方法注入依赖。Spring没有内置的接口注入机制,但可以通过...

    springsecurity2 自定义filter实现

    在Spring Security框架中,自定义过滤器是实现特定安全需求的一种常见方式。Spring Security的核心功能是通过一系列的Filter链来处理HTTP请求,这些Filter包括认证、授权等关键操作。本篇我们将深入探讨如何在Spring...

    spring-集合注入、自定义转换器

    集合注入允许我们在Spring配置中将一组对象注入到单个bean属性中,这些对象通常以集合类型(如List、Set、Map等)存在。这样做的好处是可以方便地管理多个依赖项,而无需为每个依赖项创建单独的bean。 例如,假设...

    spring自定义编辑器

    ### Spring自定义编辑器详解 #### 一、引言 在Spring框架中,自定义编辑器主要用于处理数据类型的转换问题,特别是在将用户输入的数据转换为Java对象时非常有用。例如,用户通过表单提交了一个日期格式的字符串,...

    利用Spring Context上下文创建自定义对象

    在Spring框架中,Spring Context上下文是核心组件之一,它为开发者提供了强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)功能。本篇文章将深入探讨如何利用Spring ...

    自定义 Schema 解析 Spring Bean

    Spring框架通过依赖注入(DI)和面向切面编程(AOP)等特性,简化了应用程序的构建和管理。本篇文章将聚焦于“自定义Schema解析Spring Bean”这一主题,这是一项高级功能,允许开发者扩展Spring的XML配置能力,以...

    Spring自定义配置文件便签[Maven]工程可运行

    这个名为"Spring自定义配置文件便签[Maven]工程可运行"的项目,显然是一个基于Maven构建的Spring 5.0应用程序,它包含了自定义配置文件和标签的实现。让我们深入探讨一下这些概念及其在实际应用中的作用。 首先,...

    Spring_Spring_教程8_注入_复杂类型的注入

    本教程将专注于Spring中的复杂类型注入,包括集合、自定义类以及接口实现的注入。 一、依赖注入的基本概念 依赖注入是Spring的核心特性之一,其基本思想是,一个对象不应该负责查找它的依赖,而应该由外部容器(如...

    这一次搞懂Spring自定义标签以及注解解析原理说明

    本篇文章将深入探讨Spring如何处理这两种类型的元数据。 首先,让我们来理解Spring如何解析自定义标签。在Spring的XML配置中,除了内置的标签(如`&lt;bean&gt;`),开发者还可以定义自己的标签来扩展功能。这个过程主要...

    实现自定义标注并注入

    自定义标注允许开发者创建自己的元数据类型,以声明代码中的特定特性或行为。在Java中,你可以通过使用`@interface`关键字来定义一个自定义注解。例如,如果你想要创建一个用于标记服务类的注解,可以这样定义: ``...

    模拟Spring的依赖注入

    然而,Spring框架提供了更强大、更全面的功能,如自动扫描、类型安全的依赖注入、AOP(面向切面编程)等,这些都是手动模拟难以企及的。在实际开发中,利用Spring框架可以极大地提升开发效率和代码质量。

    06 源码分析-spring自定义标签解析过程

    在Spring框架中,自定义标签的解析过程是一个关键的组件,它使得开发者能够通过XML配置文件以更加直观和简洁的方式声明Bean的定义。本节将深入探讨Spring 5.2.9版本中自定义标签的解析机制,以及背后的源码实现。 ...

    SpringIoc注入

    **二、Spring中的依赖注入类型** 1. **构造器注入**:通过构造函数传递依赖对象,每个构造函数参数代表一个依赖。这种方式确保对象在创建时就具备了所有必需的依赖。 2. **setter注入**:通过setter方法来注入依赖...

    Velocity自定义标签无法注入spring的Service解决办法

    用springMVC+velocity时,当使用自定义标签,发现自定义标签无法注入spring的其它服务类,归根源码发现,velocity的源码中有一段,有一段代码永远获取的是新实例。所以,把这个地方的源码改了,所以使用这个的时候,...

    Spring注解注入属性

    当应用程序中存在多个相同类型的bean时,仅使用`@Autowired`会导致Spring无法确定具体应该注入哪一个bean,从而引发异常。这时,`@Qualifier`注解就派上了用场。通过在`@Autowired`注解附近加上`@Qualifier("bean...

    自定义Spring核心功能项目源码

    这个自定义Spring核心功能项目源码提供了一次深入理解并实践Spring框架核心特性的机会。让我们逐步解析这个项目的各个关键知识点。 首先,我们要讨论的是**IOC(Inversion of Control)**,即控制反转。在传统的...

    spring 自定义xsd

    下面将详细解释如何进行Spring自定义XSD。 首先,你需要创建一个XML Schema文件,比如`myCustomSchema.xsd`。在这个文件中,你可以定义新的元素、属性,甚至引用Spring的标准元素。例如,你可以定义一个`myBean`...

Global site tag (gtag.js) - Google Analytics