Spring常用属性的注入及属性编辑器

      

           对于对象的注入,我们使用ref方式,可以指定注入的对象,下面看下对于基本类型的注入,以及当spring无法转换基本类型进行注入时,如何编写一个类似转换器的东西来完成注入。

一,基本类型的注入

           下面写一个简单类,来看下spring中对于基本类型的注入:

      

   

<bean id="bean1" class="com.shuitian.spring.Bean1">

		<!-- <property name="strValue" value="hello_spring"/> --><!-- 也可以使用下面的方式 -->

		<!-- private String strValue -->
		<property name="strValue">
			<value>hello_spring</value>
		</property>

		<!-- private int intValue; -->
		<property name="intValue" value="123"/>

		<!-- private List listValue; -->
		<property name="listValue">
			<list>
				<value>list1</value>
				<value>list2</value>
			</list>
		</property>

		<!-- private Set setValue; -->
		<property name="setValue">
			<set>
				<value>set1</value>
				<value>set2</value>
			</set>
		</property>

		<!-- private String[] arrayValues; -->
		<property name="arrayValues">
			<list>
				<value>array1</value>
				<value>array2</value>
			</list>
		</property>

		<!-- private Map mapValue; -->
		<property name="mapValue">
			<map>
				<entry key="k1" value="v1"/>
				<entry key="k2" value="v2"/>
			</map>
		</property>

	</bean>

二,属性编辑器

            在测试类中加入java.util.Date:

       

配置:

<property name="dateValue" value="2009-12-12"/>

         如果像前面那样配置dataValue,为他注入值,会因为string在转换Date的时候spring无法识别util.Date而报错,所以,我们要自己定义一个类,来将如果转换的这一过程写下来。

        

/*
 * java.util.date属性编辑器
 */
public class UtilDatePropertyEditor extends PropertyEditorSupport{

	private String pattern;//日期时间格式

	public void setPattern(String pattern) {
		this.pattern = pattern;
	}

	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		try {
			Date d=new SimpleDateFormat(pattern).parse(text);
			this.setValue(d);//设置转换后的值
		} catch (ParseException e) {
			e.printStackTrace();
		}

	}
}

      注意要继承PropertyEditorSupport类并实现setAsText方法。

      转换器的配置:

<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.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">

	<bean id="customEditors"
		class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<!-- 属性编辑器要放到 CustomEditorConfigurer  类的 customEditors(Map类型)成员变量上面去 -->
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
				<!-- 内部bean,只内部使用 -->
					<bean class="com.shuitian.spring.UtilDatePropertyEditor">
						<!-- 注入日期时间格式 -->
						<property name="pattern" value="yyyy-MM-dd"/>
					</bean>
				</entry>
			</map>
		</property>
	</bean>

	<!-- 不想通过外界访问到 -->
	<!-- <bean id="utilDatePropertyEditor" class="com.shuitian.spring.UtilDatePropertyEditor">
		</bean> -->

</beans>

   add进spring的源码,围观下:

     这一配置的原因就是,我们要将自己定义的属性编辑器,放到CustomEditorConfigurer 它的customEditors里面,这样spring才能使用到它。

时间: 2024-10-27 17:49:43

Spring常用属性的注入及属性编辑器的相关文章

spring如何处理有自定义final属性的注入情况?

问题描述 spring如何处理有自定义final属性的注入情况? 通常spring的注入模式都是单例的,并通过set方法注入依赖,但是,如果用spring管理的对象, 如果拥有一些属性值,且这些属性值是final的,必须在对象new出来时定义并赋值,且这些值并非固定的,是随着环境变化的,该怎么办呢,比如我用spring管理一个thread类,这个线程类执行的时候需要两个int参数,这个时候该如何办? 解决方案 通过构造函数注入参数,参数可以通过配置文件设置,spring读取配置文件的值然后注入.

spring-SSH整合 属性对象注入 失败NullPointerException

问题描述 SSH整合 属性对象注入 失败NullPointerException SSH框架整合,Spring只使用核心模块IOCapplicationContext.xml配置如下: <bean id=""userServiceImpl"" class=""com.founder.ssj.service.impl.UserServiceImpl"" ></bean><bean id="

JavaScript常用对象的方法和属性小结_javascript技巧

本文将简单介绍JavaScript中一些常用对象的属性和方法,以及几个有用的系统函数. 一.串方法 JavaScript有强大的串处理功能,有了这些串方法,才能编写出丰富多彩的网页.在这一部分里,我们将介绍到如何使用与串对象有关的方法和属性. 1.串对象的length属性 串对象仅有一个属性length,这个属性值表示这个串所包括字符的相对数目.语法为: stringName.length 2.串对象的方法 JavaScript提供了多个串方法以帮助控制显示信息.串方法可以分为几个大类,如属性方

注入失败-SSH 整合 当Action切面引入事务管理后,属性无法注入,求大神帮忙看一下

问题描述 SSH 整合 当Action切面引入事务管理后,属性无法注入,求大神帮忙看一下 没加入事务切面前,Action中的注入costDao可以注入,可是applicationContext.xml加入了一下配置后 <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="ses

spring注解无法读取配置文件的属性,时间可以读取,求大神帮忙看看

问题描述 spring注解无法读取配置文件的属性,时间可以读取,求大神帮忙看看 //运用注解读取配置文件 @Component @ComponentScan @Configuration @PropertySource({ "classpath:/info.properties" }) public class PropertiesResolve { private static Logger logger = Logger.getLogger(PropertiesResolve.cl

[C#] 常用工具类——应用程序属性信息访问类

using System; using System.Collections.Generic; using System.Text; using System.Reflection; namespace Utils { /// <summary> /// <para> </para> /// 常用工具类--应用程序属性信息访问类 /// <para> -------------------------------------------</para&g

Spring两种依赖注入方式的比较

       我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入.先看代码: 假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法,还有一个包含这三个属性的构造方法.如果用spring来管理这个对象,那么有以下两种方式为People设置属性: 1.设值注入: ? 1 2 3 4 5 6 <bean id="people" class="com.abc.People"&g

【浅谈JavaEE框架】Spring常用注解,自动扫描装配Bean

1.引入context命名空间(在Spring的配置文件中) 配置文件如下:  Xml代码   1.xmlns:context="http://www.springframework.org/schema/context"     2.http://www.springframework.org/schema/context   3.http://www.springframework.org/schema/context/spring-context-2.5.xsd    打开配置

Spring 3.0 注解注入详解

原文地址: http://developer.51cto.com/art/201104/255395.htm 一.各种注解方式 1.@Autowired注解(不推荐使用,建议使用@Resource) @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作.@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性.要使@Autowired能够工作,还需要在配置文件中加入以下 Xml代码 <bean class="org.sp