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管理的类注入问题

Java代码   //      ApplicationContext context = new ClassPathXmlApplicationContext(new String[]...
  • XiaoHanZuoFengZhou
  • XiaoHanZuoFengZhou
  • 2017年12月14日 15:03
  • 55

从头认识Spring-1.7 怎样通过属性注入Bean?(1)-怎样通过属性向对象注入值?

这一章节我们来讨论一下怎样通过属性注入Bean?这一章节分为两部分,第一部分我们通过属性向对象注入值,第二部分我们通过属性向对象注入另一个对象的引用。1.怎样通过属性向对象注入值?(1)domainp...
  • raylee2007
  • raylee2007
  • 2016年01月31日 15:47
  • 1782

如何让不受spring管理的类具有spring自动注入的特性.--AutowireCapableBeanFactory

package spring.core.pracitce; import java.io.BufferedReader; import java.io.IOException; import jav...
  • doctor_who2004
  • doctor_who2004
  • 2014年12月04日 22:55
  • 2149

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

Spring的bean管理(注解注入属性和注解文件混合使用) 注解方式注入属性  1 创建service类,创建dao类,在service得到dao对象     注入属性第一个注解 @A...
  • zhupengqq
  • zhupengqq
  • 2017年05月30日 19:46
  • 1278

Spring 管理对象

– Start 当我们需要某个对象时,通常的做法是 new 一个对象,然后使用它。使用 Spring 后,套路完全变了,Spring 帮我们创建对象,然后缓存到它的容器中,当我们需要一个对象时,问 ...
  • shangboerds
  • shangboerds
  • 2017年05月20日 23:09
  • 1235

将struts2的action交给spring管理及注意事项

将struts2中的action交给spring管理 1.xml方式 applicationContext.xml  
  • wkkyo
  • wkkyo
  • 2016年03月02日 22:59
  • 1488

SpringBoot、Spring传统方式设置Bean属性对比

springboot jdbc datasource
  • wangjinxue2011
  • wangjinxue2011
  • 2018年01月02日 01:01
  • 29

Struts2与Spring整合.让Spring来管理action

Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的be...
  • xulisha123
  • xulisha123
  • 2015年04月08日 09:37
  • 3222

13. Spring Security session管理

session管理 目录   1.1     检测session超时 1.2     concurrency-control 1.3     session 固定攻击保护        ...
  • software444
  • software444
  • 2015年11月29日 21:52
  • 1808

Spring对SessionFactory管理的几种方式

--> --> true              【key为hibernate的属性名称,必须要有hibernate前缀】 update ...
  • vv354123
  • vv354123
  • 2014年10月19日 23:59
  • 637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring 的属性管理
举报原因:
原因补充:

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