关闭

spring 的属性管理

255人阅读 评论(0) 收藏 举报

 

 

 

 

package hb.junit;

import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import hb.spring.Bean1;
import hb.spring.Bean3;
import hb.spring.Bean4;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JunitTest {

	/*
	 * 用于测试spring中 的bean的作用域
	 */
	@Test
	public void testScope(){
		BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext-*.xml");
		Bean3 bean31 = (Bean3)bf.getBean("bean3");
		Bean3 bean32 = (Bean3)bf.getBean("bean3");
		if(bean31==bean32){
			System.out.println("bean31 == bean32");
		}else{
			System.out.println("bean31 != bean32");
		}
		
		Bean4 bean41 = (Bean4)bf.getBean("bean4");
		Bean4 bean42 = (Bean4)bf.getBean("bean4");
		if(bean41==bean42){
			System.out.println("bean41 == bean42");
		}else{
			System.out.println("bean41 != bean42");
		}
	}
	
	/*
	 * 1、测试spring给普通属性注入的方式
	 * 2、用户自定义属性的注入方式
	 */
	@Test
	public void testSpringProperty(){
		BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext-*.xml");
		Bean1 b1 = (Bean1)bf.getBean("bean1");
		System.out.println(b1.getStrValue());
		System.out.println(b1.getIntValue());
		
//		System.out.println(b1.getDateValue());
		
		String[] array = b1.getArrayValue();
		for(int i = 0; i < array.length; i++){
			System.out.println("array["+i+"]="+array[i]);
		}
		
		List list = b1.getListValue();
		Iterator it = list.iterator();
		while(it.hasNext()){
			System.out.println(it.next());
		}
		
		Map map = b1.getMapValue();
		System.out.println(map.get("k1"));
		System.out.println(map.get("k2"));
		
		Set set = b1.getSetValue();
		Iterator it2 = set.iterator();
		while(it2.hasNext()){
			System.out.println(it2.next());
		}
		//关于日期类型需要自定义属性
		System.out.println(b1.getDateValue());
	}
	
	/*
	 * 对于一些常用的属性值可以抽取出来,类似于java中的继承方式
	 */
	@Test
	public void testSpringExtends(){
		BeanFactory bf = new ClassPathXmlApplicationContext("applicationContext-*.xml");
		Bean3 bean3=(Bean3)bf.getBean("bean3");
		System.out.println(bean3.getId());
		System.out.println(bean3.getName());
		System.out.println(bean3.getPassword());
		
		Bean4 bean4 = (Bean4)bf.getBean("bean4");
		System.out.println(bean4.getName());
		System.out.println(bean4.getId());
	}
}

 

 

<?xml version="1.0" encoding="UTF-8"?>
<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="parentBeans" abstract="true">
		<property name="id">
			<value>1000</value>
		</property>
		<property name="name">
			<value>huangbiao</value>
		</property>
	</bean>
	
	<!-- 用来测试bean的scope -->
	<bean id="bean3" class="hb.spring.Bean3" scope="singleton" parent="parentBeans">
		<property name="password">
			<value>password</value>
		</property>
	</bean>
	
	<bean id="bean4" class="hb.spring.Bean4" scope="prototype" parent="parentBeans"/>
</beans>

 由于bean4的scope属性为prototype,表示spring每次都是使用同一个对象,即每次使用的都是同一个,不会创建新的对象,而bean3的scope属性为singleton,这个是spring默认的属性,即每次都会创建一个新的对象,使用的时候spring都会创建一个新的对象

 

<bean id="parentBeans" abstract="true">中的abstract表示这个bean会把公共的部分抽象出来,类似于Java中的继承方式,后面的parent="parentBeans"表示继承了parentBeans中的所有东西

 

对于自定义的属性需要自己解析

package hb.spring;

import java.beans.PropertyEditorSupport;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * java.util.Date属性编辑器 
 * @author Administrator
 *
 */
public class UtilDatePropertyEditor extends PropertyEditorSupport {

	private String format="yyyy-MM-dd";
	
	@Override
	public void setAsText(String text) throws IllegalArgumentException {
		System.out.println("UtilDatePropertyEditor.saveAsText() -- text=" + text);
		
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			Date d = sdf.parse(text);
			this.setValue(d);
		} catch (ParseException e) {
			e.printStackTrace();
		}
	}

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

}

 

自定义属性必须使用spring中的CustomEditorConfigurer类,然后给类customEditors属性注入自定义的类,然后执行自己的方法(这个是spring规定,使用他提供的类来实现用户自定义的类)

 

<!-- 属性编辑器 -->
	<bean id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">
		<property name="customEditors">
			<map>
				<entry key="java.util.Date">
					<bean class="hb.spring.UtilDatePropertyEditor">
						<property name="format" value="yyyy-MM-dd"/>
					</bean>
				</entry>
			</map>
		</property>
	</bean>

 

其他的属性可以查看附件中的内容

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:312464次
    • 积分:8739
    • 等级:
    • 排名:第2257名
    • 原创:1096篇
    • 转载:14篇
    • 译文:0篇
    • 评论:5条
    最新评论