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-07 01:42:13

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

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

对于对象的注入,我们使用ref方式,可以指定注入的对象,下面看下对于基本类型的注入,以及当spring无法转换基本类型进行注入时,如何编写一个类似转换器的东西来完成注入. 一,基本类型的注入 下面写一个简单类,来看下spring中对于基本类型的注入: <bean id="bean1" class="com.shuitian.spring.Bean1"> <!-- <property name="strValue" valu

反射-Spring管理Bean,注入Bean属性的反射机制。

#反射 1.是JAVA API,是Java提供的现成的类!! --接受API提供的功能! 2. 是Java提供的动态执行机制,动态加载类,动态创建对象,动态访问属性,动态调用方法. ##反射用途 1. eclipse 中解析类的结构使用了反射 2.JUnit识别被测试方法使用了反射 -- JUnit3 利用了反射查找test开头的方法 -- JUnit4 利用了反射解析@Test查找测试方法 3.Spring 管理Bean对象,注入Bean属性使用了反射 --利用反射创建Bean对象实例 --利

spring:使用&lt;prop&gt;标签为Java持久属性集注入值

spring:使用<prop>标签为Java持久属性集注入值 使用 spring 提供的<prop>为Java持久属性集注入值,也就是向 java.util.Properties 对象中注入值. <props> 是简化了的 <map> ,该元素对应配置类型为 java.util.Properties 的对象依赖. 因为Properties 只能指定 String 类型的键和值,所以 <props> 的配置简化很多,只有固定的格式. 1.创建 Te

Spring学习笔记--注入Bean属性

这里通过一个MoonlightPoet类来演示了注入Bean属性property的效果. package com.moonlit.myspring; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.springframework.context.ApplicationContext; import org.springframework.context.support.Clas

Spring 属性依赖注入

1.1    属性依赖注入 依赖注入方式:手动装配 和 自动装配 手动装配:一般进行配置信息都采用手动 基于xml装配:构造方法.setter方法 基于注解装配: 自动装配:struts和spring 整合可以自动装配 byType:按类型装配 byName:按名称装配 constructor:构造装配, auto: 不确定装配. 一.构造方法注入 User.java public class User { private Integer uid; private String username

spring为类的静态属性实现注入

我们知道,正常情况下,spring的一个bean要依赖其他资源,如properties或其他bean,直接利用@Value或@Autowired就可以了.这两个注解就相当于spring application context xml文件定义bean时的property节点.相当于调用了每个属性的set方法. <bean id="person" class="com.myapp.core.spel.xml.Person"> <property nam

使用SMM框架开发企业级应用-----Spring集合注入和域属性自动注入byName和byType

Spring集合的注入 步骤一:导入依赖 步骤二:创建实体类 步骤三:创建大配置文件 步骤四:测试 域属性自动注入 byName与byType 步骤一:创建两个实体类 public class Student { private Integer stuid; private String stuName; private Teacher teacher; public Teacher getTeacher() { return teacher; } public void setTeacher(

day38 13-Spring的Bean的属性的注入:SpEL注入

Spring2.5提供了名称空间p注入属性的方式,Spring3.几提供了SpEL属性注入的方式. <?xml version="1.0" encoding="UTF-8"?> <!-- 别去schema,schema是文件,本地的文件,你得引那个头 --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://

day38 10-Spring的Bean的属性的注入

后处理bean,如果是返回bean,那么什么都不做直接把这个类原封不动地给你返回回去. 在它执行一些逻辑方法的时候对它进行逻辑增强,比如说进行时间监控,权限管理,日志的记录等等. 要做肯定是对正常的类增强才可以,因为正常你就调用这个类的add或者find()方法了. 增强的方法:继承.装饰者模式.动态代理. 装饰者的缺点是:如果你的接口中的方法太多,而你只需要增强其中的某一个方法,那你这个类里面就得写特别特别多的方法.而且其他的方法都是原封不动地给人家返回的. 动态代理:最灵活.对这个类生成一个