spring 的属性管理

原创 2013年12月04日 09:56:22

 

 

 

 

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>

 

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

相关文章推荐

Spring的bean管理(注解注入属性和注解文件混合使用)

Spring的bean管理(注解注入属性和注解文件混合使用) 注解方式注入属性  1 创建service类,创建dao类,在service得到dao对象     注入属性第一个注解 @A...

Spring整合hibernate的事务属性介绍以及声明式事务管理 (使用Annotation和xml)

采用声明式事务 1、声明式事务配置 * 配置SessionFactory * 配置事务管理器 * 事务的传播特性 * 那些类那些方法使用事务思考:要把事物加到那些层,把事物加在DAO这一层呢,还是加在...

基于maven管理的项目中spring+mybatis配置数据源读取不到properties属性文件的问题

此时,启动会报异常,${jdbc.driver}这样的表达式获取不到properties里面的值,因为MapperScannerConigurer实际是在解析加载bean定义阶段的,这个时候要是设置s...

spring学习笔记——引用bean的属性值,动态管理网站参数与菜单项

我所在公司的开发框架很陈旧,功能上也有很多bug,唯一让我觉得NB的是这框架可以动态调整自己的界面菜单、子菜单,动态配置权限和各种参数。一直想知道这种功能的实现方式,今天看书,发现spring中对be...
  • gklifg
  • gklifg
  • 2013年11月12日 22:52
  • 801

spring学习(一)属性管理PropertySource类

spring学习 propertySource

JAVA_OA管理系统(四)番外篇:使用Spring注解注入属性

本文介绍了使用Spring注解注入属性的方法。使用注解以前,注入属性通过类以及配置文件来实现。现在,注入属性可以通过引入@Autowired注解,或者@Resource,@Qualifier,@Pos...

Spring(十三)JDBC相关概念、事务隔离级别、事务传播属性、事务管理及Spring整合JDBC

做开发不连接数据库怎么行!Spring整合JDBC过程中,数据源可以直接都在beans.xml里配置,也可以把数据单独放在一个properties文件里,方便维护。 首先放入各种jar包,连接MySQ...

Spring如何装配各种集合类型的属性

  • 2016年10月19日 13:04
  • 2.75MB
  • 下载

spring中的自定义属性编辑器

  • 2011年05月08日 19:35
  • 2.49MB
  • 下载

vs2012的属性管理器和项目属性的一些问题(opencv+qt+vs2012)

1.首先说明一点,就是我原来配置opencv,在vs2012上,用的是属性管理器。为的是一劳永逸的为项目配置属性,不在每次新建项目就重新配置. 2.先说明一下属性管理器和项目属性的差别。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring 的属性管理
举报原因:
原因补充:

(最多只允许输入30个字)